我對VIM比較陌生。我有一些源代碼,這是一團糟。乍一看,我希望至少得到一個清晰和有組織的代碼視圖,所以我喜歡將它正確地格式化,我的意思是縮進取決於函數的深度等等。是否可以使用VIM格式化C++代碼?
我不知道VIM是否可以完成,否則您可以推薦哪些其他命令行工具。
感謝
我對VIM比較陌生。我有一些源代碼,這是一團糟。乍一看,我希望至少得到一個清晰和有組織的代碼視圖,所以我喜歡將它正確地格式化,我的意思是縮進取決於函數的深度等等。是否可以使用VIM格式化C++代碼?
我不知道VIM是否可以完成,否則您可以推薦哪些其他命令行工具。
感謝
而VIM是一個真正的瑞士小刀我還是比較喜歡的外部工具進行一些工作。與使用內置的等價物相比,這種方法有時更直觀,更易於記憶。
在縮進的情況下,我通過astyle過濾整個文件緩衝區。在幾分鐘內,astyle參數更容易掌握,特別是如果您不是vim大師。此外,astyle提供更多的靈活性來微調輸出。
首先安裝的astyle:# apt-get install astyle
然後:
:%!astyle
(簡單的情況 - 的astyle缺省模式是C/C++)
或
:%!astyle --mode=c --style=ansi -s2
(ANSI C++風格,使用每個縮進層次的兩個空間)
或
:1,40!astyle --mode=c --style=ansi
(ANSI C++風格,濾波器只線1-40)
的Vim一定會做到這一點,雖然結果可能不是完美的:
您可以瞭解更多的平等命令::help =
沿着m000的想法提出的通用解決方案是使用UniversalIndentGUI作爲外部工具。
感謝您的信息,但我更喜歡VIM,因爲我必須在遠程機器上調試代碼 – flow 2010-03-24 21:12:00
有一個vim插件,可以在vim中對你的代碼進行格式化。這就是所謂的VIM,自動套用格式,你可以在這裏下載:
https://github.com/Chiel92/vim-autoformat
它外部代碼格式化程序集成到VIM。例如,如果要格式化C,C++,C#或Java代碼,則需要安裝程序astyle,vim會自動將其設置爲格式化程序。
我不寫C++代碼,但我寫了一些Java代碼。
相反,Vim支持一些常用語言的格式。 我已經爲我設置了一個捷徑來格式化緩衝區中的整個代碼。 它會回到我剛纔編輯的行:)
" format the file
map <leader>fm gg=G'.
就必須解決這一確切的問題,所以我想我會有助於挽救他人一段時間。
您可以使用gg=G
縮進您的代碼。但是當你想調整自動縮進的方式時,事情就變得很難理解了。因此,如果你只關心錯誤的空白被刪除,並且不關心格式化風格,gg=G
是最快捷的方法,因爲它的內置。
如果您確實想要控制樣式(例如,您試圖使代碼符合a style guide),那麼您將需要一個外部工具來處理您的文件。您可以從vim中調用該工具::%!<toolname> <options>
。這通過工具管理文件並重新加載處理後的結果。 (你可以明顯地用它來做任何你想對你的文件做的事情)
所以下一個問題是,你應該選擇什麼外部工具?無論如何,該方法是相同的:
現在,您使用的工具取決於您嘗試複製的樣式。如果你想複製廣泛使用的風格,那麼很有可能你需要astyle。
如果你想複製自定義樣式,那麼您將需要兩件事情:
之間uncrustify和greatcode,你應該能夠完全複製你想要的風格。
其實我撒謊了。還有另外一種方法,它叫clang-format。然而,你會想要閱讀它的文檔,它仍然處於早期階段,所以一些選項不能很好地工作。這是一個漂亮的工具(絕對是最聰明的,因爲它構造了代碼的AST),它甚至可以用於Windows。
如果您要花時間閱讀本手冊,您還需要查看GNU Indent。
當然,還有最後一種方法,它實際上是花時間學習vim的縮進規則併爲您的風格編寫一個規則。這將需要時間,但它將與gg=G
一起使用。
的astyle上的一些注意事項VS uncrustify VS greatcode:
請注意,您不必選擇一個工具。使用vim,你可以映射一個按鍵來連續執行幾個命令,因此理論上你可以結合使用這些工具來獲得你正在尋找的東西。
最後但並非最不重要的,這裏是從我的.vimrc文件中,在那裏我有映射F12調用的astyle有一些選項的摘錄:
"A2 = attached brackets
"-s8 indent 8 spaces
"-xc attached braces to class declarations
"-xj remove braces for single statement ifs and elses
"-c convert tabs to spaces in the non-indentation part of the line
map <F12> :%!astyle -A2 -s8 -xc -xj -c<CR>
不要評判我的風格。只需使用該工具重現你想要的。
還有一個Vim插件依靠clang-format
:vim-clang-format
然後,你可以簡單地映射到任何適合你的格式化命令。
現在我強烈推薦clang格式。它允許鐺格式的簡單集成到Vim中,一旦安裝了鏗鏘格式:
http://clang.llvm.org/docs/ClangFormat.html#vim-integration
這是唯一的代碼美化真正瞭解你的C++代碼,它是真正的智能美化代碼更像是一個人而不是一臺機器。例如:
void TestFunction(int argument1, int argument2,
int argument3);
void TestFunctionVeryLongName(int argument1,
int argument2,
int argument3);
void TestFunctionWithRidiculouslyLongName(
int argument1, int argument2, int argument3);
在clang格式手冊中建議的鍵綁定的另一種方法是在vim中使用'equalprg'綁定。這允許你用'G = gg'或其他'='縮進選項調用'clang-format'。 只需在你的'.vimrc'文件中加入以下內容: 'autocmd FileType c,cpp setlocal equalprg = clang-format' – Daniel 2016-10-27 02:24:46
哇,這真的太棒了,非常感謝 – flow 2010-03-24 10:56:31
是否有可能將此映射到像ctrl + shift + F這樣的組合鍵? – 2014-03-27 12:00:55
您也可以通過將'equalprg'設置爲astyle(例如:'set equalprg =〜/ astyle \ --style = google')來覆蓋Vim的縮進運算符('=')來使用Astyle – Parsa 2014-08-03 14:56:11