【问题标题】:Vim - Select text in between parentheses, multilineVim - 选择括号之间的文本,多行
【发布时间】:2013-03-28 16:25:40
【问题描述】:
value(val_1)
value(val_100)
value(val_10)

我想选择括号之间的文本并为多行执行此操作,对于一行我可以使用 f(va ( 但我不知道如何选择剩下的 2 行。

编辑(解决方案)

我想要的是用每行唯一的文本更改括号内的文本,首先,我想选择文本,删除它然后手动更改文本,@rosipov 告诉有一个插件来做选择部分和这很棒,但@romainl 给了我另一个方向也行之有效。

f(ci(foo<Esc>jci(bar<Esc>jci(baz<Esc>

【问题讨论】:

  • 使用% 动作而不是f( 可以缩短第一步。

标签: vim selection


【解决方案1】:

你要选择这个吗:

value([val_1])
value([val_100])
value([val_10])

或者选择那个:

value([val_1)]
[value(val_100)]
[value(val_10])

不幸的是,第一个是不可行的。但根据您想要对所选文本执行的操作,例如更改它,一个合理的近似值将是:

f(l<C-v>jj$cnew value)<Esc>

但是我相信很多 Vimmer 可能会通过替换来解决这个问题:

:,+2s/(.*/(new value)

第二个是简单的:

f(lv3/)h

或

f(ljjt)

【讨论】:

  • 不幸的是我想要第一个,我只是想选择它,而不是搜索和替换,但感谢您的回答。
  • @Adam,不像在其他编辑器中它是处理某些文本的唯一方法,选择某些东西通常是 Vim 中效率最低的方法。选择某些文本本质上是无用的:您总是想对选择的内容进行操作。那是重要的部分。 select + movement + action 通常可以缩写为 action + movement。您执行的操作取决于您想要做什么,并且根据情况,可能是“很多”或“一些”。系统地使用视觉选择过于笼统,而且通常会浪费按键。
  • 你说得对,我需要用每行唯一的文本更改括号内的文本,也许我可以使用正则表达式,但我没有技能,这就是我要求选择的原因,手动删改,我知道效率低下。
  • @Adam,接受的答案也没有给你想要的。
  • 是的,但是@rosipov 给了我关于easymotion 插件的指导,我现在正在使用它,所以它间接回答了我的问题。
【解决方案2】:

在这种情况下,您可能会对 EasyMotion 插件感兴趣:https://github.com/Lokaltog/vim-easymotion

使用插件它将是:f(vLeaderLeaderf)c

或者:领导领导f(av领导者领导者f)c

其中 c 是代表第三个右括号的字母,a 代表第一个左括号 p。

编辑:没有插件可以通过行号来完成。

假设您使用第 1-3 行:f(v3Gf)

其中 3G 代表“转到第 3 行”,在可视模式和正常模式下均有效。

【讨论】:

  • 谢谢,不知道有没有这样的插件。只是为了好奇,有没有不使用任何插件的方法?有时我只能使用香草 vim 访问。
  • @Adam 请查看编辑。在选择第一个字符后,您还可以执行 2 j 之类的操作以转到右行。所有常规移动命令都适用。
  • 嗯,但是用 3G 选择所有剩余的行,当我只想选择括号中的文本时,在这种情况下是单词 'value ' 不应选择。
  • @Adam 哦,你的意思是同时选择所有行的括号中的文本?在 vanila vim 中这是不可能的,请参阅stackoverflow.com/questions/1608204/multiple-selections-in-vim
猜你喜欢
  • 2020-01-30
  • 2010-11-06
  • 2015-02-26
  • 2011-12-09
  • 2015-10-10
  • 2016-04-09
  • 2023-03-25
  • 2017-07-05
  • 2020-01-15
相关资源
最近更新 更多