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


219

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

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

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

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

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

Answers:


276

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

我尝试使用双引号和单引号,并且它似乎也可以正常工作。为了您的数据,我这样做:

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

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

Computed solution coefficients:

作为CMS指出,该作品的视觉模式选择,以及-只是用vi)vi}vi'等。


1
我通常在寻找一种在预定义的匹配字符(通常只有单引号和双引号以及各种方括号)之间选择所有内容的方法。
Rook

2
分开的话是什么意思?我在“ [x,y,z]”上尝试过,结果选择了“ x,y,z”
Tim Whitcomb,2009年

4
忽略最后的评论-发现问题所在。像魅力一样运作:-)
Rook

它似乎也可以使用引号,也可以yi"选择所有带引号的内容
stefanB 2012年

ci(还是ci)为我想要的做。谢谢。i在那种情况下,我仍然不完全了解,但是只要它有效,谁会在乎呢?:)
justnorris

279

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

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

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

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

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


感谢您的提示,我一直在寻找类似的东西,但对结果不满意。太棒了
alfredodeza

这个技巧非常简单,易于在我的大脑和肌肉记忆中进行。谢谢。
Ghazaly

这是一个非常有用的技巧。不再需要额外的按键操作。谢谢你的链接。
2015年

27

这种选择方法是内置的,在Vim帮助中也有介绍。它涵盖了XML标签和更多内容。

请参阅:help text-objects


1
:帮助文本的对象越接近有用的东西......你至少可以提一些常见的,就像一个”和(视觉模式时。
Stobor

2
(此外,+ 1是因为尽管它是vim的长期用户,但我对此一无所知!)
Stobor,2009年

@Stobor。欢呼声确定了该引用
迈克尔于2009年

21

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

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


3
注意:ci'ci(用于更改而不是视觉选择。但这正是我想要的。谢谢:)
justnorris

第二个仅在那个()块内有效,所以我通常%vi(还是这样做%vib
816-8055 '16

7

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


5
(不过,不幸的是,没有报价)
Stobor


2

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

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

"+<command>

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

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


2
这与问题完全正交,不应作为答案。您可以在询问每个问题的地方写上y
管道

这是答案的补充,而不是答案本身。
yuriploc '18 -10-13

然后应该对该答案进行编辑,该帖子原样不回答该问题。
管道

这是不使用gvim的广告:)谁在生活中需要额外的两次shift +按键?
Paul Parker

1

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

它为任何类型的最接近的引号对提供文本对象。仅使用iq或使用aq它,您可以对当前围绕光标,在光标之前或之后(按优先顺序排列)的单引号('),双引号(“)或反引号(`)的内容进行操作。换句话说,当需要到达引号时,它会向前或向后跳转。

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

  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页面以获取更多详细信息。


-6

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.