执行搜索&使用回调命令替换

时间:2012-10-29 12:29:38

标签: vim

我正在尝试搜索&在我的文件中替换所有出现的特定模式,然后在每次匹配时调用toupper()。在实践中,没有那么多我不能手工完成的事情,但我很想提高我的Vim技能并找到一种(简单)方法让Vim为我做这件事。我说简单,否则我会忘记。

通过阅读s/的Vim帮助,我应该能够做到这样的事情:

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

(假设我正在大写所有函数定义名称)。

这实际上只是用控制字符^A替换了函数名。如何在正则表达式中引用捕获组?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

在替换模式中使用\U

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