vim "gq}"-Befehl zum Umbrechen von Absätzen und LaTeX

vim "gq}"-Befehl zum Umbrechen von Absätzen und LaTeX

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 \itemdas 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 \itemTags 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 \zein 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 :letstatt 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. \itemIch 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. Vjoder ggVG)
  • 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_groupam Anfang des Skripts aktivieren.

verwandte Informationen