In che modo Vim può aiutarmi a ricordare le virgole finali nei file BibTeX?


11

Modifica parecchi file BibTeX e dimentico regolarmente le virgole finali:

Per esempio:

@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}
 }

Vedrai che dopo ho dimenticato di aggiungere la virgola keywords = {about}, il che significa che devo dedicare del tempo al debug. C'è un modo in cui Vim può farmi ricordare? A proposito, ho il plugin bib_autocomp.vim ...


Non che io sappia, ma si potrebbe provare qualcosa di simile per risolvere il problema: :%s/[^ ,]\zs\ze\n\s*[^ }]/,/.
Sato Katsura,

Risposte:


6

Soluzione rapida e sporca:

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

Puoi anche creare una sintassi speciale per i file BibTeX usando lo stesso modello.

Alcune spiegazioni sull'espressione regolare usata:

  1. ^\s\+ cerca parole chiave rientrate.
  2. \ze interrompe la corrispondenza del motivo in modo tale che la riga successiva non sia contrassegnata.
  3. ,\@<!\n cerca le righe che non terminano con una virgola.
  4. \n\s\+\w garantisce la presenza di una nuova voce dopo la scansione.

Lo stesso modello può essere usato per saltare tra le linee errate usando vimgrepcome segue:

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

Se la finestra di quickfix non si apre automaticamente, può essere aperta utilizzando :copen. E :cnexte :cpreviouspuò essere utilizzato per saltare tra gli errori.


Questo è buono! Posso in qualche modo farlo saltare al prossimo errore quando premo n?
Kristian Nordestgaard,

Ho aggiornato la risposta per includere ciò che hai richiesto. Guarda se va bene per te.
Vitor,

0

Una possibilità è la definizione di un .vimrccollegamento per aggiungere i mancanti,

Esempio:

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

e utilizzare \qprima di partire o durante il debug.


Non funziona per me? Capisco E10: \ should be followed by /, ? or & 24,1 60%, ma forse sto sbagliando?
Kristian Nordestgaard,

@KristianNordestgaard, in .vimrcdobbiamo rimuovere ":" iniziale. Per favore, provamap \q :%s/\v([}"])(\s*\n\s*\S+\s*\=)/\1,\2/e<CR><CR>
JJoao,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.