2009/02/10

VIM tip: Pipe 使用外部命令處理VIM內資料

部分內容參考自[Daily VIM: Piping Buffers],完整的VIM doc請參考[change]

想使用外部指令來處理VIM內容,關鍵在於"!"這個filter command,舉例來說現在讀取VIM內的文字並交由外部程式sort處,可以這樣做:

:% ! sort

其中%是表文本內容(?)(應該是檔名吧? 有誰知道這個從vim doc那來的),最後的輸出結果也將目前文本內容全部取代。再舉一個例子,這個例子是用cat來加行號:

:% ! cat -n

有時我們是要由外部命令讀取資料進來,而且不想將外部指令的結果取代掉所有文本內容,這時我們可以用":r"這個命令。舉例來說,將ls輸出到游標所在處:

:r ! ls

再回到剛才cat的例子,我們若想插入文本內容,卻又不想取代掉現在文本內容,我們可以這樣做:

:exec ":r ! cat -n ".expand("%")

exec是叫VIM做這個命令,命令內容為後面那一串,其中expand("%")表示目前編輯的檔案檔名,所以這個命令在未儲存檔案時不能用的喔~~

1 comment:

Dieter said...

我在help裡找到"%"擴展檔名的用法
:h cmdline-special
:h expand()