2010-12-16 71 views
4

我想重新格式化一些代碼,看起來像這樣:有沒有辦法用Vim自動重新設置大括號?

if (cond) { 
    foo; 
} 

if (cond) 
{ 
    foo; 
} 

由於這是C代碼,我一直在尋找cindent/cinoptions=使用,但它似乎它不涉及多行規則。

我一直在尋找formatoptions使用gq,它似乎也不可能。

那麼有可能使用默認的Vim選項,或者我應該使用特定的插件還是函數?

回答

4
:%s/^\(\s*\).*\zs{\s*$/\r\1{/ 

擊穿:

^\(\s*\) =捕捉空白在該行的開頭

.* =一切

\zs =這個

{ =左大後開始更換大括號

\s*$ =尾隨線年底

\r\1{ =換行,抓獲空白,撐

+0

這一個運作良好! – user1027562 2012-10-10 10:14:12

5

我不知道這是否能夠徹底解決您的問題,但如果這是一個一次性的操作,你可能會想嘗試的正則表達式:

:%s/^\(\s*\)\(.*)\)\s*{\s*$/\1\2^M\1{/ 

注意^M是爲控制字符通常通過按CTRL-V然後ENTER生成(取決於您的終端)。

編輯:正如Jay和Zyx在評論中指出的,\r是將換行符插入替換字符串的更好方法。我沒有意識到這一點,非常感謝提示。

+1

爲什麼使用'^ M'?那麼'\ r'呢? – Jay 2010-12-16 16:58:26

+0

它確實有效,但如果可以通過現有的選項訪問,我會首選。我仍然可以使用你的正則表達式在用戶定義的函數映射到 +的東西。如果沒有其他解決方案,我會接受你的答案。無論如何感謝您的輸入! – 2010-12-16 17:02:16

+0

@Jay:因爲這不適用於我正在開發的* all *機器上,但如果您只在MacOS上工作,那麼這是個不錯的選擇。 – soulmerge 2010-12-16 17:31:21

1

我不知道你是否可以在vim中完成它,但是你可以嘗試使用BSD indent命令和-bl選項。當光標在第一個{上時,您可以輸入indent -bl輸入

+0

+1簡單和高可用性 – sehe 2011-04-25 21:01:04

4

之前空格如果安裝Artistic Style,你可以這樣做:

:set formatprg=astyle\ -b 

然後使用gq重新格式化的塊碼。強調如果您想要啓用此功能後,每次你編輯C文件, 你可以添加以下到您的.vimrc文件文本

autocmd BufNewFile,BufRead *.c set formatprg=astyle\ -b 
+1

我建議用'FileType c'替換'BufNewFile,BufRead * .c'。甚至把它放到'〜/ .vim/ftplugin/c.vim'中。 – ZyX 2010-12-16 17:51:44

+0

良好的通話,但爲什麼'ftplugin' vs'/ ftplugin'後? – Thedward 2010-12-17 18:36:00

相關問題