5

私は、共通の #define (#if WIN、#if UNIX など) で区切られた、かなりの量のマルチプラットフォーム C/C++ コードを使用しています。ファイルを開いたときに、現在興味のないセクションを vim が自動的に折りたたむようにできるとよいでしょう。vim スクリプトのアーカイブを検索しましたが、有用なものは見つかりませんでした。助言がありますか?開始する場所?

4

5 に答える 5

8

構文に折りたたみ領域を追加するだけです 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
于 2008-09-23T14:19:09.763 に答える
2

@hometoasts の回答に追加するには、そのコマンドをファイルの最初の 10 行または最後の 10 行にコメントとして追加すると、vim がそのファイルに対して自動的に使用します。

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

于 2008-09-23T14:23:46.600 に答える
0

私は常に forldmethod=marker を使用し、コメント内に独自の折り畳みタグを定義してきました。

これは、開いた折り目と閉じた折り目を定義する文字を定義するためのものです。この場合、open は "<(" で close は ")>" です。これらを任意のものに置き換えてください。

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

それが役立つことを願っています。

于 2009-03-23T15:59:50.487 に答える
0

私は巨大なコード ベースを持っているので、多数の #defines があります。各ファイルには多数の #ifdef があり、ほとんどの場合、それらはネストされています。私は多くのvimスクリプトを試しましたが、私が持っているコードで常に何らかのエラーが発生していました. 最後に、すべての定義をヘッダーファイルに入れ、それを作業したいファイルに含め、このようにgccを実行しました

gcc -E -C -P ソース.cpp > 出力.cpp

-E コマンドは、gcc にファイルのプリプロセッサのみを実行させるため、未定義の #ifdef 内の不要なコードはすべて削除されます。-C オプションは、ファイル内のコメントを保持します。-P オプションは、プリプロセッサからの出力でのラインマーカーの生成を禁止します。

于 2010-03-04T07:00:49.953 に答える
0

Denton の追加への簡単な追加: C または C++ コードで新しい構文規則を使用するには、$VIMRUNTIME/syntax/c.vimおよびのファイルに追加しますcpp.vim。($VIMRUNTIMEは、ローカルの Vim コードが存在する場所です: ~/.vimUnix で。) また、構文定義内のstartとの値endは正規表現であるため、 と を使用^#if^#endifて、行頭の文字列のみに一致するようにすることができます。

于 2008-09-23T14:34:16.093 に答える