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}ซึ่งจะหมายความว่าฉันต้องใช้เวลาแก้จุดบกพร่อง มีวิธีที่ Vim ทำให้ฉันจำได้ไหม? ยังไงก็ตามฉันมีbib_autocomp.vim ...


ไม่ว่าฉันรู้ :%s/[^ ,]\zs\ze\n\s*[^ }]/,/แต่คุณอาจจะลองอะไรเช่นนี้ที่จะแก้ไขได้:
Sato Katsura

คำตอบ:


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/ %

ถ้าหน้าต่าง QuickFIX :copenไม่เปิดโดยอัตโนมัติก็สามารถเปิดใช้ และ:cnextและ:cpreviousสามารถใช้เพื่อข้ามไปมาระหว่างข้อผิดพลาด


ดีจัง! ฉันสามารถทำให้มันข้ามไปยังข้อผิดพลาดต่อไปเมื่อฉันกด n ได้หรือไม่?
Kristian Nordestgaard

ฉันได้อัปเดตคำตอบเพื่อรวมสิ่งที่คุณขอแล้ว ดูว่ามันเหมาะกับคุณหรือไม่
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%แต่บางทีฉันทำผิด
Kristian Nordestgaard

@KristianNordestgaard .vimrcเราต้องลบ initial ":" โปรดลองmap \q :%s/\v([}"])(\s*\n\s*\S+\s*\=)/\1,\2/e<CR><CR>
JJoao
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.