开发者

How do I surround two words with <code> tag in vim, such that I can repeat the operation with a dot operator?

开发者 https://www.devze.com 2023-03-01 01:06 出处:网络
I\'m working with the vim-surround plugin and this HTML 开发者_如何学C(where the * is my cursor):

I'm working with the vim-surround plugin and this HTML 开发者_如何学C(where the * is my cursor):

<li class="sample" style="border-color: #005462;">*#005462</li>

I'd like to surround the #005462 with <code> so it looks like this, <code>#005462</code>. I can do this with visual mode but would like to do something I can repeat with the dot operator. Any advice?


You want repeat.vim which adds . support to several other plugins, including surround.


From normal mode try to record a macro. Then:

qai<code><esc>ea</code><esc>q
  1. This command say start recording (q) in a.
  2. Start insertion mode (i).
  3. Type <code>.
  4. Return to normal mode (<esc>).
  5. Move to the end of the word (e).
  6. Then enter insert mode again (a).
  7. Type </code>.
  8. Return to normal mode (<esc>).
  9. Then stop recording (q).

After you can repeat this command using @a or @@ for repeat last used command. Dont forget to be positionned at the rigth place when you invoke a or you will not get the expected result.


A couple other people have run into problems repeating things with surround.vim:

  • Repeating surround with “.” command in VIM

  • Vim Surround + Repeat, wraps my text with ^M

In the first link, there is a quote from the surround.vim docs that implies visual mode surrounding doesn't work:

The "." command will work with ds, cs, and yss if you install repeat.vim

And given the text elements surrounding it, I don't think there's a way to surround just the #005462 without using visual mode.

So for this particular problem, I think a quick, repeatable search and replace is your best bet.

:s/: \(#......\);/: <code>\1<\/code>;/g

Go to the right line, and type or paste this in command-line mode and press enter.

Move to the next line and press & to repeat it.

If you know you want to replace ALL of them in the file, you can add % before the s/ command, like so:

:%s/: \(#......\);/: <code>\1<\/code>;/g

Hope this helps!


Check out this Vimcasts.org episode on converting haml to erb. You can use the same technique to accomplish your task.

0

精彩评论

暂无评论...
验证码 换一张
取 消