使用 vim,我发现cw
更改整个单词非常方便。Vim 对动作命令和动作动词的分离使得组合非常强大。我刚才不得不更改DefaultHandler
为ContentHandler
. 我很自然地认为它是“更改为下一个大写字母”,但我找不到从一个大写字母移动到下一个大写字母的运动命令。
在这种情况下,我可以使用ctH
,但是有没有办法更改(或删除等)CamelCase 单词的第一部分,而不管接下来是哪个大写字母?
使用 vim,我发现cw
更改整个单词非常方便。Vim 对动作命令和动作动词的分离使得组合非常强大。我刚才不得不更改DefaultHandler
为ContentHandler
. 我很自然地认为它是“更改为下一个大写字母”,但我找不到从一个大写字母移动到下一个大写字母的运动命令。
在这种情况下,我可以使用ctH
,但是有没有办法更改(或删除等)CamelCase 单词的第一部分,而不管接下来是哪个大写字母?
Vim 默认不提供 CamelCase 单词文本对象,所以我们必须自己创建它。好消息是我们不需要重新发明轮子,因为插件已经存在,我们可以使用它作为基础:camelCaseMotion
该脚本定义了动作,w
,,b
和,e
(类似于w
, b
, e
),它们不会按字(向前/向后)移动,而是按骆驼移动;即到单词边界和大写字母。问题在于它没有定义类似于iw
选择整个单词的文本对象。所以让我们创建它:
为了完整起见,一个文本对象需要两个定义:一个用于可视模式,另一个用于操作员挂起模式。这是我们的定义(添加到.vimrc
):
vmap ,i <Esc>l,bv,e
omap ,i :normal v,i<CR>
如您所见,我们使用了插件定义的,b
和动作。,e
第一个定义允许,i
我们在可视模式下输入,它将选择当前的“inner camelCase word”。(该l
动作是一种始终获取光标所在单词的解决方法。否则,当光标位于单词的第一个字母时,我们会得到前一个)
第二个定义使用第一个让运营商喜欢d
或c
与之合作,i
在我们安装插件并将定义添加到我们的之后,.vimrc
我们可以做你想做的事。例如,如果我举这个例子:
DefaultHandlerWord
如果我的光标在我可以使用的字母n
上:Handler
,e
到最后一个字母Handler
,b
去第一个字母Handler
,w
去第一个字母Word
d,i
只删除Handler
和获取DefaultWord
c,i
删除Hanlder
并有机会用另一个词替换它我刚刚有同样的问题,并用这个 .vimrc 映射解决了它:
nmap W /[A-Z]<CR>
当然,如果需要,您可以在范围内包含数字,但现在可以使用 W 来“向前搜索下一个大写字母”,而不是通过 w 来代替常规单词。不过,在这种情况下,您可能希望关闭突出显示搜索。