質問

次のような関数定義で始まる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の他の設定の前に移動する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top