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
- This command say start recording (q) in a.
- Start insertion mode (i).
- Type <code>.
- Return to normal mode (<esc>).
- Move to the end of the word (e).
- Then enter insert mode again (a).
- Type </code>.
- Return to normal mode (<esc>).
- 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.
精彩评论