我想模仿 Textmates CTRL+ALT+w,它会在同一行创建一对新的打开和关闭 HTML 标记。
在 VIM Surround 中,我为此在编辑模式下使用 CTRL+st,但它总是在设置标签后缩进并创建一个新行,因此它看起来像这样(* = 光标位置):
<p>
*
</p>
有没有办法做到这一点?:
<p>*</p>
我想你的问题是所选区域是“线明智的”。例如,如果您选择几个生命V
并用标签将其包围,则标签将放置在所选行的上方和下方。
您可能想要创建一个“字符明智”的选择,v
然后将其包围。
无论如何,请发布您创建的地图,以便我们帮助调试。
在评论中进行了一些澄清之后,我会告诉你环绕插件不是最好的选择。正如它的名字所描述的,它是为处理被包围的内容而创建的。所以你可能需要内容来包围。
在您的情况下,我建议您查看HTML AutoCloseTag。一旦你输入>
. 它肯定更合适,并且比环绕使用更少的击键。
<p <--- Now when you type ">", if becomes:
<p>|</p> <--- Where "|" is the cursor.
显然,您将在每个标签上都获得这种行为。但如果你喜欢它可能会很方便。
在普通模式下,键入vstp>
以进入可视模式并在当前光标位置的同一行输出一个开始和结束<p>
标记。使用大写字母 S 来保持当前缩进级别。
这不会像您描述的那样将光标放在标签之间,但 Textmate 的CtrlW快捷方式也没有(我认为您的意思是 CTRL+Shift+w,而不是 CTRL+ALT+w,因为后者只是输出一个菱形符号。)
根据作者实际寻找的内容,问题标题在技术上是错误的,但由于我实际上是在寻找标题中提出的问题的答案,我想我也应该提供一个答案。
要在元素周围创建一个新标签,而不使用 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/)
我的回答可能来晚了,但我会尽力提供帮助。我对 Vimsurround 插件有类似的问题。每次我使用 ctrl+V 选择句子(一行)并尝试用我得到的东西包围它时:
{
var myVar
}
而不是这个:
{ var myVar } // what I wanted
我找到了简单的解决方案:在正常模式下,我选择一行带有vis命令,然后输入大写 C(我的 vim 环绕映射)并选择要环绕的括号。然后我得到一行很好的环绕。
您可以通过选择相关的文本对象来完成此操作::h text-objects
...并围绕它而不是围绕视觉线选择。
我发现自己遇到的最常见的例子是试图用另一个标签包围一个标签。在这种情况下, theit
和at
text 对象非常有用:
*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>
可以实现这一点。