vim中CamelCase单词的更改部分

问题描述 投票:15回答:2

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

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

vim camelcasing
2个回答
4
投票

Vim默认情况下不提供CamelCase单词文本对象,因此我们必须自己创造。好消息是我们不需要重新发明轮子由于插件已经存在,我们可以将其用作基础:camelCaseMotion

此脚本定义了,w,b,e动作(类似于wbe),这些动作不是逐字移动(向前/向后),而是沿骆驼移动;即单词边界和大写字母。问题是它没有定义类似于iw的文本对象以选择整个单词。所以我们来创建它:

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

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

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

第一个定义允许我们在视觉模式下输入,i,它将选择当前的“内部驼峰词”。 ([l运动是始终获取光标所在的单词的替代方法。否则,当光标位于单词的第一个字母上时,我们将获取前一个单词)

第二个定义使用第一个一种使dc之类的运算符与,i一起使用的功能>

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

DefaultHandlerWord

如果光标位于n的字母Handler上,则可以使用:

  • [,e转到Handler的最后一个字母
  • [,b转到Handler的首字母
  • [,w转到Word的首字母
  • [d,i删除Handler并仅获取DefaultWord
  • [c,i删除Hanlder并有机会用另一个词替换它]

0
投票

我只是有相同的问题,并使用此.vimrc映射解决了它:

© www.soinside.com 2019 - 2024. All rights reserved.