Vim Surround:创建新标签,但不要缩进/换行

时间:2011-05-23 12:43:51

标签: vim surround

我想模仿Textmates CTRL + ALT + w,它会在同一行创建一对新的开始和结束HTML标记。

在VIM Surround中,我在编辑模式下使用CTRL + st,但它总是在设置标记后缩进并创建一个新行,所以它看起来像这样(* =光标位置):

<p>
  *
</p>

有没有办法实现这个目标? :

<p>*</p>

5 个答案:

答案 0 :(得分:3)

我猜您的问题是所选区域是“直线”。例如,如果您使用V选择一些生命并用标记将其包围,则标记将放置在上面一行,一行放在所选行之后。

您可能希望在围绕它之前创建一个“明智的”选择,v

无论如何,请发布您创建的地图,以便我们帮助调试。


更新

在评论中做了一些澄清之后,我会告诉你环绕插件并不是最好的选择。正如其名称所描述的那样,它是为处理包围内容而创建的。所以你可能需要内容包围。

在您的情况下,我建议您查看HTML AutoCloseTag。键入>后,此插件会关闭html标记。它肯定更合适,并且使用的键击次数少于环绕声。

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

显然,你会对每个标签都有这种行为。但如果你喜欢它可能会很方便。

答案 1 :(得分:0)

从正常模式,键入vstp>进入可视模式,并在当前光标位置的同一行输出开始和结束<p>标记。使用大写字母S来维持当前的缩进级别。

这不会像你描述的那样将光标放在标签之间,但是Textmate的 Ctrl W 快捷方式(我认为你的意思是CTRL + Shift + w,不是CTRL + ALT + w,因为后者只输出钻石标志。)

答案 2 :(得分:0)

我的回答可能会迟到,但我会尽力帮忙。 我有Vimsurround插件的类似问题。每当我使用ctrl + V选择句子(一行)并尝试用一些东西包围它时我得到这个:

{
var myVar
}

而不是:

{ var myVar } // what I wanted

我找到了简单的解决方案:在普通模式下,我选择一条带有 vis 命令的行,然后输入大写C(我的vim环绕映射)并选择括号环绕。然后我很好地得到一行包围。

答案 3 :(得分:0)

问题标题在技术上根据作者实际需要的内容进行了错误标记,但由于我实际上是在寻找标题中提到的问题的答案,我想我也应该给出答案。

要创建一个围绕元素的新标签,而不使用Vim Surround在使用块方式选择时使用的自动缩进(即: VysS ),您可以执行以下操作:

^ YS $

此命令会将光标移动到该行的第一个非空白字符,发出您想要使用You Surround的命令,然后移动到该行的末尾。然后,只需开始输入您的标签。

结果如下:

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

可能会变成这样:

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

该命令也可重复使用和所有正常的其他Vim善良。

答案 4 :(得分:0)

偶然发现这个问题,因为我也想知道这个问题 - 我认为最简单的方法就是:

yss<p>

yss围绕一条没有缩进的内容的行 - 请参阅此处:http://www.catonmat.net/blog/vim-plugins-surround-vim/