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

时间:2010-12-28 13:22:47

标签: vim camelcasing

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

当我们处于可视模式时,第一个定义允许输入,i 选择当前&#34;内部camelCase单词&#34;。 l动作是一种解决方法,可以始终获取光标所在的单词。否则,当光标位于单词的第一个字母时,我们会得到前一个单词)

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

合作

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

DefaultHandlerWord

如果我的光标在n的{​​{1}}字母上,我可以使用:

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

答案 1 :(得分:1)

我只是遇到了同样的问题,并使用以下.vimrc映射解决了该问题:

nmap W /[A-Z]<CR>

当然,如果需要,您可以在范围内包括数字,而不是通过w来代替常规单词,现在可以用W“向前搜索下一个大写字母”。但是,在这种情况下,许多人都希望关闭突出显示搜索。