4

我想模仿 Textmates CTRL+ALT+w,它会在同一行创建一对新的打开和关闭 HTML 标记。

在 VIM Surround 中,我为此在编辑模式下使用 CTRL+st,但它总是在设置标签后缩进并创建一个新行,因此它看起来像这样(* = 光标位置):

<p>
  *
</p>

有没有办法做到这一点?:

<p>*</p>
4

6 回答 6

3

我想你的问题是所选区域是“线明智的”。例如,如果您选择几个生命V并用标签将其包围,则标签将放置在所选行的上方和下方。

您可能想要创建一个“字符明智”的选择,v然后将其包围。

无论如何,请发布您创建的地图,以便我们帮助调试。


更新

在评论中进行了一些澄清之后,我会告诉你环绕插件不是最好的选择。正如它的名字所描述的,它是为处理被包围的内容而创建的。所以你可能需要内容来包围。

在您的情况下,我建议您查看HTML AutoCloseTag。一旦你输入>. 它肯定更合适,并且比环绕使用更少的击键。

<p         <--- Now when you type ">", if becomes:
<p>|</p>   <--- Where "|" is the cursor.

显然,您将在每个标签上都获得这种行为。但如果你喜欢它可能会很方便。

于 2011-05-23T12:48:47.470 回答
0

在普通模式下,键入vstp>以进入可视模式并在当前光标位置的同一行输出一个开始和结束<p>标记。使用大写字母 S 来保持当前缩进级别。

这不会像您描述的那样将光标放在标签之间,但 Textmate 的CtrlW快捷方式也没有(我认为您的意思是 CTRL+Shift+w,而不是 CTRL+ALT+w,因为后者只是输出一个菱形符号。)

于 2011-05-23T14:18:20.850 回答
0

根据作者实际寻找的内容,问题标题在技术上是错误的,但由于我实际上是在寻找标题中提出的问题的答案,我想我也应该提供一个答案。

要在元素周围创建一个新标签,而不使用 Vim Surround 在使用块明智选择时使用的自动缩进(即:)VysS,您可以改为执行以下操作:

^ys$

此命令会将您的光标移动到该行的第一个非空白字符,发出您要使用 You Surround 的命令,然后移动到该行的末尾。然后,只需开始输入您的标签。

结果是这样的:

<input type="email" name="email">

可能变成这样:

<li><input type="email" name="email"></li>

该命令也可以重复使用.以及所有正常的其他 Vim 优点。

于 2013-04-12T19:45:56.567 回答
0

偶然发现了这个问题,因为我也想知道这个问题 - 我相信最简单的方法就是:

yss<p>

yss用没有缩进的东西包围一行 - 见这里: http: //www.catonmat.net/blog/vim-plugins-surround-vim/

于 2013-08-17T13:32:28.370 回答
0

我的回答可能来晚了,但我会尽力提供帮助。我对 Vimsurround 插件有类似的问题。每次我使用 ctrl+V 选择句子(一行)并尝试用我得到的东西包围它时:

{
var myVar
}

而不是这个:

{ var myVar } // what I wanted

我找到了简单的解决方案:在正常模式下,我选择一行带有vis命令,然后输入大写 C(我的 vim 环绕映射)并选择要环绕的括号。然后我得到一行很好的环绕。

于 2013-02-18T14:19:42.007 回答
0

您可以通过选择相关的文本对象来完成此操作::h text-objects

...并围绕它而不是围绕视觉线选择。

我发现自己遇到的最常见的例子是试图用另一个标签包围一个标签。在这种情况下, theitattext 对象非常有用:

                        *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>可以实现这一点。

于 2021-10-15T03:47:59.687 回答