如何在Vim中的括号(或引号或......)之间进行选择?

时间:2009-06-30 05:54:32

标签: vim quotes brackets parentheses yank

我确定曾经有过这种插件的插件,但现在我需要它,我似乎无法找到它(自然而然),所以我只会问好看和简单。

在括号,引号或匹配字符列表之间选择最简单的方法是什么?

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

例如,我在此处选择(a)Computed solution coefficients:

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

9 个答案:

答案 0 :(得分:255)

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

我尝试使用双引号和单引号,它似乎也在那里工作。对于您的数据,我这样做:

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

将光标移至C,然后键入yi'。将光标移动到空白行,点击p,然后获取

Computed solution coefficients:

作为CMS noted,这也适用于视觉模式选择 - 只需使用vi)vi}vi'等。

答案 1 :(得分:238)

要在单引号之间进行选择,我通常会vi'(“选择内部单引号”)。

在括号内,我使用vib(“选择内部块”)

在花括号块中,您可以使用viB(“大写B”)

要选择“包含”(也请选择引号,括号或大括号),您可以使用a代替i

您可以详细了解手册中的Text object selections或vim中的:help text-objects

答案 2 :(得分:27)

这种选择方法是内置的,并且在Vim帮助中有很好的介绍。它涵盖了XML标签等。

请参阅:help text-objects

答案 3 :(得分:19)

要在单引号内选择,请使用vi'

要在括号内选择,请使用vi(

答案 4 :(得分:7)

使用箭头或hjkl转到其中一个包围表达式,然后v选择可视(即选择)模式,然后%跳转到另一个括号。

答案 5 :(得分:3)

使用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

答案 6 :(得分:2)

我会在最投票的答案中添加一个细节:

如果您正在使用gvim并希望复制到剪贴板,请使用

"+<command>

复制括号(或parens或花括号)之间的所有内容

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

答案 7 :(得分:1)

我制作了一个插件vim-textobj-quoteshttps://github.com/beloglazov/vim-textobj-quotes

它为最接近的任何类型的引号对提供文本对象。仅使用iqaq,它允许您操作当前围绕光标的单个(&#39;),双(&#34;)或后面(?)引号的内容,位于光标前面或后面(按优先顺序排列)。换句话说,当需要达到报价时,它会向前或向后跳跃。

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

  1. 之前:foo '1, |2, 3' bar;按diq后:foo '|' bar
  2. 之前:foo| '1, 2, 3' bar;按diq后:foo '|' bar
  3. 之前:foo '1, 2, 3' |bar;按diq后:foo '|' bar
  4. 之前:foo '1, |2, 3' bar;按daq后:foo | bar
  5. 之前:foo| '1, 2, 3' bar;按daq后:foo | bar
  6. 之前:foo '1, 2, 3' |bar;按daq后:foo | bar
  7. 上面的例子是针对单引号给出的,插件的工作方式与double(&#34;)和back(`)引用完全相同。

    您还可以使用任何其他运算符:ciqdiqyiqviq等。

    请查看上面链接的github页面了解更多详情。

答案 8 :(得分:-6)

vim中的简单键映射可以解决此问题。     map viq F“lvf”hh 上面的命令将viq映射到用于在引号之间搜索的键。将“替换为任何字符并创建您的键盘映射。 在启动期间将其粘贴在vimrc中,您应该每次都能使用它。