我想模仿 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/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top