Wie kann Vim mir helfen, mich an die nachgestellten Kommas in BibTeX-Dateien zu erinnern?

11

Ich bearbeite einige BibTeX-Dateien und vergesse regelmäßig die nachfolgenden Kommas:

Beispielsweise:

@Book{cooke2015british,
 author = {Cooke, Lez},
 title = {British Television Drama},
 publisher = {Palgrave on behalf of the British Film Institute},
 year = {2015},
 keywords = {about}
 address = {London},
 isbn = {978-1844576234}
 }

Sie werden sehen, dass ich vergessen habe, das Komma danach hinzuzufügen keywords = {about}, was bedeutet, dass ich Zeit mit dem Debuggen verbringen muss. Gibt es eine Möglichkeit, wie Vim mich daran erinnern kann? Übrigens habe ich das Plugin bib_autocomp.vim ...

Kristian Nordestgaard
quelle
Nicht dass ich wüsste, aber Sie könnten so etwas versuchen, um es zu beheben : :%s/[^ ,]\zs\ze\n\s*[^ }]/,/.
Sato Katsura

Antworten:

6

Schnelle und schmutzige Lösung:

:match Error /^\s\+.*,\@<!\ze\n\s\+\w/

Sie können auch eine spezielle Syntax für BibTeX-Dateien mit demselben Muster erstellen.

Einige Erklärungen zum verwendeten regulären Ausdruck:

  1. ^\s\+ sucht nach eingerückten Schlüsselwörtern.
  2. \ze Stoppt den Mustervergleich, sodass die nächste Zeile nicht markiert ist.
  3. ,\@<!\n sucht nach Zeilen, die nicht mit einem Komma enden.
  4. \n\s\+\w garantiert, dass nach dem aktuell gescannten Eintrag ein neuer Eintrag vorhanden ist.

Das gleiche Muster kann verwendet werden, um vimgrepwie folgt zwischen fehlerhaften Zeilen zu springen :

:vimgrep /^\s\+.*,\@<!\ze\n\s\+\w/ %

Wenn das Quickfix-Fenster nicht automatisch geöffnet wird, kann es mit geöffnet werden :copen. Und :cnextund :cpreviouskann verwendet werden, um zwischen Fehlern zu springen.

Vitor
quelle
Das ist gut! Kann ich es irgendwie schaffen, zum nächsten Fehler zu springen, wenn ich n drücke?
Kristian Nordestgaard
Ich habe die Antwort aktualisiert, um das aufzunehmen, wonach Sie gefragt haben. Sehen Sie, ob es für Sie funktioniert.
Vitor
0

Eine Möglichkeit besteht darin, eine .vimrcVerknüpfung zu definieren , um die fehlenden hinzuzufügen,

Beispiel:

:map \q  :%s/\v([}"])(\s*\n\s*\S+\s*\=)/\1,\2/<CR>

und \qvor dem Verlassen oder beim Debuggen verwenden.

JJoao
quelle
Arbeitest du nicht für mich? Ich verstehe E10: \ should be followed by /, ? or & 24,1 60%, aber vielleicht mache ich es falsch?
Kristian Nordestgaard
@KristianNordestgaard, in müssen .vimrcwir das anfängliche ":" entfernen. Bitte versuchen Siemap \q :%s/\v([}"])(\s*\n\s*\S+\s*\=)/\1,\2/e<CR><CR>
JJoao