Como o Vim pode me ajudar a lembrar as vírgulas nos arquivos BibTeX?


11

Eu edito alguns arquivos BibTeX e esqueço regularmente as vírgulas finais:

Por exemplo:

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

Você verá que eu esqueci de adicionar a vírgula depois keywords = {about}, o que significa que preciso gastar tempo depurando. Existe uma maneira de o Vim me fazer lembrar? A propósito, eu tenho o plugin bib_autocomp.vim ...


Não que eu saiba, mas você pode tentar algo como isto para corrigi-lo: :%s/[^ ,]\zs\ze\n\s*[^ }]/,/.
Sato Katsura

Respostas:


6

Solução rápida e suja:

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

Você também pode criar uma sintaxe especial para arquivos BibTeX usando o mesmo padrão.

Algumas explicações sobre a expressão regular usada:

  1. ^\s\+ procura por palavras-chave recuadas.
  2. \ze interrompe a correspondência do padrão, de modo que a próxima linha não seja marcada.
  3. ,\@<!\n procura por linhas que não terminam com vírgula.
  4. \n\s\+\w garante que haja uma nova entrada após a verificação no momento.

O mesmo padrão pode ser usado para pular entre linhas erradas usando vimgrepo seguinte:

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

Se a janela do quickfix não abrir automaticamente, poderá ser aberta usando :copen. E :cnexte :cpreviouspode ser usado para saltar entre os erros.


Isso é bom! De alguma forma, posso fazê-lo pular para o próximo erro ao pressionar n?
Kristian Nordestgaard 25/10/2015

Atualizei a resposta para incluir o que você pediu. Veja se isso funciona para você.
Vitor

0

Uma possibilidade é definir um .vimrcatalho para adicionar o valor ausente,

Exemplo:

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

e use \qantes de sair ou ao depurar.


Não está trabalhando para mim? Eu entendo E10: \ should be followed by /, ? or & 24,1 60%, mas talvez eu esteja fazendo errado?
Kristian Nordestgaard 25/10/2015

@KristianNordestgaard, .vimrcprecisamos remover o ":" inicial. Por favor tentemap \q :%s/\v([}"])(\s*\n\s*\S+\s*\=)/\1,\2/e<CR><CR>
JJoao
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.