เป็นกลุ่มเริ่มต้นที่จะบันทึกบัฟเฟอร์เมื่อได้รับสัญญาณ TERM


1

ฉันใช้ vim หลายอินสแตนซ์ ปัจจุบันฉันใช้ฟังก์ชั่นทุบตี

kv(){ a=($(pgrep vim)); kill ${a[@]}; }  

เพื่อยุติอินสแตนซ์ที่เรียกใช้ทั้งหมดของ vim สิ่งนี้มีข้อเสียเปรียบในการออกจากไฟล์. swp ที่ไม่แน่นอนที่ใดก็ตามที่กลุ่มถูกฆ่าด้วยการเปลี่ยนแปลงที่ไม่ได้บันทึก มีวิธีตั้งค่ากลุ่มให้บันทึกบัฟเฟอร์ของมันหรือไม่ถ้ามันส่งสัญญาณ kill?


ฉันไม่ได้ลองตัวเองดังนั้นฉันจึงไม่ว่ามันจะทำในสิ่งที่คุณต้องการ แต่:help VimLeaveและ:help v:dyingแนะนำว่าเหตุการณ์ VimLeave จะถูกกระตุ้นเมื่อใดก็ตามที่ Vim ออกแม้จะเป็นสัญญาณ
garyjohn

คำตอบ:


2

คุณไม่สามารถดักจับสัญญาณ TERM ได้เป็นพิเศษ แต่คุณสามารถ "จับ" สัญญาณใด ๆ ก็ตามที่เปิดโอกาสให้ Vim ได้อย่างงดงาม ดูตัวอย่างใน:

:help v:dying

คุณสามารถแก้ไข:echoคำสั่งในตัวอย่างเป็นสิ่งที่ต้องการ:wqall(ดู " :help :wqall")

ฉันไม่แนะนำสิ่งนี้ แต่ คุณสามารถเขียนไฟล์ (บน) ได้อย่างง่ายดายเมื่อคุณไม่ต้องการให้มันเกิดขึ้น


ฉันขอขอบคุณทั้งสำหรับความช่วยเหลือและความแข็งแกร่งของสิ่งเหล่านั้น: รายการความช่วยเหลือที่ฉันเพิ่ม
user985675

0

VimLeaveฉันคิดว่ามันเป็นไปไม่ได้ที่จะบันทึกในบัฟเฟอร์ ฉันลองใช้รหัสด้านล่าง

autocmd VimLeave * :!touch ~/logs/vim-leave
autocmd VimLeave * :wall

รหัสนี้สำเร็จtouchแล้ว แต่ไม่ได้บันทึกบัฟเฟอร์ ฉันพบกระทู้นี้จากรายชื่อผู้รับจดหมายเป็นกลุ่ม

Vim เรียกใช้ฟังก์ชัน deathtrap () ซึ่งปิดบัฟเฟอร์ทั้งหมดแล้วเรียกใช้ getout () ซึ่งการเติมข้อความอัตโนมัติทั้งหมดจะถูกประมวลผล (BufWinLeave, BufUnLoad, VimLeavePre และสุดท้าย VimLeave) แต่ในเวลานั้นคุณไม่สามารถป้องกันบัฟเฟอร์ได้อีกต่อไป

ตามเวลา Vim จัดการกับสัญญาณที่ร้ายแรงมันจะไม่เรียกฟังก์ชันที่ไม่ปลอดภัยอีกต่อไป (เช่นจัดสรรหน่วยความจำ) ดังนั้นฉันสงสัยว่ามันจะเป็นไปได้ที่จะบรรลุสิ่งที่คุณต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.