在 vim 中更改部分 CamelCase 单词

Posted

技术标签:

【中文标题】在 vim 中更改部分 CamelCase 单词【英文标题】:Changing parts of CamelCase words in vim 【发布时间】:2011-05-31 14:08:20 【问题描述】:

使用 vim,我发现 cw 非常方便更改整个单词。 Vim 对动作命令和动作动词的分离使得组合非常强大。我刚才不得不将DefaultHandler 更改为ContentHandler。我自然认为它是“更改为下一个大写字母”,但我找不到从一个大写字母移动到下一个大写字母的运动命令。

在这种情况下,我本可以使用ctH,但有没有办法更改(或删除等)驼峰式单词的第一部分,而不管接下来是哪个大写字母?

【问题讨论】:

How can I configure vim so that movement commands will include underscores and CamelCase, but completion will ignore them? 的可能重复项(如 Luc 的回答中所述,我认为应该是评论) 【参考方案1】:

Vim 默认不提供 CamelCase 单词文本对象,所以我们必须 由我们自己创造。好消息是我们不需要重新发明*** 因为一个插件已经存在,我们可以使用它作为基础:camelCaseMotion

这个脚本定义了动作,w,b,e(类似于wbe),它们不会逐字移动(向前/向后),但是 Camel-明智的;即单词边界和大写字母。问题是它不 定义一个类似于iw 的文本对象来选择整个单词。所以让我们创建 它:

为了完整起见,一个文本对象需要两个定义:一个用于可视模式,另一个用于 另一个用于操作员挂起模式。这是我们的定义(添加到 .vimrc):

vmap ,i <Esc>l,bv,e
omap ,i :normal v,i<CR>

如您所见,我们使用了插件定义的,b,e 动作。

第一个定义允许我们在可视模式下输入,i,它会 选择当前的“inner camelCase word”。 l 运动是一种始终获取光标所在单词的解决方法。否则,当光标位于单词的第一个字母时,我们会得到前一个)

第二个定义使用第一个 一种让dc 等运营商与,i 一起工作

在我们安装插件并将定义添加到我们的.vimrc 之后 我们可以做你想做的。例如,如果我举这个例子:

DefaultHandlerWord

如果我的光标在Handler 的字母n 上,我可以使用:

,e 转至Handler 的最后一个字母 ,bHandler的第一个字母 ,wWord的第一个字母 d,i 删除 Handler 并仅获取 DefaultWord c,i 删除 Hanlder 并有机会用另一个词替换它

【讨论】:

还有关于 Vim 的问题,dedicated stack exchange site 可能会感兴趣。【参考方案2】:

我刚刚有同样的问题,并用这个 .vimrc 映射解决了它:

nmap W /[A-Z]<CR>

当然,如果您愿意,您可以在范围内包含数字,但您现在可以使用 W 来“向前搜索下一个大写字母”,而不是通过 w 来包含常规单词。不过,在这种情况下,您可能希望关闭突出显示搜索。

【讨论】:

以上是关于在 vim 中更改部分 CamelCase 单词的主要内容,如果未能解决你的问题,请参考以下文章

Codewars Solution:Break camelCase

如何拆分camelCase字符串并检查每个拆分词是不是是数组的一部分?

“骆驼拼写法”(CamelCase)

使用php preg_match(正则表达式)将camelCase单词拆分为单词

将 Java 字符串从全部大写(由下划线分隔的单词)转换为 CamelCase(无单词分隔符)的最简单方法是啥?

linux基础学习