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


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.


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.