2012-10-29 86 views
2

我试图搜索&在我的文件中替换特定模式的所有匹配项,然后在每个匹配项上调用toupper()。在实践中,我没有那么多的事情,我不能亲自去做,但我很想提高我的Vim技能,并找到一种让Vim为我做到这一点的(简单的)方法。我说简单,否则我会忘记。使用回拨命令执行搜索和替换

从读取在Vim的帮助s/,我应该可以做这样的事情:

:%s/\vfunction ([a-z0-9_]+)/\="function " . toupper("\1")/g 

(假设我uppercasing所有功能定义名称)。

虽然这实际上只是将控制字符^A替换为函数名称。我如何参考正则表达式中的捕获组?

回答

3

道歉。我应该仔细阅读。无论如何,我会回答自己的问题,而不是删除它。您需要使用submatch(n)指捕获组:

:%s/\vfunction ([a-z0-9_]+)/\="function " . toupper(submatch(1))/g 
1

使用\U在替换模式。

:%s/\vfunction ([a-z0-9_]+)/function \U\1/ 
+0

这是一个有用的技巧,谢谢!我对处理回调例程的一般方法更加好奇,但对于大写的例子来说,这更简单:) – d11wtq