2008-09-23 78 views
4

我使用了相當多的多平臺C/C++代碼,用普通的#defines(#if WIN,#if UNIX等)分隔開來。如果我可以讓vim在我打開文件時自動摺疊我目前不感興趣的部分,那將會很好。我已經通過vim腳本檔案進行了搜索,但是我沒有找到任何有用的東西。有什麼建議麼?開始的地方?自動摺疊vim中的#defines

回答

7

只是一個摺疊區域添加到您的語法 http://vim.wikia.com/wiki/Syntax_folding_of_Vim_scripts#Syntax_definitions

:syn region myFold start="\#IF" end="\#ENDIF" transparent fold 
:syn sync fromstart 
:set foldmethod=syntax 
+0

這就是爲什麼我愛vim,哈哈。 – 2008-09-23 14:20:56

+0

我在vim 7.0上,將3行放在我的.vimrc文件的末尾,但是我看到我的文件的某些部分被任意摺疊。有人可以發佈確切的步驟來做以下事情: 1.根據環境變量例如如果有#ifdef並且env變量未設置,則摺疊。 2.摺疊所有ifdef(無論層次結構有多深),如果你想看到它們,你就做一個zo。 – 0fnt 2011-02-02 12:51:19

2

爲了增加@hometoasts的回答,您可以添加命令,如文件和Vim會的第一個十年,最後十行評論自動將其用於該文件。

 
    /* vim: syn region regionName start="regex" end="regex": */ 

0

快速除了丹頓的另外:要使用新的語法規則與任何C或C++代碼,它在$VIMRUNTIME/syntax/c.vimcpp.vim添加到文件中。 ($VIMRUNTIME是您的本地Vim代碼所在的位置:Unix上的~/.vim)。另外,語法定義中的startend的值爲正則表達式,所以您可以使用^#if^#endif確保它們僅匹配那些字符串的開頭線。

0

我一直使用forldmethod = marker,並在註釋中定義了我自己的摺疊標籤。

這是用於定義定義打開和關閉摺疊的字符。在這種情況下,打開「<(」和close is「)>」用任何你想要的替換它們。

set foldmethod=marker 
set foldmarker=<(,)> 

這是我的自定義功能,以決定如何顯示摺疊文本:

set foldtext=GetCustomFoldText() 
function GetCustomFoldText() 
    let preline = substitute(getline(v:foldstart),'<(','<(+)','') 
    let line = substitute(preline,"\t",'  ','g') 
    let nextLnNum = v:foldstart + 1 
    let nextline = getline(nextLnNum) 
    let foldTtl = v:foldend - v:foldstart 
    return line . ' | ' . nextline . ' (' . foldTtl . ' lines)>' 
endfunction 

希望有所幫助。

0

我有一個龐大的代碼庫,所以有大量的#defines。每個文件都有許多#ifdef的 以及它們嵌套的大部分時間。我嘗試了很多vim腳本,但他們總是用 來運行我的代碼時出現了一些錯誤。所以最後我把我所有的定義放在 的頭文件中,並將其包含在我想要的文件中,並在其上做了gcc 這樣

gcc -E -C -P source.cpp> output.cpp

-E命令獲取gcc僅運行文件上的預處理器,因此將刪除未定義的#ifdef中所有不需要的 代碼。 -C選項保留文件中的註釋。 -P選項禁止在預處理器的輸出中生成線標記。