【问题标题】:Vim capturing groups regex to replace camel case string with blank space at the endVim 捕获组正则表达式以在末尾用空格替换驼峰式字符串
【发布时间】:2017-03-11 19:26:32
【问题描述】:

我有这样一行代码:

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])把它放在OR中

有人为我的问题准备好了 vim 正则表达式吗?也欢迎解释。

【问题讨论】:

  • 这是迄今为止我能想到的最好的。不幸的是,它在变量名之后添加了一个尾随_。我还在想有没有办法解决这个问题。 s/\v([A-Z])([A-Z])([a-z])|([a-z])([A-Z])|( .*$)/\1\4_\2\3\5\6/g
  • 这是一个非常hack的解决方案,但你可以这样做qq:s/\v^\w{-}\a\zs\u/_&amp;&lt;cr&gt;@qq@q
  • Tim Pope 的abolish 可以为您完成。

标签: regex vim camelcasing


【解决方案1】:

我有两个命令可以从UpperCamelCaselowerCamelCase 转换为snake_case,反之则为lh-dev。一个适用于当前单词,另一个适用于substitute。实际上,如果您为当前项目配置库(-> 变量、属性、常量、getter、类型等),则可以使用更多命名选择。

它是如何工作的?在CamelCase -> snake case 的情况下,它使用lh#dev#naming#to_underscore() 函数。

这个其实很简单:

" 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\+ 之类的通用模式,它将对找到的第一个单词应用转换——转换将找到的单词替换为其蛇形形式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多