Vim 执行搜索和搜索;使用回调命令替换

Vim 执行搜索和搜索;使用回调命令替换,vim,Vim,我试图在文件中搜索并替换特定模式的所有匹配项,然后在每个匹配项上调用toupper()。在实践中,没有太多的情况是我不能直接用手来做这件事,但我很想提高我的Vim技能,并找到一个(简单的)方法让Vim为我做这件事。我说简单,否则我就忘了 通过阅读有关s/的Vim帮助,我应该能够做到以下几点: :%s/\vfunction ([a-z0-9_]+)/\="function " . toupper("\1")/g (假设我将所有函数定义名称大写) 实际上,这只是将函数名替换为控制字符^A。如何引用

我试图在文件中搜索并替换特定模式的所有匹配项,然后在每个匹配项上调用
toupper()
。在实践中,没有太多的情况是我不能直接用手来做这件事,但我很想提高我的Vim技能,并找到一个(简单的)方法让Vim为我做这件事。我说简单,否则我就忘了

通过阅读有关
s/
的Vim帮助,我应该能够做到以下几点:

:%s/\vfunction ([a-z0-9_]+)/\="function " . toupper("\1")/g
(假设我将所有函数定义名称大写)


实际上,这只是将函数名替换为控制字符
^A
。如何引用regexp中的捕获组?

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

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

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

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

在替换模式中使用
\U

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

在替换模式中使用
\U

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

这是一个有用的技巧,谢谢!我对处理回调例程的一般方法更感好奇,但对于大写示例来说,这要简单得多:)这是一个有用的技巧,谢谢!我对处理回调例程的一般方法更感兴趣,但对于大写示例,这要简单得多:)