เป็นกลุ่ม - ลบไฟล์ SWP โดยอัตโนมัติหลังจากการกู้คืนจะไม่เปลี่ยนไฟล์ต้นฉบับ


9

เมื่อกระบวนการ Vim ถูกยกเลิกอย่างกะทันหัน (เช่นระบบล่ม) มันจะทิ้งไฟล์ SWP การเปิดไฟล์ต้นฉบับใน Vim จะให้ตัวเลือกในการกู้คืน ส่วนใหญ่เวลากู้คืนไฟล์จะเหมือนกับไฟล์ที่บันทึกเพราะฉันมีนิสัยการบันทึกบ่อย จากนั้นพูดว่า:

Recovery completed. Buffer contents equals file contents. 
You may want to delete the .swp file now.

แน่นอนฉันต้องการลบไฟล์. swp ทันที!

ฉันจะให้ Vim ลบไฟล์ SWP โดยอัตโนมัติในกรณีนี้ได้อย่างไร

ดูเหมือนจะไม่มีการตั้งค่าในตัวเพื่อทำสิ่งนี้ดังนั้นฉันกำลังมองหากิจกรรมบันทึกข้อความอัตโนมัติที่เหมาะสม

วิธีหนึ่งที่ฉันพบคือ:e #หลังจากข้อความซึ่งทำให้ตัวเลือกการสลับมีอยู่ปรากฏขึ้นอีกครั้งจากนั้นฉันสามารถ "ลบ" แต่ฉันไม่ควรทำตามขั้นตอนพิเศษเหล่านั้นในแต่ละครั้ง


ขอบคุณ! ฉันพบ:e #เคล็ดลับของคุณแม้ว่าจะไม่เหมาะ แต่ก็ยังมีประโยชน์มากกว่าคำตอบปัจจุบันด้านล่าง :-)
RayLuo

คำตอบ:


5

หมายเหตุ: คุณยังไม่ได้พูดว่าคุณใช้ระบบปฏิบัติการใดอยู่ ข้อมูลต่อไปนี้ใช้งานได้กับ Unix shell แต่ถ้าใช้ Windows คุณสามารถดาวน์โหลด Cygwin ที่ไม่มีกระดูกหรือเชลล์อื่น ๆ ได้

ฉันเคยทำเช่นเดียวกับคุณเรียกใช้:eเพื่อเปิดไฟล์เดียวกันอีกครั้งเพื่อรับตัวเลือกในการลบไฟล์การกู้คืน หลังจากคอมพิวเตอร์รีสตาร์ทหรือเกิดข้อผิดพลาดฉันจะล้างไฟล์กู้คืน Vim ส่วนที่เหลือทั้งหมดโดยใช้vim -rไฟล์ swap และปล่อยให้การกู้คืนดำเนินการต่อ

เมื่อไฟล์ยังไม่เปลี่ยนแปลง

หากไฟล์ไม่เปลี่ยนแปลงฉันต้องการลบไฟล์กู้คืนทันที มันจะดีถ้า Vim สามารถทำสิ่งนี้ได้โดยอัตโนมัติ แต่น่าเสียดายที่มันไม่เป็นเช่นนั้น

เมื่อไฟล์มีการเปลี่ยนแปลง

หากไฟล์มีการเปลี่ยนแปลงฉันเรียกใช้DiffOrigคำสั่งเพื่อเปรียบเทียบความแตกต่างระหว่างต้นฉบับและเวอร์ชันที่กู้คืน หากฉันพอใจกับการเปลี่ยนแปลงจากไฟล์กู้คืนฉันจะออกจากการบันทึกไฟล์ด้วย:xคำสั่ง :q!ถ้าไม่ฉันทิ้งเปลี่ยนแปลงกู้คืนโดยการเลิกสูบบุหรี่ด้วย หากไฟล์กู้คืนไม่ได้เชื่อมโยงกับไฟล์ที่บันทึกไว้เช่น.swpฉันมักจะใช้:w filenameเพื่อบันทึกบัฟเฟอร์ที่กู้คืนไปยังไฟล์ที่มีชื่อไฟล์

ผู้ช่วย DiffOrig

ฉันเพิ่มคำสั่งDiffOrigลงในของฉัน.vimrcเพื่อให้พร้อมใช้งานเสมอ

command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis

เชลล์สคริปต์

ฉันรันสคริปต์ต่อไปนี้ในเชลล์เพื่อค้นหา swap-file ทุกไฟล์ในแผนผังไดเรกทอรีปัจจุบัน จากนั้นไฟล์ swap แต่ละไฟล์จะถูกใช้เพื่อเปิด Vim ใน“ โหมดการกู้คืน”และจะถูกลบหลังจากที่ Vim ถูกปิด

find . -type f -name '.*.sw?' -exec vim -r "{}" -c DiffOrig \; -exec rm -iv "{}" \;

rm -iตัวเลือกที่ต้องมีการยืนยัน ( y) เพื่อลบไฟล์ หากคุณมั่นใจมากขึ้นและต้องการเพิ่มความเร็วของกระบวนการ

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