web-dev-qa-db-ja.com

Python in vim?

私が書くすべてのコードにはvimを使用しています。私の最大の問題は、適切なPythonコード折り畳みプラグインが見つからないことです。インデントを使用する人気のあるプラグインを2〜3つ見つけましたが、折り畳みが少なすぎるか多すぎる傾向があります。理想的には、これは私がそれを折りたたむために欲しいものです:

  1. すべてのトップレベルクラスをフォールドします。
  2. すべてのトップレベル関数を折ります。
  3. すべてのクラスメソッドを折りたたむ

そしてそれ以上は何もありません。私が現在使用しているプラ​​グインは悪くはありませんが、メソッド内で関数を折りたたむ傾向があります。また、インデントレベルが異なるクラスメソッド内のコードブロックについても混乱します(たとえば、forループの後にさらにコードが続くと、forループの後にコードが折りたたまれます)。

これらの要件を満たすプラグインを知っている人はいますか、それとも自分でプラグインを作成する方法を理解する必要がありますか?

これらは私が過去に試したことです:

5
ipartola

SimpylFold

私はこれをvimのpython)に最適な折りたたみプラグインだと考えています。

それは必要以上のものではありません。クラスと関数/メソッドの定義を適切に折りたたんで、ループと条件付きブロックをそのままにします。

https://github.com/tmhedberg/SimpylFold

3
Hotschke

彼らはあなたのためのプラグインを持っていませんが、 このstackoverflowの質問 にいくつかの有用な答えがあります。

特に、set foldnestmax=2を設定してみてください。これにより、トップレベルの関数で不要な折りたたみが行われますが、それ以外の場合は要件を満たします。 foldnestmaxは、xよりも深く何も折りたたまないことを示しています(xよりも深くすべてを折りたたむと言うfoldlevelとは対照的です)。どこにいても関数を見つけるのに十分スマートな折りたたみが必要な場合は、foldexprを設定する必要があります。

Foldexprを使用する場合、最善の策は、vimscriptで基本的な折りたたみを使用して、コツをつかむまで遊んでから、提供したプラグインの1つのコードをいじくり回すことです。設定している折り目を確認できるように、必ずset foldcolumn=1(またはそれ以上)にしてください。基本的に、classまたはdefが表示された場合にのみフォールドをインクリメントすると思いますが、フォールドがいつ終了するかを決定するためにv:foldstartv:foldlevelが必要になる場合があります。

また、zOを使用してフォールドを再帰的に開いてみてください(したがって、最上位の関数を展開すると、その中のすべてが展開されます)。

2
idbrii