在vim中,是否有一个插件使用%来匹配相应的双引号(")?

sta*_*tti 35 vim plugins editor

%关键是VIM的最好的功能之一:它可以让你从跳跃{},[],等等.

但是,它默认情况下不能使用引号:或者,"或者',因为开始和结束引用是相同的字符,使得实现更加困难.

想一想这个问题,我确信它应该通过计算前面引号的数量是奇数还是偶数并相应地跳到上一个或下一个引号来实现.

在我尝试自己实现它之前,我想知道某人是否已经拥有它?

Gre*_*ill 76

根据您需要的原因,可能有更好的方法来完成您正在寻找的东西.例如,如果您有以下代码:

foo(bar, "baz quux")
              ^
Run Code Online (Sandbox Code Playgroud)

并且您的光标恰好位于^,并且您想用其他东西替换引号内的所有内容,使用ci".这使用Vim "文本对象"更改(c)(i)引号(")内的所有内容,并将您置于插入模式,如下所示:

foo(bar, "")
          ^
Run Code Online (Sandbox Code Playgroud)

然后,您可以开始键入替换文本.还有许多其他文本对象对这种快捷方式非常有用.每周学习(并使用)一个新的Vim命令,您很快就会成为专家!

  • 正如你所说,引号的难点在于它们不是自然对称的.关于奇数/偶数的想法似乎是一个很好的折衷方案,尽管它并不适用于所有情况.必须小心使用转义引号(`\"`)或Python三引号(`""")或其他上下文中的引号,例如Perl正则表达式,或支持多行字符串文字的语言.但也许值得一试! (5认同)

Ver*_*reb 32

格雷格的答案非常有用,但我也喜欢'f'和'F'命令,它们将光标向前和向后移动到命令后按下的字符.

所以按f"移动到下一个"字符,按F"移动到前一个字符.

  • 您还可以将这些文本移动命令与修改命令组合在一起,因此`cf"`会更改并包括下一个引号,而`ct"`会更改为*但不*包括下一个引号. (3认同)

th1*_*ey3 10

我发现这种技术对于转到非常长的带引号的字符串的开头/结尾非常有用。

  1. 当光标在字符串内时,使用vi"或视觉选择整个字符串vi'
  2. 通过按转到字符串的开头/结尾 o
  3. 按 Esc 退出视觉选择模式

这实际上将光标放在开始/结束引号字符旁边,但仍然感觉很有帮助。

编辑

在此处添加 Stefan 的精彩评论,对于可能错过评论的人来说,这是一个更好的选择。

如果您使用 va"(和 va'),那么它实际上也会在视觉上选择引号本身。

– Stefan van den Akker

  • 如果你使用 `va"`(和 `va'`),那么它实际上也会在视觉上选择引号本身。 (4认同)

nel*_*rom 9

我想扩展Greg的答案,并介绍surround.vim插件.

假设您想要修改"字符本身,而不是编辑引号的内容.假设您想要从双引号更改为单引号.

foo(bar, "baz quux")
              ^
Run Code Online (Sandbox Code Playgroud)

环绕声插件允许您将其更改为

foo(bar, 'baz quux')
              ^
Run Code Online (Sandbox Code Playgroud)

只需执行以下操作:( cs"'读作:"将周围的双引号更改为单引号").

您也可以通过运行:( ds"删除周围的双引号)来删除引号.

有一个很好的介绍环绕插件这里.


And*_*art 8

我知道这个问题很旧但是这里有一个插件使用%来匹配相应的双引号:

https://github.com/airblade/vim-matchquote