2010-01-14 51 views
17

在正常模式下(在VIM)如果光標在一個數,擊中Ctrl鍵 - 遞增1的數量現在我想要做的同樣的事情,但從命令行。具體而言,我想要去的某些行,其第一個字符是數字,並加一,即,我想運行下面的命令:在Vim命令行使用CTRL-A遞增一個號碼

:g/searchString/ Ctrl-A 

我試圖存儲按Ctrl - 一個在宏(比如a),並使用:g/searchString/ @a,但我得到一個錯誤:

E492: Not an editor command ^A

有什麼建議?

回答

22

你必須使用normal執行正常模式命令模式命令:

:g/searchString/ normal ^A 

請注意,您必須按Ctrl鍵 - V按Ctrl - 一個到獲得^A字符。

+0

使用vim多年來一直和從未碰到「正常」 - 庫爾 – 2010-01-14 04:52:04

+0

@詹姆斯:未知:)的Vim的美容驚喜升ike沒有其他軟件! – 2010-01-14 08:59:28

+1

嘗試vim問題的黑暗角落來發現更多未知:http://stackoverflow.com/questions/726894/what-are-the-dark-corners-of-vim-your-mom-never-told-you - 關於 – idbrii 2011-02-23 19:17:24

0

我相信你可以在命令行上用vim做到這一點。但這裏的一種替代,

$ cat file 
one 
2two 
three 

$ awk '/two/{x=substr($0,1,1);x++;$0=x substr($0,2)}1' file #search for "two" and increment 
one 
3two 
three 
9

還有:g//normal把戲CMS發佈,如果你需要的不僅僅是在該行的開始找到了一些更復雜的搜索要做到這一點,你可以這樣做這樣的:

:%s/^prefix pattern\zs\d\+\zepostfix pattern/\=(submatch(0)+1) 

通過解釋:

:%s/X/Y   " Replace X with Y on all lines in a file 
" Where X is a regexp: 
^     " Start of line (optional) 
prefix pattern  " Exactly what it says: find this before the number 
\zs    " Make the match start here 
\d\+    " One or more digits 
\ze    " Make the match end here 
postfix pattern " Something to check for after the number (optional) 

" Y is: 
\=     " Make the output the result of the following expression 
(
    submatch(0) " The complete match (which, because of \zs and \ze, is whatever was matched by \d\+) 
    + 1   " Add one to the existing number 
) 
+1

非常有幫助!我也喜歡你如何解釋它。謝謝。 – romar 2013-03-28 08:45:52