2009-11-28 111 views
9

是否有任何方法讓VIM繼續將格式應用於用作摺疊標題的行?在VIM摺疊標題中突出顯示語法

例如,我有以下代碼:

int foo(int a, int b) { 
    int c; 
.... 
} 

當摺疊時,我看到:

+-- 4 lines: int foo(int a, int b) {---------------------------- 

然而,整個行被突出顯示爲每 「摺疊」 類。有沒有什麼辦法可以禁用它,所以我仍然看到語法突出顯示?

[一個簡單的例子,這是不是那麼重要,但我也用在觀看大型數據文件廣泛摺疊,並有格式是更重要的是我]


回答

7

「但是,整個行被突出顯示爲」摺疊「類。是否有任何方法來禁用它,所以我仍然看到語法突出顯示?

不,摺疊的標題文本不是文本的一部分,不能直接編輯,只是計算並覆蓋在屏幕上。 「摺疊」突出顯示應用於整條線,並且所有摺疊都應用相同的突出顯示。

對於我用vim作爲大綱(在VimOutliner項目中),我砍掉了vim的源代碼以允許根據摺疊級別進行不同的摺疊高亮顯示,所以應用了多個摺疊標題高亮顯示(例如FoldLevel1,FoldLevel2等)。我認爲它可能會進一步黑客使用已經存在的摺疊頭部文本的突出顯示,但考慮到摺疊方式的作用,我懷疑這可能比聽起來更難。

對不起,剛纔讓我覺得indent的foldmethod的建議可能正是你要找的東西,它確實保留了非縮進行的語法,同時仍然具有摺疊部分的標題功能。

5

我想你」重新尋找正在改變foldmethod縮進而不是手動,這是默認的。在命令模式下輸入。

:set foldmethod=indent 

現在,如果你去你的富功能和類型ZM(增加了1倍水平)內,它看起來就像這樣:

int foo(int a, int b) { 
+-- 2 lines: int c;------------------------------------------------------------ 
} 

foo的線仍會有語法高亮。當然要展開,輸入zr。爲方便起見,我把下面的幾行字在我的.vimrc快速摺疊或展開的一切:

" Folding and unfolding 
map ,f :set foldmethod=indent<cr>zM<cr> 
map ,F :set foldmethod=manual<cr>zR<cr> 

有一個也是一個很好的教程here,當然閱讀使用foldmethod vim的幫助可能導致你其他方法你喜歡比縮進更好,但你的示例代碼看起來很可能需要縮進。

+0

感謝您的回覆;但也許我不應該舉這個例子。您的意見對C代碼很有用,但我也經常使用http://www.vim.org/scripts/script.php?script_id=158來摺疊文本文件。這似乎並不適用於任何解決方案 – Mikeage 2009-11-29 03:39:48

+2

我不認爲如果您摺疊純文本文件,語法高亮將會很重要(我會很好奇看到一個示例),但如果它執行相同的排序的想法適用。如果您在要添加語法的行下面開始摺疊,那麼您仍然應該看到想要正確突出顯示的行。 – mmrobins 2009-11-29 06:52:09

+0

@mmrobins,你會介意看[這個關於在摺疊線上突出顯示Python語法的問題](http://stackoverflow.com/questions/8655799/syntax-highlight-python-in-a-vim-fold-line)並提供一些關於是否可能以及爲了使這項工作可能需要改變的信息。 – 2011-12-31 03:08:32