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.