Як Vim допоможе мені запам'ятати кінцеві коми у файлах BibTeX?


11

Я редагую досить багато файлів BibTeX, і я регулярно забуваю кінцеві коми:

Наприклад:

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

Ви побачите, що я забув додати кому після keywords = {about}, що означатиме, що мені доведеться витратити час на налагодження. Чи є спосіб, яким Вім може змусити мене запам'ятати? До речі, у мене є плагін bib_autocomp.vim ...


Чи не те, що я НЕ знаю, але ви могли б спробувати що - щось на зразок цього , щоб виправити це: :%s/[^ ,]\zs\ze\n\s*[^ }]/,/.
Сато Кацура

Відповіді:


6

Швидке і брудне рішення:

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

Ви також можете створити спеціальний синтаксис для файлів BibTeX, використовуючи той самий шаблон.

Деякі пояснення щодо використовуваного регулярного виразу:

  1. ^\s\+ шукає відступні ключові слова.
  2. \ze зупиняє узгодження шаблону таким чином, що наступний рядок не позначений.
  3. ,\@<!\n шукає рядки, які не закінчуються комою.
  4. \n\s\+\w гарантує, що після сканування буде новий запис.

Таку ж схему можна використовувати для переходу між помилковими лініями, використовуючи vimgrepнаступне:

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

Якщо вікно швидкого виправлення не відкриється автоматично, його можна відкрити за допомогою :copen. А :cnextта :cpreviousможе бути використано для переходу між помилками.


Це добре! Чи можу я якось змусити перейти до наступної помилки, коли натискаю n?
Крістіан Нордестгаард

Я оновив відповідь, щоб включити те, про що ви просили. Подивіться, чи працює він для вас.
Vitor

0

Однією з можливостей є визначення .vimrcярлика для додання відсутнього,

Приклад:

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

і використовувати \qперед відходом або під час налагодження.


Не працює для мене? Я розумію E10: \ should be followed by /, ? or & 24,1 60%, але, можливо, я роблю це неправильно?
Крістіан Нордестгаард

@ KristianNordestgaard, .vimrcми повинні видалити початкові ":". Спробуйтеmap \q :%s/\v([}"])(\s*\n\s*\S+\s*\=)/\1,\2/e<CR><CR>
JJoao
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.