题
我想模仿 Textmates CTRL+ALT+w,它在同一行上创建一对新的开始和结束 HTML 标签。
在 VIM Surround 中,我在编辑模式下使用 CTRL+st 来实现此目的,但它总是在设置标签后缩进并创建一个新行,因此它看起来像这样(* = 光标位置):
<p>
*
</p>
有办法实现这一点吗?:
<p>*</p>
解决方案
我猜你的问题是所选区域是“逐行”的。例如,如果您选择一些生命 V
并用标签包围它,标签将放置在所选行的上方一行和下方一行。
您可能想创建一个“字符明智”的选择, v
在包围它之前。
无论如何,请发布您创建的地图,以便我们帮助调试。
更新
在评论中进行一些澄清后,我会告诉您环绕插件不是最好的选择。正如其名称所描述的,它是为了处理周围的内容而创建的。所以你可能需要围绕内容。
对于你的情况,我建议看看 HTML 自动关闭标签. 。一旦您输入以下内容,该插件就会关闭 html 标签 >
. 。它当然更合适,并且比环绕声使用的击键更少。
<p <--- Now when you type ">", if becomes:
<p>|</p> <--- Where "|" is the cursor.
显然,您将在每个标签中获得这种行为。但如果你喜欢的话,这可能会很方便。
其他提示
在正常模式下,输入 vstp>
进入视觉模式并输出开闭 <p>
标记在当前光标位置的同一行上。使用大写 S 来保持当前的缩进级别。
这不会将光标置于您所描述的标签之间,但 Textmate 也不会 控制键瓦 快捷方式(我认为你的意思是 CTRL+Shift+w,而不是 CTRL+ALT+w,因为后者只输出一个菱形符号。)
我的答案可能会迟到,但我会试着帮忙。 我对Vimsurround插件有类似的问题。每次使用CTRL + V选择句子(一行)并尝试使用我的内容围绕它:
{
var myVar
}
.
而不是这个:
{ var myVar } // what I wanted
.
我找到了简单的解决方案:从正常模式下,我选择一个带 vis 命令的行,然后我键入大写c(我的Vim环绕映射),然后选择括号环绕。然后我很好地获得一条线包围。
问题标题在技术上基于作者实际寻找的内容,但由于我实际上正在寻找标题中提出的问题的答案,我认为我应该向它提供答案。
在使用块明智的选择时创建没有自动缩进Vim环绕使用的元素的新标签(即: VYSS ),您可以改为:
^ ys $
此命令将光标移动到行的第一个非空字符,发出要利用您的命令,然后移动到行的结尾。然后,只需开始输入您的标记。
结果是:
<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/ )