【发布时间】:2011-08-31 03:22:39
【问题描述】:
我想模仿 Textmates CTRL+ALT+w,它会在同一行创建一对新的打开和关闭 HTML 标记。
在 VIM Surround 中,我在编辑模式下使用 CTRL+st,但它总是在设置标签后缩进并创建一个新行,所以它看起来像这样(* = 光标位置):
<p>
*
</p>
有没有办法做到这一点? :
<p>*</p>
【问题讨论】:
我想模仿 Textmates CTRL+ALT+w,它会在同一行创建一对新的打开和关闭 HTML 标记。
在 VIM Surround 中,我在编辑模式下使用 CTRL+st,但它总是在设置标签后缩进并创建一个新行,所以它看起来像这样(* = 光标位置):
<p>
*
</p>
有没有办法做到这一点? :
<p>*</p>
【问题讨论】:
我猜你的问题是选择的区域是“行明智的”。例如,如果您选择了几个带有V 的生命并用标签将其包围,则标签将放置在所选行的上一行和下一行。
您可能想要创建一个“字符明智”选择,在包围它之前使用v。
无论如何,请发布您创建的地图,以便我们帮助调试。
在 cmets 中进行了一些澄清后,我会告诉您环绕插件不是最佳选择。正如它的名字所描述的,它是为处理被包围的内容而创建的。所以你可能需要内容来包围。
就您而言,我建议您查看HTML AutoCloseTag。一旦你输入>,这个插件就会关闭 html 标签。它肯定比环绕更合适,并且使用的击键次数更少。
<p <--- Now when you type ">", if becomes:
<p>|</p> <--- Where "|" is the cursor.
显然,您将在每个标签上都获得这种行为。但如果你喜欢它可能会很方便。
【讨论】:
在普通模式下,键入vstp> 进入可视模式,并在当前光标位置的同一行输出一个打开和关闭<p> 标签。使用大写字母 S 来保持当前缩进级别。
这不会将光标放在您描述的标签之间,但 Textmate 的 CtrlW 快捷方式也没有(我认为您的意思是 CTRL+Shift+w,不是 CTRL+ALT+w,因为后者只是输出一个菱形符号。)
【讨论】:
我的回答可能来晚了,但我会尽力提供帮助。 我对 Vimsurround 插件有类似的问题。每次我使用 ctrl+V 选择句子(一行)并尝试用我得到的东西包围它时:
{
var myVar
}
而不是这个:
{ var myVar } // what I wanted
我找到了简单的解决方案:在正常模式下,我选择一行 vis 命令,然后输入大写 C(我的 vim 环绕映射)并选择要环绕的括号。然后我很好地得到一行被包围了。
【讨论】:
根据作者实际寻找的内容,问题标题在技术上贴错了标签,但由于我实际上是在寻找标题中提出的问题的答案,我想我也应该提供答案。
要创建一个围绕元素的新标签,而不使用 Vim Surround 在使用块明智选择时使用的自动缩进(即:VysS),您可以改为执行以下操作:
^ys$
此命令会将您的光标移动到该行的第一个非空白字符,发出您要使用 You Surround 的命令,然后移动到该行的末尾。然后,只需开始输入您的标签。
结果是这样的:
<input type="email" name="email">
可能变成这样:
<li><input type="email" name="email"></li>
该命令也可重复使用 。 和所有正常的其他 Vim 优点。
【讨论】:
偶然发现了这个问题,因为我也想知道这个问题 - 我相信最简单的方法就是:
yss<p>
(yss 用没有缩进的东西包围了一行 - 请参见此处:http://www.catonmat.net/blog/vim-plugins-surround-vim/)
【讨论】:
您可以通过选择相关的文本对象来完成此操作::h text-objects
...并围绕它而不是围绕视觉线选择。
我发现自己遇到的最常见的例子是试图用另一个标签包围一个标签。在这种情况下,it 和 at 文本对象非常有用:
*v_at* *at*
at "a tag block", select [count] tag blocks, from the
[count]'th unmatched "<aaa>" backwards to the matching
"</aaa>", including the "<aaa>" and "</aaa>".
See |tag-blocks| about the details.
When used in Visual mode it is made characterwise.
*v_it* *it*
it "inner tag block", select [count] tag blocks, from the
[count]'th unmatched "<aaa>" backwards to the matching
"</aaa>", excluding the "<aaa>" and "</aaa>".
See |tag-blocks| about the details.
When used in Visual mode it is made characterwise.
例如,如果您将光标放在一个段落中,并且想在同一行用一个 div 将其包围,ysat<div> 就可以做到这一点。
【讨论】: