これが私のユースケースです:
私はたくさんのコードを持っていますが、スタイルの強制により、それぞれの開き括弧と閉じ括弧の前後に改行を書きます。
例:
function func(args) {
statement 1;
statement 2;
if (condition) {
statement 3;
}
}
これは素晴らしくて読みやすいですが、これはスペースの無駄な無駄だと思いますが、私のチームメイトは私に同意しません。基本的に、これはコードをチェックインする方法であり、それがそれです。
Vimの機能を使用して画面の不動産を節約しながら、詳細な方法でコードを書くことができるのではないかと考えていました。私はそれをタイプアウトすることを気にしません、ただスペースをより効率的に使用したいだけです。たぶん、Vimに不要な空行を自動で折りたたむことができると考えました。
構文規則を使用してこれを設定するのは少し難しいことに気づきます。何を書いても既存の構文規則と競合するように思えるためですが、最初の試みとして、衝突しないこれらの規則を書くことを決めました。
syntax match aaaaaaaaa "\vabcd" conceal cchar=A
syntax match bbbbbbbbb "\vef\ngh" conceal cchar=B
ここでの2番目のルールは、私が望むものに近いもので、開き角括弧の場合は次のようなものです/\v\{(\n\s*){2,}
:開き角括弧に改行の2以上の任意の数を指定し、その後に空白のみを付けます。
ただし、vimの内部では次のことが起こります。
abcd
行を入力すると、A
期待どおりに非表示になります。ef
1つの行とgh
次の行に入力すると、両方の行がで非表示になりB
ます。
ef\ngh
この方法で垂直バッファスペースを節約できるように、2行が1行に隠されることを本当に望んでいました。
しかし、私は今、それがおそらくVimの実装の詳細な問題であることを理解しています。行の折りたたみは、コードの折りたたみが解決する問題であり、おそらく隠蔽に関する限り、範囲外です。
だから、やりたいことをやる方法がまだあるのかな。多分どういうわけか折りマーカーを使用していますか?問題は、空の空白だけを折りたたむ必要があることです。
:h fold-expr
そして:h 'fdm'
git
場合は、フックを使用して変更を透過的に適用することもできます。