2012-10-29 26 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