在vim中更改CamelCase单词的部分内容

Ned*_*der 15 vim camelcasing

使用vim,我觉得cw改变整个单词非常方便.Vim将动作命令和动作动词分开,实现了非常强大的组合.我现在不得不DefaultHandler改为ContentHandler.我自然认为它是"改为下一个大写字母",但我找不到从一个大写字母移动到下一个字母的动作命令.

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

sta*_*tox 5

Vim 默认不提供 CamelCase word 文本对象,所以我们必须自己创建它。好消息是我们不需要重新发明轮子,因为插件已经存在,我们可以将其用作基础:camelCaseMotion

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

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

vmap ,i <Esc>l,bv,e
omap ,i :normal v,i<CR>
Run Code Online (Sandbox Code Playgroud)

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

第一个定义允许,i在我们处于可视模式时输入,它将选择当前的“内部驼峰式单词”。(该l动作是一种始终获取光标所在单词的解决方法。否则,当光标位于单词的第一个字母上时,我们将获得前一个单词)

第二个定义使用第一个定义让运算符喜欢dc使用,i

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

DefaultHandlerWord
Run Code Online (Sandbox Code Playgroud)

如果我的光标在我可以使用的字母nHandler

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