質問
次のような関数定義で始まるbashスクリプトファイルがあります:
#!/bin/bash
# .....
# .....
function test {
...
...
}
...
...
vim 7.2を使用し、bashで折りたたみが有効になるように g:sh_fold_enabled = 1
を設定しました。問題は、機能テストの折り畳みが正しく終了しないことです。つまり、ファイルの終わりまで続きます。次のようになります:
#!/bin/bash
# .....
# .....
+-- 550 lines: function test {----------------------------------------
~
~
関数自体は約40行で、次のようなものが必要です(「画像」はthousendの言葉以上のことを言う、...):
#!/bin/bash
# .....
# .....
+-- 40 lines: function test {----------------------------------------
...
...
...
~
~
この問題の良い解決策を知っている人はいますか
解決
いくつかの調査を行って、問題を解決する方法を見つけました:ファイルの終わりまで関数が折り畳まれないようにするには、 shExpr
(ファイル sh.vim
内、通常 / usr / share / vim / vim70 / syntax /
のような場所に配置されます):
syn region shExpr ... start="{" skip="^function.*\_s\={" end="}" ...
この変更により、構文ファイルは、 {
および}
が実際に関数グループに属している場合でも、shExprグループに属していると考えなくなります。または、とにかくそれが私が理解した方法です。
注:この修正は、次の構文でのみ機能します。
function test
{
....
}
これではなく:
function test {
....
}
最後のバグに対する迅速で汚い修正は、shExprを@shFunctionListクラスターから削除することです。
他のヒント
正常に機能するはずですが、構文ファイルにバグがあるようです。折り畳み領域は実際には「関数」という単語で始まり、閉じている「}」まで続けようとしますが、「{...}」領域の強調表示が閉じている「}」を引き継ぎ、折り畳みは別の検索を続けます1。別の '}'を追加すると、実際に次のように表示されます:
function test {
...
}
}
Reddit には、より簡単な解決策があるようです。
投稿で著者を引用するには:
使用するオプションは次のとおりです。
syntax=enable filetype=sh foldmethod=syntax let g:sh_fold_enabled=3 g:is_sh=1
編集:回避策
vim -u NONE -c 'let g:sh_fold_enabled = 7' -c ':set fdm = syntax' -c 'sy on 'file.sh
g:sh_fold_enabled = 4は、議論で合意された折り畳みレベルであると思われました。このソリューションは私にとって完璧に機能しています。構文ファイルを編集する必要はありませんでした。
編集:g:sh_fold_enabled = 5は実際には正しいものです。ない4。 また、ポスターがRedditで示したように、これらのコマンドはプラグインを除くvimrcの他の設定の前に移動する必要があります。