32

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

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

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

提前致谢!

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

4

6 回答 6

58

你可能想试试 Tim Pope 的Abolish插件。它提供了一些从一种风格强制转换为另一种风格的捷径。例如,从以下开始:

MixedCase

输入crc[mnemonic: CoeRce to Camelcase] 会给你:

mixedCase

输入crs[mnemonic: CoeRce to Snake_case] 会给你:

mixed_case

键入crm[mnemonic: CoeRce to MixedCase] 将带您回到:

MixedCase

如果您还安装了 repeat.vim,那么您可以通过按点键重复强制命令。

于 2011-03-03T20:29:14.813 回答
32

这有点长,但似乎可以完成这项工作:

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

于 2011-03-03T19:57:40.747 回答
15

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

%s/\(\l\)\(\u\)/\1\_\l\2/gc成功了。

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

于 2011-03-03T19:08:48.497 回答
7

我掀起了一个插件来做到这一点。 https://github.com/chiedojohn/vim-case-convert

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

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

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

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

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

于 2015-03-30T15:41:19.743 回答
2

对于 CamelCase 案例:

%s#(\<\u\|\l)(\l+)(\u)#\l\1\2_\l\3#gc

提示:可以像我的示例中那样更改正则表达式分隔符,以使其(在某种程度上)更清晰。

于 2011-03-03T19:14:24.240 回答
0

我有一个用于各种面向开发的处理的 API。除此之外,它还提供了一些函数用于在(可配置的)约定(变量 <-> 属性 <-> getter <-> setter <-> 常量 <-> 参数 <-> ...)和样式(camelcase (低/高)<-> 下划线)。这些转换功能已被包装到一个插件中。

插件+API可以从这里获取:https ://github.com/LucHermitte/lh-dev ,对于这个名称转换任务,它需要lh-vim-lib

它可以通过以下方式使用:

  • 将光标放在要重命名的符号上
  • 类型:NameConvert+ 您希望的转换类型(此处为 : underscore)。注意:此命令支持自动完成。
  • 等等!
于 2011-03-04T11:01:37.237 回答