243

我敢肯定曾经有一个用于这种东西的插件,但现在我需要它,我似乎(自然)找不到它,所以我只想问得好简单。

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

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

例如,在这里我想选择(a), 或Computed solution coefficients:.

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

4

10 回答 10

326

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

在括号块内,我使用vib ("select inner block")

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

要使选择“包含”(还选择引号、括号或大括号),您可以使用a而不是i.

您可以在手册中或在 vim中阅读有关Text 对象选择的更多信息。:help text-objects

于 2009-06-30T06:17:03.503 回答
299

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

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

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

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

Computed solution coefficients:

正如CMS 所指出的,这也适用于可视模式选择 - 只需使用vi), vi},vi'等。

于 2009-06-30T05:59:31.410 回答
30

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

:help text-objects

于 2009-06-30T06:04:00.667 回答
25

对于在单引号内选择,请使用vi'.

对于括号内的选择,请使用vi(.

于 2009-06-30T06:24:52.880 回答
9

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

于 2009-06-30T06:04:36.283 回答
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 )

于 2009-06-30T06:15:00.183 回答
2

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

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

"+<command>

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

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

于 2017-02-09T19:48:35.260 回答
1

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

它为任何类型的最接近的引号对提供文本对象。使用 onlyiqaq它允许您对当前围绕光标、位于光标前面或后面(按优先顺序)的单引号 (')、双引号 (") 或反引号 (`) 的内容进行操作. 换句话说,它在需要到达引号时向前或向后跳跃。

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

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

上面的示例是针对单引号给出的,该插件对双引号 (") 和反引号 (`) 的工作方式完全相同。

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

请查看上面链接的 github 页面以获取更多详细信息。

于 2014-04-09T09:55:48.020 回答
0

我想补充已经很好的答案。我来这里是为了寻找一种方法来更改 html 括号内的文本,所以我想为其他也在寻找它的人提供一个答案。

您可能认为ci<会起作用,但实际上只有当您位于其中一个标签内时才会起作用:

<would work inside here> But not here </would work inside here>

我想要的是更改 html 标签本身之间的文本:

<div>change me</div>

我想要的是“更改内部标签”:cit

感谢另一个提到文档(:help text-objects)的答案,这就是我找到所需内容的方式。

于 2021-12-23T00:19:59.343 回答
-8

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

于 2009-07-30T12:53:33.020 回答