Python docstringの折りたたみ


8

WIKIによると、スクリプトは構文に基づいて折りたたむことができます。誰かがPython docstringを折り畳むための解決策を持っていますか?

基本的に、私が必要なのは次のように折り畳むことだけです""" text between triple quotation marks """

ここに画像の説明を入力してください

ありがとう。


1
あなたはフォールドしますか唯一のドキュメンテーション文字列、またはドキュメンテーション文字列を加えて、 Pythonコードを折りたたみますか?
Martin Tournoij 2016年

@Carpetsmoker、単なるdocstrings。これまでのところ、本格的なIDEのような信頼性の高い pythonフォールディングを実現することはできませんでした。
asv 2016年

回答:


3

フォールドで遊ぶときに考慮すべきいくつかのファンキーな要素があります(それらは複雑であり、ドキュメントを掘り下げることなく理解するのは簡単ではありません。)

  • 設定foldmethodするにはsyntax、私が倍に戦っていたとき、私の問題だったが、詳細はドキュメントを見てみましょう。..

構文 フォールド構文

フォールドは、 "fold"引数を持つ構文アイテムによって定義されます。|:syn-fold |

折りたたみレベルは、折りたたみをネストすることによって定義されます。フォールドのネストは「foldnestmax」で制限されます。

適切な構文同期を指定するように注意してください。これが正しく行われない場合、折り目が表示された強調表示と異なる場合があります。これは、複数の行に一致するパターンを使用する場合に特に関係があります。疑問がある場合は、ブルートフォース同期を使用してみてください。

    :syn sync fromstart

注意すべき主な点は、sync fromstartこれはファイル全体で一致する正規表現があり、ヘッダーのみをキャッチしたい場合に役立つヘルパーです。あなたの場合、あなたはこれを無視することができるはずですが、知っておくべきことだけです。

  • トップダウン正規表現スキャン

以来"""、私たちは、簡素化することができ、かなり予測可能であるstartend、このような何かを見て:

syn region foldImports start='"""' end='"""' fold keepend

両方のためにstartend私達はちょうど上の一致しようとしている'"""'(または正規表現)スクリプトタグのため。私はあまりPythonの人ではないので、上のコードはテストしませんでしたが、ここから理解できると思います。


ありがとう!〜/ .vim / after / syntax / python.vimに行を追加し、手動でバッファに設定foldingmethodすると機能syntaxします。
asv 2016年

...しかし、docstringsハイライトを壊します。人生は厳しいです。
asv 2016年

くそー..私は個人的に機能への私の感情に関する冒涜的なコメントで私の設定で折りたたみをオフにしました:| うまくいけば、もう少し正規表現のハッキングで問題が解決する可能性があります(IDがプラグイン[grep foldキーワード]にほぼ一致する場合)
Dan Bradbury

私は、stackoverflow.com / a / 16051080/455009 で指定された構文領域定義を使用して、通常の三重引用符付き文字列に影響を与えることなく、コメントとして強調表示されるdocstringをターゲットにしました。foldオプションに追加されたものを試してみてください、そしてそれは私にはかなりうまくいきます。
16

1

三重引用符で囲まれた文字列内のすべての強調表示を保持する、より良い方法を次に示します。

syn region  pythonString matchgroup=pythonTripleQuotes 
      \ start=+[uU]\=\z('''\|"""\)+ end="\z1" keepend fold
      \ contains=pythonEscape,pythonSpaceError,pythonDoctest,@Spell

これをに追加し~/.vim/after/syntax/python.vimます。

このコマンドは正確に取得され/usr/share/vim/vim74/syntax/python.vimfoldキーワードのみが追加されています。ダンの回答がハイライトを保持しないのに、なぜこれがハイライトを保持するのですか?重要なのは、これには以下が含まれるということです。

contains=pythonEscape,pythonSpaceError,pythonDoctest

通常、Vimは1つの構文領域のみを適用しcontains=ますが、構文領域他の構文領域を含めることができることわかります。

また、次のString理由により、として強調表示されています。

HiLink pythonString           String

構文領域を定義するだけでは不十分です。これをハイライトグループにリンクする必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.