Vimscript:如何在替换中大写匹配文本的特定字符?

时间:2012-08-24 19:57:42

标签: regex vim

我无法解决这个问题。我正在编写一个Vim片段,它将获取当前文件的名称并将其扩展为类名,例如

如果当前文件名为:some_awesome_class.foo ...则代码段会扩展为class SomeAwesomeClass

到目前为止,我有:

substitute(Filename(), '\(^.\|_\a\)', '\u&', 'g')

..但这只会使第一个字母大写,即使它正确匹配所有下划线。我想我正在寻找的是一种使用下划线作为搜索的一部分的方法,但不能在&符号中匹配,即:它查找_\a但只匹配\a

非常感谢任何帮助!

4 个答案:

答案 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