2014-12-13 12 views
2

要重現我的問題:Vim在C++中自動硬包裝長評論?

$ vim -u NONE test.cpp 
:set nocompatible 
:set tw=20 
:set fo=croql 

現在,在下面的文本:

/* 
    test test test test test test test test test 
*/ 

注意,有含測試行沒有前導星號。 Vim會默認插入它,刪除它。

Vim應該自動包裝這個,但它沒有。

如何讓Vim在評論中自動換行,,僅在評論中:set fo+=t的作品,但然後一切都被包裝,我不想自動硬包裝的代碼。

回答

3

用我OnSyntaxChange plugin,您可以根據改變'fo'期權價值光標的評論或沒有內部是否:

call OnSyntaxChange#Install('Comment', '^Comment$', 0, 'a') 
autocmd User SyntaxCommentEnterA setlocal fo+=t 
autocmd User SyntaxCommentLeaveA setlocal fo-=t 
+0

所以,我想我的答案應該已經開始了,「除了使用一個巧妙的插件,Vim不能......」 – Ben 2014-12-15 14:29:27

3

對不起,但是Vim本身不能配置爲在多行註釋中自動換行,而在行的開頭沒有一些字符。 'comments'選項控制Vim如何識別自動換行的註釋。多行註釋必須在「註釋」選項中有「s」,「e」和「m」部分才能被識別; :help format-comments說:「三件註釋必須有一箇中間字符串,否則Vim無法識別中間行。」

然而,你仍然可以手動重新這些線路與q運營商(簡寫qq單個線)和Vim應該主要是做你想要什麼。如果它稍微關閉,你可以混淆'formatexpr'選項。

在多行註釋或者使用//風格的註釋中使用「*」可能會更好。

有一些可用的插件以巧妙的方式使用語法定義的區域,這些插件可能允許您解決這些限制。見Ingo的答案。

+0

權。您可以將四個空格定義爲中間字符串,但這也會影響其他縮進行,因此它沒有用處。 – 2014-12-13 18:35:44

+0

@IngoKarkat,@Ben是否可以編寫一個自動命令,當光標位於註釋中時執行':set fo + = t',當外部時執行':set fo- = t'? – orlp 2014-12-13 23:52:43