VIMでのHTML構文の折りたたみ?


9

HTMLファイルに構文の折りたたみを使用するのに最適な方法はどれかと思いました。特に、<script>タグ内のJavaScriptコードを認識できる場合。

入力しましたset foldmethod=syntaxが、折りたたみを行っていないようです。.vimrcに何か他のものを追加する必要がありますか?

たとえば、JavaScriptの場合は追加する必要let javaScript_fold=1があることはわかっていますが、HTMLに同様のものを追加する必要があるかどうかはわかりません。

ありがとう!


5
はい、デフォルトのHTML構文スクリプトは折りたたみを提供します。あなたは、代替スクリプトを使用していない限り、それはだな構文折り畳みを行う方法。JavaScriptを認識できますか?単純に試してみませんか?それで、あなたの質問は何ですか?
インゴカーカット、2015年

あなたが正しいです。質問を編集しました。デフォルトのHTML構文の折りたたみを有効にします。何か不足していますか?
Sergio

回答:


10

'foldmethod'ウィンドウローカルなオプションです。自分で設定して~/.vimrcも、必ずしも正しい効果が得られるとは限りません。

構文の折りたたみはhtml filetypeにバインドされているため、これらの設定は次のものに属します~/.vim/after/ftplugin/html.vim

setlocal foldmethod=syntax

これは、にあるかどうかに依存しfiletype plugin onます~/.vimrc。ここで、他の関連オプションを設定することもできますfoldcolumn=4


また、これまでのところ(Vim 7.4.1830以降)、デフォルトのHTML構文スクリプトは複数行のタグ自体のみを折りたたみ、開始タグと終了タグの間のテキストは折り返さないことに注意してください。

したがって、これは折りたたまれます:

<div
    class="foo"
    style="width: 100"
>

しかし、これはしません:

<div>
    <b>stuff in between</b>
</div>

これを取得するには、次のように構文スクリプトを拡張する必要があります~/.vim/after/syntax/html.vim

代替案1

折りたたみは、voidを除くすべてのhtml要素間で実行されます(などの閉じる兄弟がない要素<br>)。@zanonaによる寄稿。ありがとう!

syntax region htmlFold start="<\z(\<\(area\|base\|br\|col\|command\|embed\|hr\|img\|input\|keygen\|link\|meta\|para\|source\|track\|wbr\>\)\@![a-z-]\+\>\)\%(\_s*\_[^/]\?>\|\_s\_[^>]*\_[^>/]>\)" end="</\z1\_s*>" fold transparent keepend extend containedin=htmlHead,htmlH\d

代替案2

折りたたみは、明示的に指定された特定の構造(例:)<head>、段落レベル(例:)<p><li>および補助(例:) <script>HTMLタグの間で実行されます。

syntax region htmlFold start="<\z(p\|h\d\|i\?frame\|table\|colgroup\|thead\|tfoot\|tbody\|t[dhr]\|pre\|[diou]l\|li\|span\|div\|head\|script\|style\|blockquote\|form\)\%(\_s*\_[^/]\?>\|\_s\_[^>]*\_[^>/]>\)" end="</\z1\_s*>" fold transparent keepend extend containedin=htmlHead,htmlH\d

ちょっとインゴ、何か悪いことをしているかどうかはわかりませんが、構文メソッドに基づいてHTMLを折りたたむ方法はありません。何も起こりませんか?私が使用するexprカスタムメソッドがありますが、CSSおよびJavaScriptの構文の折りたたみが無効になっています。syntaxjavascriptとcss を使用するとき、期待どおりに折りたたみがありますが、HTMLタグはどれもしませんか?何か案は?
zanona 2016年

1
@zanona:HTMLタグは適切に色付けされていますか?悪いCSSまたはJavaScript要素は、ドキュメントの残りの部分の構文を壊すことがあります。SyntaxAttr.vim -カーソル下の文字の属性を強調表示する構文プラグインは、トラブルシューティングに役立ちます。(折りたたみに失敗した)HTMLタグの構文グループを確認してから、対応する構文ルールが含まfoldれていることを確認してください。
Ingo Karkat

インゴありがとう!やってみます。私は、新しいHTMLファイルから始めて、すべてのプラグインを削除するなど、さまざまなバリエーションを試しましたが、HTMLの下での折りたたみはまだありません。送信したプラグインを確認します。うまくいけば、デバッグに役立ちます。ご協力ありがとうございます。
zanona 2016年

1
@zanona:詳細な分析ありがとうございます。私は今問題が何であるかを知っていると思います。デフォルトのHTML構文では、複数行のタグ自体の折りたたみのみを行いますが、開始タグと終了タグの間で折りたたみを行います。これには、構文スクリプトの単純な拡張が必要です。私の編集を参照してください。私は実際にこれを私のVim設定に長い間入れていたので、忘れていました!
Ingo Karkat

1
@zanona:ありがとう!HTMLタグの選択基準を逆にするというあなたのアイデアは素晴らしいタッチを追加します。私はそれを(より良い)選択肢として回答に追加しました。
Ingo Karkat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.