Bagaimana Vim dapat membantu saya mengingat tanda koma pada file BibTeX?

11

Saya mengedit beberapa file BibTeX, dan saya secara teratur melupakan tanda koma:

Sebagai contoh:

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

Anda akan melihat bahwa saya lupa menambahkan koma setelahnya keywords = {about}, yang berarti saya harus menghabiskan waktu debugging. Apakah ada cara Vim bisa membuat saya ingat? Omong-omong, saya punya plugin bib_autocomp.vim ...

Kristian Nordestgaard
sumber
Bukan berarti saya tahu, tapi Anda bisa mencoba sesuatu seperti ini untuk memperbaikinya: :%s/[^ ,]\zs\ze\n\s*[^ }]/,/.
Sato Katsura

Jawaban:

6

Solusi cepat dan kotor:

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

Anda juga dapat membuat sintaks khusus untuk file BibTeX menggunakan pola yang sama.

Beberapa penjelasan tentang ekspresi reguler yang digunakan:

  1. ^\s\+ mencari kata kunci indentasi.
  2. \ze menghentikan pencocokan pola sedemikian rupa sehingga baris berikutnya tidak ditandai.
  3. ,\@<!\n mencari baris yang tidak berakhir dengan koma.
  4. \n\s\+\w menjamin bahwa ada entri baru setelah sedang dipindai.

Pola yang sama dapat digunakan untuk melompat di antara garis yang salah menggunakan vimgrepsebagai berikut:

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

Jika jendela perbaikan cepat tidak terbuka secara otomatis, itu bisa dibuka menggunakan :copen. Dan :cnextdan :cpreviousdapat digunakan untuk melompat di antara kesalahan.

Vitor
sumber
Ini bagus! Bisakah saya membuatnya melompat ke kesalahan berikutnya ketika saya menekan n?
Kristian Nordestgaard
Saya telah memperbarui jawaban untuk memasukkan apa yang Anda minta. Lihat apakah itu bekerja untuk Anda.
Vitor
0

Salah satu kemungkinan adalah mendefinisikan .vimrcpintasan untuk menambahkan yang hilang,

Contoh:

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

dan gunakan \qsebelum pergi atau ketika debugging.

Joao
sumber
Tidak bekerja untukku? Saya mengerti E10: \ should be followed by /, ? or & 24,1 60%, tapi mungkin saya salah melakukannya?
Kristian Nordestgaard
@KristianNordestgaard, .vimrckita harus menghapus inisial ":". Silakan cobamap \q :%s/\v([}"])(\s*\n\s*\S+\s*\=)/\1,\2/e<CR><CR>
JJoao