在VIM Surround中,我使用编辑模式下的CTRL+st进行操作,但它总是缩进并在设置标记后创建新行,因此看起来像这样(* = 光标位置):
<p>
*
</p>
有没有一种方法可以实现这个?:
<p>*</p>
V
选择几行并用标签包围它们,则标签将放置在所选行的上方和下方各一行。v
。在评论中进行了一些澄清后,我告诉你,surround插件不是最好的选择。正如其名称所描述的那样,它是为处理周围内容而创建的。因此,您可能需要将内容包围起来。
在您的情况下,我建议查看HTML AutoCloseTag。该插件在您键入>
时关闭html标签。它肯定比surround更合适,并且使用的击键次数更少。
<p <--- Now when you type ">", if becomes:
<p>|</p> <--- Where "|" is the cursor.
您可以通过选择相关的文本对象来完成此操作::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.
ysat<div>
就可以实现这个目的。该问题标题在技术上有误,与作者实际寻找的内容不符。但由于我实际上正在寻找标题中提出的问题的答案,因此我认为应该也提供一个答案。
要在不使用块选择时(例如:VysS)创建一个围绕元素的新标签而不使用 Vim Surround 自动缩进,您可以执行以下操作:
^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/)
从正常模式开始,输入vstp>
进入可视模式,并在当前光标位置的同一行输出一个开放和关闭的<p>
标签。使用大写字母S来保持当前缩进级别。
这并不会像您描述的那样将光标放置在标签之间,但Textmate的CtrlW快捷键也不会(我认为您指的是CTRL+Shift+w,而不是CTRL+ALT+w,因为后者只会输出一个菱形符号。)
我的回答可能有点晚了,但我会尽力帮忙。 我使用Vimsurround插件时遇到了类似的问题。每次我使用ctrl+V选择一行句子并尝试用某些东西包围它时,我都会得到这个:
{
var myVar
}
而不是这样:
{ var myVar } // what I wanted