如果出于某种原因,我想有选择地将camelCase命名的东西转换为在vim中以下划线分隔,我该怎么做呢?目前,我发现我可以搜索/s[a-z][A-Z]并记录一个宏来添加下划线并转换为小写,但我很好奇我是否可以这样做:%s/([a-z])([A-Z])/\1\u\2/gc先谢谢你了!
/s[a-z][A-Z]
%s/([a-z])([A-Z])/\1\u\2/gc
**编辑:**我想出了camelCase的答案(这是我真正需要的),但其他人能回答如何将CamelCase更改为camel_case吗?
u4dcyp6a1#
你可能想试试Tim Pope的Abolish插件。它提供了一些快捷方式来从一种风格转换到另一种风格。例如,以以下内容开始:
MixedCase
键入crc [助记符:CoeRce to Camelcase]将为您提供:
crc
mixedCase
键入crs [助记符:CoeRce to Snake_case]将为您提供:
crs
mixed_case
然后输入crm [助记符:CoeRce to MixedCase]将带您回到:
crm
如果您还安装了repeat.vim,则可以通过按点键重复强制命令。
jucafojl2#
这是一个有点长,但似乎做的工作::%s/\<\u\|\l\u/\= join(split(tolower(submatch(0)), '\zs'), '_')/gc
:%s/\<\u\|\l\u/\= join(split(tolower(submatch(0)), '\zs'), '_')/gc
k3fezbri3#
我想我应该再多试5分钟。如果有人好奇:%s/\(\l\)\(\u\)/\1\_\l\2/gc就可以了。实际上,我意识到这对CamelCase有效,但对CamelCase不有效,后者对某人也可能有用。
%s/\(\l\)\(\u\)/\1\_\l\2/gc
qvtsj1bj4#
我做了一个插件来做这件事。https://github.com/chiedojohn/vim-case-convert要转换大小写,请在可视模式下选择一个文本块,然后输入以下内容之一(自解释)::CamelToHyphen :CamelToSnake :HyphenToCamel :HyphenToSnake :SnakeToCamel :SnakeToHyphen要转换文档中的所有事件,请运行以下命令之一::CamelToHyphenAll :CamelToSnakeAll :HyphenToCamelAll :HyphenToSnakeAll :SnakeToCamelAll :SnakeToHyphen添加一个bang(例如:CamelToHyphen!)到上述任何一个命令,以在每次转换之前绕过提示。你可能不想这样做,因为插件不知道变量或文件中其他文本之间的区别。
:CamelToHyphen :CamelToSnake :HyphenToCamel :HyphenToSnake :SnakeToCamel :SnakeToHyphen
:CamelToHyphenAll :CamelToSnakeAll :HyphenToCamelAll :HyphenToSnakeAll :SnakeToCamelAll :SnakeToHyphen
vjrehmav5#
对于CamelCase案例:
%s#(\<\u\|\l)(\l+)(\u)#\l\1\2_\l\3#gc
提示:正则表达式的分隔符可以像我的例子中那样修改,使其(在某种程度上)更清晰。
pnwntuvh6#
我有一个API用于各种面向开发的处理。除此之外,它还提供了一些函数,用于在(可配置)约定(变量属性、getter、setter<-><-><->、<->常量<->参数<->...)和样式(驼峰(低/高)<->下划线)之间转换名称。这些转换函数已经被封装到一个插件中。plugin + API可以从这里获取:https://github.com/LucHermitte/lh-dev,对于此名称转换任务,它需要lh-vim-lib它可以通过以下方式使用:
:NameConvert
underscore
idv4meu87#
对于camelCase:
camelCase
%s/\v<([a-z_]+)([A-Z][a-zA-Z]+)>/\1_\l\2/gc
您可能需要多次运行此命令。
7条答案
按热度按时间u4dcyp6a1#
你可能想试试Tim Pope的Abolish插件。它提供了一些快捷方式来从一种风格转换到另一种风格。例如,以以下内容开始:
键入
crc
[助记符:CoeRce to Camelcase]将为您提供:键入
crs
[助记符:CoeRce to Snake_case]将为您提供:然后输入
crm
[助记符:CoeRce to MixedCase]将带您回到:如果您还安装了repeat.vim,则可以通过按点键重复强制命令。
jucafojl2#
这是一个有点长,但似乎做的工作:
:%s/\<\u\|\l\u/\= join(split(tolower(submatch(0)), '\zs'), '_')/gc
k3fezbri3#
我想我应该再多试5分钟。如果有人好奇:
%s/\(\l\)\(\u\)/\1\_\l\2/gc
就可以了。实际上,我意识到这对CamelCase有效,但对CamelCase不有效,后者对某人也可能有用。
qvtsj1bj4#
我做了一个插件来做这件事。https://github.com/chiedojohn/vim-case-convert
要转换大小写,请在可视模式下选择一个文本块,然后输入以下内容之一(自解释):
:CamelToHyphen :CamelToSnake :HyphenToCamel :HyphenToSnake :SnakeToCamel :SnakeToHyphen
要转换文档中的所有事件,请运行以下命令之一:
:CamelToHyphenAll :CamelToSnakeAll :HyphenToCamelAll :HyphenToSnakeAll :SnakeToCamelAll :SnakeToHyphen
添加一个bang(例如:CamelToHyphen!)到上述任何一个命令,以在每次转换之前绕过提示。你可能不想这样做,因为插件不知道变量或文件中其他文本之间的区别。
vjrehmav5#
对于CamelCase案例:
提示:正则表达式的分隔符可以像我的例子中那样修改,使其(在某种程度上)更清晰。
pnwntuvh6#
我有一个API用于各种面向开发的处理。除此之外,它还提供了一些函数,用于在(可配置)约定(变量属性、getter、setter<-><-><->、<->常量<->参数<->...)和样式(驼峰(低/高)<->下划线)之间转换名称。这些转换函数已经被封装到一个插件中。
plugin + API可以从这里获取:https://github.com/LucHermitte/lh-dev,对于此名称转换任务,它需要lh-vim-lib
它可以通过以下方式使用:
:NameConvert
+您希望的转换类型(此处:underscore
)。注意:此命令支持自动完成。idv4meu87#
对于
camelCase
:您可能需要多次运行此命令。