vim 如何选择一个单词

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vim 如何选择一个单词相关的知识,希望对你有一定的参考价值。

如果你在单词的开始,用 ve 就可以选择这个单词,v 是进入可视模式,e 是跳到单词结尾。
如果你在单词的中间,想选中当前单词,用 vaw。v 是进入可视模式,aw 是“一个词(a word)”。这是利用 vim 文本对象的概念。
参考技术A vim
英 [vɪm] 美 [vɪm]
n. <旧,非正>精力,活力,力量
参考技术B cried she. "Thou wast my pastor, and hadst charge of my

Vim - 选择当前单词的多个实例并同时更改 - 对所有搜索结果执行操作而不使用替换?

【中文标题】Vim - 选择当前单词的多个实例并同时更改 - 对所有搜索结果执行操作而不使用替换?【英文标题】:Vim - Select multiple instances of current word and change simultaneously - execute action on all search results without using substitution? 【发布时间】:2018-07-27 09:22:36 【问题描述】:

我已阅读问题:What's the vim way to select multiple instances of current word and change them?

我不确定我是否做错了什么,但想知道如何同时更改多次出现的单词(或搜索结果)。

给定块:

EXAMPLE_VAR = foo
bar = EXAMPLE_VAR
baz = EXAMPLE_VAR + 1000

如果我想将所有出现的EXAMPLE_VAR 更改为小写example_var,根据我的阅读,我会:

    将光标移动到第一个EXAMPLE_VAR * 选择单词 N 向上移动 gn 在可视模式下选择单词 u 转换为小写 n. 转到下一个并根据需要重复

有没有办法让所有搜索结果自动重复该操作? (我知道我可以使用替换或搜索和替换在全局范围内执行此操作,但这需要输入所有变量名称等) - 这只是我发现从 Sublime 开始减慢我速度的几件事之一,我只想:

    Cmd+D选择单词,重复几次选择出现 Cmd+KL同时改变所有

【问题讨论】:

使用替换时无需输入名称,默认为最新搜索。您可以使用* 进行设置。您还可以使用&amp; 在替换部分中获取匹配的字符串,并使用\L 将每个字符小写(在\L 之后)。总而言之,您可以:将光标移到单词上,使用*,然后使用s//\L&amp;/g。虽然显然这对你的例子来说是相当具体的:)。 github.com/terryma/vim-multiple-cursors:Vim 的 True Sublime Text 样式多选。 【参考方案1】:
guip

使用提供的示例完全符合您的要求。

如果你真的想念 Sublime 的多光标功能,你可以四处寻找插件。

【讨论】:

gguG 也是如此,但我认为他在寻找什么很清楚。这个答案假设段落中没有其他大写字母,这肯定不能保证。这也不是标题中问题的答案。既然我习惯了你的好回答,我想问一下,你在这里尝试做什么?我错过了什么吗? 哇,我以前从未遇到过这种情况,而且做得很好。你能详细解释一下vim是如何解释的吗?编辑:哦,我现在明白了,它说“使 motion 文本小写”,其中 motion 是“段落中” @StunBrick 见 :h gu:h ip @DoktorOSwaldo,我的观点是,在 Vim 中,一切都取决于上下文,在这里您可以获得足够丰富的工具集,让您可以针对特定问题构建临时解决方案。是的,递归宏记录可以做到这一点,但如果一个人绝对想将每个问题简化为简化模型,那么替换或第三方多光标插件也可以。当你有一把锤子时,一切看起来都像钉子。 明确地说,我不是宏解决方案的粉丝 ;-) 它只是为了完整性。您的陈述是正确的,如果我们查看上下文,很多时候会有更简单的解决方案。但就 SO 作为一个站点而言,我们只能解决我们得到的问题。所以我仍然认为这个答案没有任何帮助。但这没关系,这与我无关,我无权评判任何人(并且对此没有兴趣)。所以我衷心感谢您的解释,希望答案能帮助很多人!【参考方案2】:

要按所述回答您的问题,请使用递归宏:

一旦你搜索了EXAMPLE_VAR,它会是这样的:

qaqqanguw@a

但这不是最好的解决方案。 CTRL-R CTRL-W 可以帮助你,它将光标下的单词复制到命令行。所以/&lt;CTRL-R&gt;&lt;CTRL-W&gt;* 是一样的。

那么就很容易使用全局命令了:

:g/<CTRL-R><CTRL-W>/norm /<CTRL-R><CTRL-W>guw

或者一个替代品(感谢 Marth):

:%s/<CTRL-R><CTRL-W>/\L&/g

正如 Marth 已经指出的,如果您已经搜索过这个词,您可以将示例中的 /&lt;CTRL-R&gt;&lt;CTRL-W&gt;/ 替换为仅使用最后一次搜索的 //(在全局命令的第二部分中,您将使用 @ 987654330@ 不是 //)。

【讨论】:

以上是关于vim 如何选择一个单词的主要内容,如果未能解决你的问题,请参考以下文章

软件测试如何让Vim成为我们的神器

如何在单词选择游戏中绘制橡皮筋或套索进行选择

如何在 IntelliJ IDEA 中选择骆驼化单词的单个单词

如何在 IntelliJ IDEA 中选择骆驼化单词的单个单词

如何在 Vim 中进行文本选择操作和使用标志

如何使用“Twit”库从列表中选择一个随机单词