2014-06-20 106 views
2

我想在每行的末尾插入該行的字母字符數。在一條線上做到這一點很容易。我使用:s/\a//gn進行搜索,然後在命令行中輸入字母字符,然後輸入A和空格並輸入數字。將命令行的輸出寫入vim的文件

我的問題出現時,我有這麼多的行,它變得非常繁瑣,這樣做。我正在嘗試創建一個宏,但是難以獲得命令行輸出。有沒有辦法做到這一點,而不訴諸於* nix命令?我可以訪問一個* nix框,但不是所有的時間。

所以,如果我的文件有以下內容:

abc2d4s 
jd4a5ag 
jdf7fjf 
abdd5ff 

我想輸出看起來像這樣:

abc2d4s 5 
jd4a5ag 5 
jdf7fjf 6 
abdd5ff 6 

我就在想,如果有一種方式來獲得替換輸出以某種方式傳送到寄存器,但無法弄清楚如何去做,但也許有更好的方法。要做到這一點

回答

4

您可以捕獲:s///gn命令的輸出與:redir,但在這種情況下,我寧願通過substitute():help sub-replace-expression實現計數:

:%s/.*/\=submatch(0) . ' ' . len(substitute(submatch(0), '\A', '', 'g'))/ 

這匹配整行(.*),然後刪除所有非字母字符(\A),並追加結果的長度。注意:僅適用於ASCII字符(但是\a只包含那些字符)!

+0

+1,同樣的想法,但比我好。 – Kent

+0

@Kent:謝謝,我想我保存了一些使用相反的'\ A'鍵入。 –

2

一種方法是使用一個簡單的宏:

:%norm A <C-v><C-r>=col('.')-2<C-v><CR> 

應該是這樣的:

:%norm A ^R=col('.')-2^M 

我們進入插入模式在每一行的末尾並插入一個空格後跟最後一個字符的列號。

的變體:

:%norm A^R=" ".len(getline('.'))^M 
2

這CMD應該給你輸出:

%s/.*/\=submatch(0).' '.(len(submatch(0))-len(substitute(submatch(0),'\a','','g'))) 
相關問題