如何在Vim中的括号(或引号或…)之间进行select?

我确定曾经有过这样一个插件,但现在我需要它,我似乎无法find它(自然),所以我只会问好和简单。

什么是最简单的方法来select括号内,或报价,或一般的匹配字符列表?

write ( *, '(a)' ) 'Computed solution coefficients:' 

例如,在这里,我想select(a)Computed solution coefficients:

我对多行不感兴趣,只是发生在一行上的情况。

使用任何你想要在括号内的导航键,然后你可以使用yi(yi)来复制匹配的parens中的所有内容。 这也适用于方括号(如yi] )和花括号。 除y ,还可以删除或更改文本(例如ci)di] )。

我用双引号和单引号试了这个,看起来也在那里工作。 对于您的数据,我这样做:

 write (*, '(a)') 'Computed solution coefficients:' 

将光标移到C ,然后键入yi' 。 将光标移动到一个空白行,按p ,然后获取

 Computed solution coefficients: 

正如CMS指出的 ,这也适用于视觉模式select – 只要使用vi)vi}vi'

要select单引号之间我通常做一个vi' (“select内部的单引号”)。

在括号内,我使用了vib (“select inner block”)

在大括号内,你可以使用viB (“大写B”)

为了使select“包容”(也可以select引号,括号或大括号),你可以使用a而不是i

您可以阅读手册上关于文本对象select的更多信息。

这个select的方法是内置的,在Vim的帮助下很好的覆盖了。 它涵盖了XML标签等等。

请参阅:help text-objects

在单引号内select使用vi'

为了在括号内select使用vi(

使用箭头或hjkl来到一个括号expression式,然后vselect视觉(即select)模式,然后%跳转到另一个括号。

使用searchpair内置函数在.vimrc中编写一个Vim函数:

 searchpair({start}, {middle}, {end} [, {flags} [, {skip} [, {stopline} [, {timeout}]]]]) Search for the match of a nested start-end pair. This can be used to find the "endif" that matches an "if", while other if/endif pairs in between are ignored. [...] 

http://vimdoc.sourceforge.net/htmldoc/eval.html

我做了一个插件vim-textobj-quotes : https : //github.com/beloglazov/vim-textobj-quotes

它为任何types的最接近的引号提供文本对象。 只使用iqaq它允许你操作当前围绕游标的单引号('),双引号(“)或后退引号(')的内容,位于游标前面或后面(按照偏好),换句话说,当需要达到报价时,它向前或向后跳转。

通过查看示例更容易理解(光标显示为| ):

  1. 之前: foo '1, |2, 3' bar ; 按下diqfoo '|' bar foo '|' bar
  2. 之前: foo| '1, 2, 3' bar foo| '1, 2, 3' bar ; 按下diqfoo '|' bar foo '|' bar
  3. 之前: foo '1, 2, 3' |bar ; 按下diqfoo '|' bar foo '|' bar
  4. 之前: foo '1, |2, 3' bar ; 在按下daqfoo | bar foo | bar
  5. 之前: foo| '1, 2, 3' bar foo| '1, 2, 3' bar ; 在按下daqfoo | bar foo | bar
  6. 之前: foo '1, 2, 3' |bar ; 在按下daqfoo | bar foo | bar

上面的例子是针对单引号给出的,这个插件对于double(“)和back(”)引用的工作方式完全一样。

您也可以使用其他任何操作符: ciqdiqyiqviq

请看上面链接的github页面以获取更多细节。

我会添加一个细节,以最多的投票答案:

如果您使用的是gvim并想要复制到剪贴板,请使用

"+<command>

要复制括号(或parens或大括号)之间的所有内容,

例如: "+yi}将复制到剪贴板中您的光标所在花括号之间的所有内容。

vim中的一个简单的键盘映射将解决这个问题。 map viq F“lvf”hh上面这个命令将viq映射到两个键之间,用来在引号之间进行search。 replace“任何字符,并创build您的键盘映射。在启动期间粘贴在vimrc中,你应该能够每次使用它。