camelCase以vi(m)为下划线

Jef*_*eff 27 regex vim replace case-conversion

如果由于某种原因我想有选择地将camelCase命名的东西转换成vim中的下划线,我怎么能这样做呢?

目前我发现我可以进行搜索/s[a-z][A-Z]并记录一个宏来添加一个下划线并转换为小写,但我很好奇我是否可以使用以下内容:

%s/([a-z])([A-Z])/\1\u\2/gc

提前致谢!

编辑:我找到了camelCase的答案(这是我真正需要的),但其他人可以回答如何将CamelCase更改为camel_case吗?

nel*_*rom 44

你可能想试试Tim Pope 的Abolish插件.它提供了一些快捷方式,以强制从一个风格到另一个.例如,从以下开始:

MixedCase
Run Code Online (Sandbox Code Playgroud)

键入crc[助记符:CoeRce到Camelcase]会给你:

mixedCase
Run Code Online (Sandbox Code Playgroud)

键入crs[助记符:CoeRce到Snake_case]会给你:

mixed_case
Run Code Online (Sandbox Code Playgroud)

输入crm[助记符:CoeRce到MixedCase]会带你回到:

MixedCase
Run Code Online (Sandbox Code Playgroud)

如果还安装了repeat.vim,则可以通过按下点键重复强制命令.

  • 我认为这是最好的答案。无需重新发明轮子。 (3认同)

Rai*_*ndi 22

这有点长,但似乎做了这个工作:

:%s/\<\u\|\l\u/\= join(split(tolower(submatch(0)), '\zs'), '_')/gc

  • 为了不匹配以大写开头的单词,我稍微修改了这个正则表达式:`%s/\( \)\@&lt;!\&lt;\u\|\l\u/\=len(submatch(0)) = = 1 ? tolower(submatch(0)) : submatch(0)[0].'_'.tolower(submatch(0)[1])/gc` (2认同)

Jef*_*eff 10

我想我应该继续尝试大约5分钟.好吧......如果有人好奇的话:

%s/\(\l\)\(\u\)/\1\_\l\2/gc 诀窍.

实际上,我意识到这适用于camelCase,而不是CamelCase,它也可能对某人有用.


Chi*_*edo 5

我整理了一个可以做到这一点的插件。 https://github.com/chiedojohn/vim-case-convert

要转换大小写,请在可视模式下选择一个文本块,然后输入以下内容之一(自我解释):

:CamelToHyphen :CamelToSnake :HyphenToCamel :HyphenToSnake :SnakeToCamel :SnakeToHyphen

要转换文档中的所有事件,请运行以下命令之一:

:CamelToHyphenAll :CamelToSnakeAll :HyphenToCamelAll :HyphenToSnakeAll :SnakeToCamelAll :SnakeToHyphen

在上面的任何命令中添加一个爆炸声(例如:CamelToHyphen!),以在每次转换之前绕过提示。您可能不想这样做,因为插件不知道文件中变量或其他文本之间的区别。