Jak Vim może mi pomóc zapamiętać przecinki końcowe w plikach BibTeX?

11

Edytuję sporo plików BibTeX i regularnie zapominam o końcowych przecinkach:

Na przykład:

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

Zobaczysz, że zapomniałem dodać przecinek po keywords = {about}, co oznacza, że ​​muszę poświęcić czas na debugowanie. Czy Vim może sprawić, żebym zapamiętał? Nawiasem mówiąc, mam wtyczkę bib_autocomp.vim ...

Kristian Nordestgaard
źródło
Nie dlatego, że wiem, ale można spróbować coś takiego, żeby go naprawić: :%s/[^ ,]\zs\ze\n\s*[^ }]/,/.
Sato Katsura

Odpowiedzi:

6

Szybkie i brudne rozwiązanie:

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

Możesz również utworzyć specjalną składnię dla plików BibTeX przy użyciu tego samego wzorca.

Niektóre objaśnienia zastosowanego wyrażenia regularnego:

  1. ^\s\+ wyszukuje wcięte słowa kluczowe.
  2. \ze zatrzymuje dopasowywanie wzorca, tak że następny wiersz nie jest zaznaczony.
  3. ,\@<!\n wyszukuje wiersze nie kończące się przecinkiem.
  4. \n\s\+\w gwarantuje, że po zeskanowaniu jest nowy wpis.

Ten sam wzór może być używany do przeskakiwania między błędnymi liniami vimgrepw następujący sposób:

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

Jeśli okno szybkiego dostępu nie otworzy się automatycznie, można je otworzyć za pomocą :copen. A :cnexti :cpreviousmoże być używany do skoku pomiędzy błędami.

Vitor
źródło
To jest dobre! Czy mogę w jakiś sposób sprawić, że przeskoczy do następnego błędu po naciśnięciu n?
Kristian Nordestgaard,
Zaktualizowałem odpowiedź, aby uwzględnić to, o co prosiłeś. Sprawdź, czy to działa dla Ciebie.
Vitor,
0

Jedną z możliwości jest zdefiniowanie .vimrcskrótu, aby dodać brakujące,

Przykład:

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

i użyj \qprzed wyjściem lub podczas debugowania.

JJoao
źródło
Nie działa dla mnie? Rozumiem E10: \ should be followed by /, ? or & 24,1 60%, ale może robię to źle?
Kristian Nordestgaard
@KristianNordestgaard, w .vimrcmusimy usunąć początkowe „:”. Spróbujmap \q :%s/\v([}"])(\s*\n\s*\S+\s*\=)/\1,\2/e<CR><CR>
JJoao,