我有这样一行代码:
variableInCamelCase <- map["variableInCamelCase"]
我需要这样做:
variable_In_Camel_Case <- map["variableInCameCase"]
只有第一个单词必须转换,我试图找到一个正则表达式,我需要在Vim中进行,但我不能。 像这样的正则表达式:
var rex = /([A-Z])([A-Z])([a-z])|([a-z])([A-Z])/g;
"CSVFilesAreCoolButTXT".replace( rex, '$1$4_$2$3$5' );
不好,因为我只需要在第一个单词上做。另外,我需要它用于VIM,它使用特殊语法来捕获一个组。
我尝试了类似这样的事情:s/\(\l\)\(\u\)/\1_\2/g
,相当于([a-z])([A-Z])
,但我无法将其与([A-Z])([A-Z])([a-z])
对于我的问题,有人有一个很好的vim准备正则表达式?也欢迎解释。
答案 0 :(得分:1)
我有两个命令要从snake_case
或UpperCamelCase
转换为lowerCamelCase
,反之亦然,转换为lh-dev。一个适用于当前单词,另一个适用于substitute
。实际上,如果为当前项目配置库( - &gt;变量,属性,常量,getter,类型等),可以使用更多命名选项。
它是如何工作的?好吧,在CamelCase
- &gt;的情况下使用lh#dev#naming#to_underscore()
函数snake case
。
实际上这个很简单:
" Function:lh#dev#naming#to_underscore(identifier) {{{3
function! lh#dev#naming#to_underscore(identifier)
" first I make sure the first letter is in lower case
let identifier = substitute(a:identifier, '\%(^\|[^A-Za-z0-9]\)\zs\(\u\)', '\l\1', '')
" then I replace uppercase letters by '_' + their lower case flavour
let identifier = substitute(identifier, '\l\zs\(\u\)', '_\l\1', 'g')
return identifier
endfunction
然后,:[range]ConvertNames/pattern/policy/flag
将转换为:[range]substitute/pattern/\=lh#dev#naming#{snake}(submatch(0))/flags
。
使用像\w\+
这样的通用模式,它会对找到的第一个单词应用转换 - 转换正在用其蛇形表替换找到的单词。