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

本小妞迷上赌 提交于 2019-12-12 08:34:55

问题


I'm working with the vim-surround plugin and this HTML (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?


回答1:


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




回答2:


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.




回答3:


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!




回答4:


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



来源:https://stackoverflow.com/questions/5794182/how-do-i-surround-two-words-with-code-tag-in-vim-such-that-i-can-repeat-the-o

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!