2011-03-03 53 views
21

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

目前我发现我可以做一个搜索/s[a-z][A-Z]和录制宏添加下划线,并转换为小写,但我很好奇,如果我可以像做:

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

在此先感谢!

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

回答

18

这是有点长,但似乎做的工作:

:%s/\<\u\|\l\u/\=len(submatch(0)) == 1 ? tolower(submatch(0)) : submatch(0)[0].'_'.tolower(submatch(0)[1])/gc

+0

为了不匹配以大写字母开头的单词,我稍微修改了这个正则表达式:'%s/\(\)\ @<!\ <\ u \ | \ l \ u/\ = len(submatch(0 ))== 1? tolower(submatch(0)):submatch(0)[0] .'_'。tolower(submatch(0)[1])/ gc' – 2018-03-01 10:46:48

9

我想我应该继续尝试约5分钟以上。那么...如果有人很好奇:

%s/\(\l\)\(\u\)/\1\_\l\2/gc是否有窍门。

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

1

对于驼峰情况:

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

提示:正则表达式分隔符可以在我的例子来改变以使其(有点)更清晰易读。

36

你可能想尝试一下Abolish插件添教皇。它提供了几种从一种风格到另一种风格的快捷方式。例如,从:

MixedCase 

打字crc [助记:强制到驼峰]会给你:

mixedCase 

打字crs [助记:强制到Snake_case]会给你:

mixed_case 

和打字crm [助记符:CoeRce to MixedCase]将带你回到:

MixedCase 

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

+0

不知道废除。很酷。 – michaelmichael 2011-03-03 20:33:57

+0

我认为这是最好的答案。没有必要重新发明轮子。 – Kelvin 2012-05-17 16:57:13

0

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

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

可以使用以下方法:

  • 将光标放在符号你想要重命名
  • 类型:NameConvert +您希望的转换类型(此处为underscore)。注意:这个命令支持自动完成。
  • etvoilà!
4

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

要转换的情况下,在视觉模式选择文本块和输入以下内容(自我解释)中的一个:

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

要转换文档中的所有occerences然后运行一个

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

添加砰(例如:!CamelToHyphen)任何上述命令的旁路下列命令的每次转换前的提示。 虽然插件不知道文件中变量或其他文本之间的差异,但您可能不想这样做。

+0

简单而有效,谢谢你的努力! – Reorx 2017-11-28 12:26:20