9

私はvimのカスタム構文ファイルを作成していますが、コードを読みやすくするために、コードを自動的にインデントする方法をvimに伝えたいと思います。今のところ、gg=G''vimでの通常の再インデントは、各行の先頭にあるすべての空白を削除します。

IF (@("X_17") = "X") THEN
*Make sure only one is selected
countX = 0;
IF (@("X_19") = "X") THEN
countX += 1;
END
IF (@("X_20") = "X") THEN
countX += 1;
END
IF (@("X_21") = "X") THEN
countX += 1;
END
...

コメント(*で始まる)がまったくインデントされないように(行の先頭に空白がないように)設定したいのですが、残りはIFとENDに基づいてインデントされます。適切にインデントされた同じコード(最初のIFでさえさらに大きなIF / ENDブロック内にあると想定):

    IF (@("X_17") = "X") THEN
*Make sure only one is selected
        countX = 0;
        IF (@("X_19") = "X") THEN
            countX += 1;
        END
        IF (@("X_20") = "X") THEN
            countX += 1;
        END
        IF (@("X_21") = "X") THEN
            countX += 1;
        END
        ...

構文のハイライトを設定し、キーワードと組み込み関数はすでにdal.vimファイルの一部になっています。現在のdal.vimは次のとおりです。

http://pastebin.com/PEcSvqM9

コードが最初に空白なしですべてのコメントを保持しながら、IF / ENDブロック内で自動的にインデントされるように、私が持っているものを変更する方法はありますか?

ボーナスの質問:これらのIF / ENDブロックに従うようにコード折り畳みを設定するにはどうすればよいですか?今、私はzf2jこのコードを折りたたむためにやっています。

4

1 に答える 1

5

インデント プラグインを作成し、indentサブディレクトリに配置する必要があります。詳細については、

:h 'indentexpr'

、それはあなたのプラグインが設定すべきものです。vim で配布されている数百のインデント スクリプトから自由にサンプルを入手してください。私はそのようなプラグインを自分で書いたわけではないので、例としてどのプラグインが最も役立つかは言えません。

コードの折りたたみについては、チェックアウトしてください

:h :syn-fold

ああ、シンタックス ファイルにインデントを設定しないでください。不可能ではありませんが、この種の仕事には適していません。

于 2012-07-31T20:06:13.393 に答える