Wie falten lange Docstrings in Python-Quellcode in VIM?

8

Kennt jemand eine Methode oder vielleicht ein Plug-in? Falten Sie automatisch lange Docstrings in Python? Ich habe Docstrings in meinem Code, der mehrere Seiten umfasst, so ist es schwierig, Paging zu halten durch sie. Der andere schwierige Teil ist, dass es embedded Python gibt Testcode in den Docstrings, so dass sie möglicherweise analysiert werden schwer. Beachten Sie, dass ich das ganze nur automatisch falten muss Docstring, egal was drin ist.

Vielen Dank im Voraus.

    
reckoner 22.06.2010, 14:51
quelle

6 Antworten

7

Dies ist ein bisschen ein schmutziger Hack, aber Sie können durch die Python-Syntaxdatei ( :sp $VIMRUNTIME/syntax/python.vim ) gehen und alle Syntaxregionen für Strings in dreifacher Anführungszeichen finden (nach ''' und """ suchen) und hinzufügen das Schlüsselwort fold an das Ende dieser Anweisungen. Dann setze foldmethod=syntax für Python-Dateien und die Kommentare sollten gefaltet werden.

    
too much php 23.06.2010, 01:04
quelle
2

Ich bin mir nicht sicher, ob es ein Plugin oder eine Automatisierung gibt, aber wenn Sie zf/ eingeben, können Sie nach etwas suchen und es wird zur nächsten Instanz gefaltet. In einem Dokument wie dem folgenden (wobei [] der Cursor ist):

%Vor%

Betrachten Sie zuerst edit2 für den aktualisierten Suchstring!

Wenn Sie den Befehl zf/"""[ENTER] verwenden, sollte alles von der aktuellen Zeile (dem Anfang des Docstrings) bis zum nächsten Vorkommen von """ , das das Ende des Docstrings sein sollte, gefaltet werden.

Ich weiß, dass das keine Automatisierung ist, aber vielleicht hilft es in der Zwischenzeit oder führt Sie auf den richtigen Weg zur Automatisierung. Siehe Edit2 für eine bessere Suchfunktion, obwohl ich immer noch nicht weiß, wie man automatisiert.

Hoffe, das hilft.

Bearbeiten : Als Konsequenz können Sie nach einem beliebigen Docstring mit /"""\_.\{-}""" suchen, obwohl dies auch den Code innerhalb des Docstrings zurückgibt. Um nach einer Funktionsdefinition gefolgt von einem Docstring zu suchen, können Sie /def\_.\{-}"""\_.\{-}""" verwenden, obwohl dies innerhalb des Docstrings zu einem Def führt.

Edit2 : Tatsächlich haben einige mehr mit Regexs dazu geführt: /def.\{-}):\_s*"""\_.\{-}""" , die irgendeine Funktion finden sollten, gefolgt von einem Docstring. Es sucht nach def gefolgt von irgendwelchen Zeichen, dann ): , gefolgt von einem Newline und / oder Leerzeichen, gefolgt von """ , gefolgt von einer beliebigen Anzahl von Zeilen als der nächsten """ , aber stellt immer sicher, dass das zweite Triple-Zitat das ist eine unmittelbar nach der ersten.

    
nearlymonolith 22.06.2010 16:45
quelle
1

Fügen Sie in Ihrer .vimrc-Datei Folgendes hinzu:

%Vor%

Dies wird bei jeder Einrückung automatisch gefaltet, was in Python in Docstrings übersetzt wird. Es funktioniert SEHR SEHR nett. Versuche es. Die obige Antwort ist korrekt, erfordert aber eine Reihe von Tastenanschlägen (blah!)

    
rdegges 22.06.2010 17:06
quelle
0

Du kannst das mit :set foldmethod=marker foldmarker=""",""" machen, denke ich. Ich habe es nicht getestet, aber das sollte es tun. Die Argumente für Foldmarker sind Start- und Endmarker.

    
Daenyth 23.06.2010 01:26
quelle
0

Ich habe vor vielen Jahren ein vimscript-Plugin geschrieben, um genau das zu tun, bin aber nie dazu gekommen, es zu veröffentlichen. Ich habe es als gist veröffentlicht, habe aber auch die Quelle unten eingefügt. Ich habe auch seine Funktionalität für Sublime Text hier repliziert.

%Vor%     
Alec Thomas 14.08.2013 20:34
quelle
0

Meine Lösung beinhaltet SimpylFold . Nachdem ich es mit Vundle installiert habe, lege ich das in meine vimrc Datei:

%Vor%

Das macht alle Docstrings standardmäßig gefaltet, wenn Sie eine Python-Datei öffnen, was super ist.

    
Jacob Wang 18.10.2014 03:27
quelle

Tags und Links