Laut WIKI können Skripte basierend auf der Syntax gefaltet werden. Hat jemand eine Lösung, um Python-Docstrings zu falten?
Grundsätzlich muss ich nur folden """ text between triple quotation marks """
:
Vielen Dank.
Laut WIKI können Skripte basierend auf der Syntax gefaltet werden. Hat jemand eine Lösung, um Python-Docstrings zu falten?
Grundsätzlich muss ich nur folden """ text between triple quotation marks """
:
Vielen Dank.
Antworten:
Es gibt ein paar funky Faktoren, die wir beim Spielen mit Falten berücksichtigen sollten (sie sind kompliziert und nicht leicht zu verstehen, ohne in die Dokumente zu graben.)
foldmethod
auf syntax
war mein Problem, als ich gegen Fold kämpfte, aber schauen wir uns die Dokumente an, um weitere Informationen zu erhalten.SYNTAX- Fold-Syntax
Eine Falte wird durch Syntaxelemente definiert, die das Argument "fold" haben. |: syn-fold |
Die Faltebene wird durch Verschachtelungsfalten definiert. Das Verschachteln von Falten ist mit 'foldnestmax' begrenzt.
Achten Sie darauf, die richtige Syntaxsynchronisierung anzugeben. Wenn dies nicht richtig gemacht wird, können die Falten von der angezeigten Hervorhebung abweichen. Dies ist besonders relevant, wenn Muster verwendet werden, die mehr als einer Zeile entsprechen. Versuchen Sie im Zweifelsfall die Brute-Force-Synchronisierung:
:syn sync fromstart
Die Hauptsache ist, dass sync fromstart
dies ein nützlicher Helfer ist, wenn Sie einen regulären Ausdruck haben, der in der gesamten Datei übereinstimmt und nur den Header abfangen möchte. In Ihrem Fall sollten Sie dies ignorieren können, aber nur etwas, das Sie beachten sollten.
Da das """
ziemlich vorhersehbar ist, können wir das vereinfachen start
und end
so aussehen:
syn region foldImports start='"""' end='"""' fold keepend
Sowohl für die start
und end
wir versuchen , nur passen auf '"""'
(oder regexp) für die Script - Tags. Ich habe den obigen Code nicht getestet, da ich kein großer Python-Typ bin, aber ich wette, Sie können ihn von hier aus herausfinden.
foldingmethod
auf syntax
in buffer.
fold
die zu den Optionen hinzugefügt wurden, und es funktioniert ziemlich gut für mich.
Hier ist eine bessere Methode, mit der alle Hervorhebungen in Zeichenfolgen in dreifachen Anführungszeichen beibehalten werden:
syn region pythonString matchgroup=pythonTripleQuotes
\ start=+[uU]\=\z('''\|"""\)+ end="\z1" keepend fold
\ contains=pythonEscape,pythonSpaceError,pythonDoctest,@Spell
Fügen Sie dies hinzu ~/.vim/after/syntax/python.vim
.
Dieser Befehl stammt genau von /usr/share/vim/vim74/syntax/python.vim
und hat nur das fold
Schlüsselwort hinzugefügt. Warum bleibt die Hervorhebung erhalten, wenn Dans Antwort dies nicht tut? Der Schlüssel ist, dass dies hat:
contains=pythonEscape,pythonSpaceError,pythonDoctest
Normalerweise wendet Vim nur einen Syntaxbereich an, aber contains=
Sie können damit feststellen, dass ein Syntaxbereich andere Syntaxbereiche enthalten kann .
Es wird auch als hervorgehoben, String
weil es tut:
HiLink pythonString String
Es reicht nicht aus, nur einen Syntaxbereich zu definieren. Sie müssen diesen mit einer Markierungsgruppe verknüpfen .