Question

I would like to mimic Textmates CTRL+ALT+w, which creates a new pair of opening and closing HTML tags on the same line.

In VIM Surround I'm using CTRL+st in Edit mode for this, but it always indents and creates a new line after setting the tag, so that it looks like this (* = cursor position):

<p>
  *
</p>

Is there a way to achieve this? :

<p>*</p>
Was it helpful?

Solution

I guess your problem is that the selected area is "line wise". For example, if you select a few lives with V and surround it with tags, the tags will be placed one line above and one bellow the selected lines.

You probably want to create a "character wise" selection, with v before surrounding it.

Anyway, please post the map you created, so we can help debugging this.


Update

After some clarification in the comments, I would tell you that the surround plugin is not the best option. As its name describes, it was created to deal with surrounded content. So you may need content to surround.

In your case, I recommend taking a look in HTML AutoCloseTag. This plugin closes the html tag once you type the >. It is certainly more appropriated, and uses less keystrokes than surround.

<p         <--- Now when you type ">", if becomes:
<p>|</p>   <--- Where "|" is the cursor.

Obviously, you will get this behavior to every tag. But that may be handy if you like it.

OTHER TIPS

From normal mode, type vstp> to enter visual mode and output an opening and closing <p> tag on the same line at the current cursor position. Use a capital S to maintain the current indent level.

This doesn't place the cursor in between the tags as you describe, but neither does Textmate's CtrlW shortcut (I think you meant CTRL+Shift+w, not CTRL+ALT+w, as the latter just outputs a diamond sign.)

My answer is probably coming to late, but I'll try to help. I had similar problem with Vimsurround plugin. Every time I select sentence (one line) using ctrl+V and try to surround it with something I get this:

{
var myVar
}

instead of this:

{ var myVar } // what I wanted

I found easy solution: From a normal mode I choose a line with vis command and then I type capital C (my vim surround mapping ) and choose brackets to surround.Then I get one line nicely surrounded.

The question title is technically mislabeled based on what the author was actually looking for, but since I was actually looking for the answer to the question asked in the title, I figure I should provide an answer to it as well.

To create a new tag surrounding an element without the automatic indentation Vim Surround uses when using a block wise selection (ie: VysS), you can instead do something like:

^ys$

This command will move your cursor to the first non-blank character of the line, issue the command that you want to utilize You Surround, and move to the end of the line. Then, simply start entering your tag.

The result is this:

<input type="email" name="email">

Could become something like this:

<li><input type="email" name="email"></li>

The command is repeatable as well with . and all the normal other Vim goodness.

Stumbled upon this question because I was wondering this as well - I believe the simplest way to do this is just:

yss<p>

(yss surrounds a line with something without indenting - see here: http://www.catonmat.net/blog/vim-plugins-surround-vim/)

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