Wie kann ich erreichen, dass dieser Befehl Dinge wie diese nicht umschließt \item
?
Zum Beispiel:
\begin{enumerate}
\item this might be a long paragraph that spans multiple lines
\item blah
\end{enumerate}
Wenn ich „gq}“ mit dem Cursor auf dem ersten Element (erster Buchstabe von this
) ausführe, wird diese Ausgabe erzeugt:
\begin{enumerate}
\item this might be a long
paragraph that spans multiple
lines \item blah \end{enumerate}
Das ist was ich will:
\begin{enumerate}
\item this might be a long
paragraph that spans multiple
lines
\item blah
\end{enumerate}
Wenn ich Vim irgendwie dazu bringen kann, zu erkennen, dass das Token \item
das Ende eines Absatzes anzeigt, wird es meiner Meinung nach richtig funktionieren. Aber wie gehe ich dabei vor?
Antwort1
Ich denke, Sie können dies tun, indem Sie die Option „formatlistpat“ so einstellen, dass die Absatztrennungs-Tags eingeschlossen werden. Sie müssen „n“ in „formatoptions“ einschließen, damit dies funktioniert. Siehe
:help 'formatlistpat'
:help 'formatoptions'
Zum Beispiel mit
:set formatlistpat=^\\s*\\\\\\(end\\\\|item\\)\\>
:set formatoptions+=n
:set textwidth=40
die Formatierung Ihres Beispiels ergibt Folgendes:
\begin{enumerate} \item Dies könnte ein langer Absatz sein das sich über mehrere Zeilen erstreckt \item bla \end{enumerate}
Beachten Sie, dass die zweite Zeile des ersten Elements um die Länge des \item
Tags eingerückt ist. Es ist also nicht genau das, was Sie wollten, aber es könnte nahe genug dran sein. Sie können auch wie \ze
in der Hilfe beschrieben experimentieren, um zu sehen, ob Sie Vim dazu bringen können, das Tag zu erkennen, ohne die nachfolgenden Zeilen einzurücken. Das habe ich nicht versucht.
Aktualisieren
Das „formatlistpat“ ist etwas klarer und einfacher zu bearbeiten, wenn es mit :let
statt festgelegt wird :set
.
:let &l:flp = '^\s*\\\(Ende\|Element\)\>'
Der l:
Abschnitt gibt an, dass es sich um eine pufferlokale Einstellung handelt.
Aktualisieren
So reduzieren Sie den Einzug auf 1 Zeichen:
:let &l:flp = '^\s*\\\ze\(Ende\|Element\)\>'
Beachten Sie, dass der Einzug diese Zahl + 1 beträgt, wenn vor dem ein Leerzeichen steht. \item
Ich weiß nicht, ob es möglich ist, den Einzug mit dem auf 0 zu reduzieren \ze
.
Antwort2
Hier ist eine Lösung, die für mich funktioniert. Ich habe ein externes Skript geschrieben, um die Formatierung von Latex-Text zu handhaben (https://github.com/elmanuelito/par-latex)
Anwendungsbeispiel in vim:
- Wählen Sie einen Text aus (z. B.
Vj
oderggVG
) - Geben Sie ":!par-latex" ein (die Vim-Befehlszeile sieht folgendermaßen aus:
'<,'>!par-latex
) - Typ eingeben
Mit den Standardoptionen wird Ihr Beispiel verarbeitet, wenn Sie den Text in der Itemize-Umgebung auswählen. Damit es funktioniert, wenn Sie mehr Text auswählen, müssen Sie die Option format_inside_group
am Anfang des Skripts aktivieren.