我无法解决这个问题。我正在编写一个Vim片段,它将获取当前文件的名称并将其扩展为类名,例如
如果当前文件名为:some_awesome_class.foo
...则代码段会扩展为class SomeAwesomeClass
到目前为止,我有:
substitute(Filename(), '\(^.\|_\a\)', '\u&', 'g')
..但这只会使第一个字母大写,即使它正确匹配所有下划线。我想我正在寻找的是一种使用下划线作为搜索的一部分的方法,但不能在&符号中匹配,即:它查找_\a
但只匹配\a
。
非常感谢任何帮助!
答案 0 :(得分:5)
这是一个建议:
s/\v(^|_)(\a)/\u\2/g
答案 1 :(得分:4)
您应该从与\zs
的匹配中排除行的开头和下划线。
^.\|_\zs\a
这可以在这里工作。
请参阅:help \zs
和:help \ze
。
答案 2 :(得分:1)
你需要使用()将它们分隔成单词边界,然后将每个单词用于驼峰。
:s/_\(.\)/\u\1/g
试试..
答案 3 :(得分:1)
另一种方式:首先添加_作为单词delim
:set iskeyword-=_
然后
:%s/(\<)(.\{1})/\u\2/g