Question

I'm using Vim's surround and repeat plugins to wrap lines of text with html tags.

I'll use "yse<p>" and "ys$<p>", they both work fine.

I try to repeat the command with ".", and it shows <p> in the terminal, but whenever I press enter to execute the command, surround replaces what should be <p> and </p> with ^M.

My line looks like ^Mtext here^M

I recognize the character as a line ending, but I don't understand why surround won't wrap my line with the code it shows in the terminal (which is correct), but instead wraps my line with DOS line endings.

I'm using gVIM on windows XP, if that makes any difference.

Was it helpful?

Solution

It's actually because <p> isn't really there when you repeat the command with .

Try this: Before you repeat the command with . first hit o to empty the command line area of any text, then hit .

You'll see that it is actually blank, which is why the cursor is on the first character.

To repeat the wrapping properly, you'll either have to type in <p> every time or record a quick macro.

Macro: ys$<p>

Paste that into vim, highlight it, and type "py

Now you can run the macro with @p

OTHER TIPS

surround.vim's documentation says:

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

So if you are using yss it should work, but apparently other versions of "ys" aren't supported. Sounds like a good feature require to submit to the repeat.vim owner.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top