¿Cómo puede ayudarme Vim a recordar las comas finales en los archivos BibTeX?


11

Edito bastantes archivos BibTeX, y regularmente olvido las comas finales:

Por ejemplo:

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

Verá que olvidé agregar la coma después keywords = {about}, lo que significa que tengo que pasar tiempo depurando. ¿Hay alguna forma en que Vim pueda hacerme recordar? Por cierto, tengo el complemento bib_autocomp.vim ...


No que yo sepa, pero se puede intentar algo como esto para solucionarlo: :%s/[^ ,]\zs\ze\n\s*[^ }]/,/.
— Sato Katsura

Respuestas:


6

Solución rápida y sucia:

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

También puede crear una sintaxis especial para archivos BibTeX utilizando el mismo patrón.

Algunas explicaciones sobre la expresión regular utilizada:

  1. ^\s\+ busca palabras clave sangradas.
  2. \ze detiene la coincidencia de patrones de modo que la siguiente línea no esté marcada.
  3. ,\@<!\n busca líneas que no terminen con una coma.
  4. \n\s\+\w garantiza que haya una nueva entrada después del escaneo actual.

Se puede usar el mismo patrón para saltar entre líneas erróneas usando vimgreplo siguiente:

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

Si la ventana de revisión rápida no se abre automáticamente, se puede abrir con :copen. Y :cnexty :cpreviousse puede utilizar para saltar entre los errores.


¡Esto es bueno! ¿De alguna manera puedo hacer que salte al siguiente error cuando presiono n?
— Kristian Nordestgaard

He actualizado la respuesta para incluir lo que pediste. Mira si te funciona.
— Vitor

0

Una posibilidad es definir un .vimrcatajo para agregar lo que falta,

Ejemplo:

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

y usar \qantes de salir o al depurar.


¿No me funciona? ¿Entiendo E10: \ should be followed by /, ? or & 24,1 60%, pero tal vez lo estoy haciendo mal?
— Kristian Nordestgaard

@KristianNordestgaard, en .vimrctenemos que eliminar ":" inicial. Por favor, intentemap \q :%s/\v([}"])(\s*\n\s*\S+\s*\=)/\1,\2/e<CR><CR>
— JJoao
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.