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 ...

Kristian Nordestgaard
fonte
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.

Vitor
fonte
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.

JJoao
fonte
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