2010-07-10 83 views
33

我有一個包含數百個TTL(TeraTermLanguage)文件的文件夾。 現在我想縮進所有這些文件。在VIM中縮進文件夾中的所有文件

我已經創建了用於縮進的teraterm.vim,並且我使用VIM打開了一個文件並執行「gg = G」,並且整個文件被正確縮進。

但有沒有什麼辦法,我可以縮進文件夾中的所有文件。

我想在殼牌的幫助下做。但在VIM中,我無法將文件indent命令作爲參數傳遞給VIM。

請建議哪些是我可以對VIM中的所有文件進行縮進的最佳方式。

+0

這有點讓人困惑...... 哪個Shell你在用? 如果你正在使用類似的bash(和使用從下面amphetamachine答案),下面應該工作: 在* .ttl文件* TTL;做vim -s indentme.src $文件;完成 – skeept 2010-07-10 14:27:49

回答

57

比bash命令行腳本vim簡單得多,就是使用vim內部的vimscript(或者從命令行腳本中使用vim腳本更簡單一些)。我個人更喜歡使用arg列表來處理所有多文件操作。例如:

:args ~/src/myproject/**/*.ttl | argdo execute "normal gg=G" | update 
  • args設置arglist中,使用通配符(**將匹配當前目錄以及子目錄)
  • |讓我們在一行
  • argdo運行多個命令運行以下(它會吞噬第二個|
  • execute阻止normal吞噬下一個管道。
  • normal運行以下普通模式下的命令(你用擺在首位的工作)
  • update就像:w,但只有當緩衝區被修改保存。

:args ... | argdo ... | update圖案爲任何類型的項目寬文件操作的非常有用的(例如,查詢,並經由%s/foo/bar/ge或設置均勻fileformatfileencoding替換)。

(其他人更喜歡使用緩衝區列表和:bufdo類似的模式,但與ARG名單我也不需要擔心關閉當前緩衝區或開闢新的Vim會話。)

+0

謝謝尼古拉斯, 這簡直是偉大的做法。這在許多其他情況下也是非常有用的。 儘管我能夠使用腳本,但速度要快得多。 那麼我有大約900個文件,我不得不修改。我唯一遇到的問題是每次用文件名填滿屏幕時,我必須按空格鍵,以便它可以佔用下一組文件。 – hari 2010-07-26 09:15:55

+5

如果出現問題,您應該能夠避免「--More--」提示並通過':silent'的自由應用程序在每個屏幕上顯示空格。例如。 ':argdo無聲地執行「normal gg = G」|無聲更新' – 2010-07-26 16:28:37

+1

+1和@ nicholasa.evans我會將該評論的內容移動/複製到實際答案中(但那只是我) – CoatedMoose 2013-01-24 04:43:22

11

打開一個終端。類型:

$ vim -w indentme.scr foo.c 

然後,此類型正好(在命令模式):

gg=G:wq 

這將關閉VIM,節約縮進文件名爲indentme.scr Vim腳本中的所有線路的過程。

注:indentme.scr將包含所有鍵入的按鍵命令的記錄,所以你做縮進文件時,不要使用箭頭鍵查找文件圍繞花費了大量的時間,因爲這將導致到一個更大的腳本,並會嚴重拖慢批量操作。現在

,爲了縮進所有行的文件,只需鍵入以下命令:

$ vim -s indentme.scr unindented-file.c 

Vim會閃爍開關(如果你是一個快速的電腦上,而不是編輯巨大文件),縮進所有行,然後就地保存該文件。

不幸的是,這將只在一次處理一個文件,但你可以輕鬆擴展使用shfor循環功能:

for filename in *.ttl ; do 
    vim -s indentme.scr "$filename" 
done 

注:這將節省,在任何文件。除非set bk在您的~/.vimrc中,否則不要期望保存備份。

2

我去了的amphetamachine的解決方案。不過,我需要遞歸搜索多個目錄。以下是我使用的解決方案:

$ find . -type f -name '*.ttl' -exec vim -s indentme.scr "{}" \; 
0

參考上面的答案,我想完成此操作。 我將從零開始,讓初學者能夠理解。

步驟-1 安裝通過使用下面的命令 打開一個終端的astyle(用於格式化工具)。類型:

sudo apt-get install astyle 

步驟2確保已VIM安裝在您的system.Run從目錄下面的命令中,你的代碼文件are.The以下命令將創建一個我們要運行腳本遞歸以每個文件美化在我們的目錄(如在上面提到的答案)

vim -w indentme.scr foo.c 

步驟3然後,鍵入這恰好(在命令模式),然後按回車

:%!astyle 

步驟4然後準確鍵入此(在命令模式),然後按回車

:wq 

步驟-5-上次執行這個遞歸由以下命令:

find . -type f -name '*.cpp' -exec vim -s indentme.scr "{}" \; 

所有的cpp文件都將被正確格式化。

相關問題