ข้อความนี้ค่อนข้างสำคัญหากคุณสนใจที่จะไม่สูญเสียข้อความที่คุณไม่ได้บันทึก ไม่ควรถือว่าน่ารำคาญและไม่ควรทำให้คุณลบไฟล์ swap หรือกำหนดค่าvim
ให้รันโดยไม่ต้องรีบ
ไฟล์ใด ๆ ที่คุณแก้ไขvim
จะมีไฟล์สลับที่เกี่ยวข้องในขณะที่คุณแก้ไขซึ่งvim
ใช้ในการติดตามการเปลี่ยนแปลง เมื่อคุณออกจากการแก้ไขไฟล์vim
จะยกเลิกไฟล์ swap ที่เกี่ยวข้องโดยอัตโนมัติ ดังนั้นการมีอยู่ของไฟล์สว็อปและความพยายามที่จะเขียนทับไฟล์ต้นฉบับของคุณควรเป็นสาเหตุของการพิจารณาและการดำเนินการที่เหมาะสม
ทั้งสองสถานการณ์ที่นำเสนอในข้อความ ( E325: ATTENTION Found a swap file
) เป็นจริงค่อนข้างทั่วไป: (1)อย่างใดอย่างหนึ่งอีกvim
โปรแกรมแก้ไขไฟล์เดียวกันที่คุณกำลังพยายามที่จะแก้ไข (มันจริงอาจจะเป็นคนอื่น - ในกรณีที่มันจริงๆจะไม่ทำให้รู้สึก เพื่อลบไฟล์ swap อย่างสุ่มสี่สุ่มห้า - หรืออาจเป็นคุณในหน้าต่างเทอร์มินัลหรือแท็บอื่น) หรือ(2)vim
เซสชันก่อนหน้าล้มเหลว (ส่วนใหญ่เกิดขึ้นเมื่อคุณแก้ไขจากระยะไกลและเซสชันเครือข่ายขาด - ในกรณีที่เซสชัน vim ไม่ได้ออกตามปกติและ.swp
ไฟล์ยังคงอยู่เบื้องหลังตัวอย่างอื่นของสถานการณ์จำลองที่สองนี้คือคุณได้ปิดหน้าต่างเทอร์มินัลหรือแท็บที่บังเอิญvim
เซสชันหรือแบ็คกราวน์อยู่โดยไม่ตั้งใจ)
เมื่อฉันพบข้อความนี้ฉันคิดก่อนว่าฉันจะแก้ไขไฟล์นี้ในหน้าต่างเทอร์มินัลหรือแท็บอื่นหรือไม่เพราะปกติแล้วฉันจะทำงานกับหน้าต่างเทอร์มินัลหลายอันที่มีแท็บหลายแท็บแต่ละอัน:
หากฉันรู้ว่าฉันกำลังแก้ไขในที่อื่นและสามารถกลับไปที่เดิมได้ฉันก็กดq
ปุ่มไปที่(Q)uit
เซสชันเพิ่มเติมนี้และกลับไปแก้ไขผ่านvim
เซสชันเดิม
บางครั้งถ้าฉันไม่แน่ใจทั้งหมดฉัน(Q)uit
แล้วเรียกใช้jobs
เพื่อตรวจสอบว่าฉันกำลังทำงานvim
ในสถานีเดียวกันแน่นอน; หากไม่มีอะไรเกิดขึ้นฉันps -ef | grep vim
จะตรวจสอบว่าฉันทำงานอยู่vim
ที่อื่นหรือไม่ (เช่นในหน้าต่างเทอร์มินัลหรือแท็บอื่น) ประเด็นคือฉันพยายามที่จะทำการแก้ไขต่อผ่านvim
เซสชันเดิมเสมอ
ถ้าผมมั่นใจว่าผมไม่สามารถกลับไปแก้ไขเซสชั่นเดิมและฉันกำลังนำเสนอยังคงอยู่กับตัวเลือกต่อไปแล้วผมก็กดไปr
(R)ecover
Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
กดr
คุณจะเห็นข้อความดังนี้:
Swap file ".notes.swp" already exists!
"notes" 18L, 46C
Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.
Press ENTER or type command to continue
ในทางกลับกันถ้าฉันไม่ต้องเผชิญหน้ากับตัวเลือกเหล่านั้นอีกต่อไปเพราะฉันอยู่ที่พรอมต์เชลล์แล้วฉันก็รันvim
ด้วย-r
ตัวเลือกดังต่อไปนี้:
vim -r notes
ข้อความผลลัพธ์จะคล้ายกัน:
Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.
Press ENTER or type command to continue
ทั้งสองวิธีกดENTER
เพื่อดำเนินการต่อและคุณจะเห็นไฟล์ของคุณ
หมายเหตุ: หาก Vim มีข้อสงสัยเกี่ยวกับสิ่งที่พบก็จะให้ข้อความแสดงข้อผิดพลาดและแทรกบรรทัดด้วย "???" ในข้อความ หากคุณเห็นข้อความแสดงข้อผิดพลาดขณะกู้คืนให้ค้นหาในไฟล์สำหรับ "???" เพื่อดูว่ามีอะไรผิดปกติ คุณอาจต้องการตัดและวางเพื่อให้ได้ข้อความที่คุณต้องการ
คำพูดที่พบบ่อยที่สุดคือ "??? LINES MISSING" ซึ่งหมายความว่า Vim ไม่สามารถอ่านข้อความจากไฟล์ต้นฉบับ สิ่งนี้อาจเกิดขึ้นได้หากระบบขัดข้องและบางส่วนของไฟล์ต้นฉบับไม่ได้รับการบันทึก
ที่กล่าวว่าฉันไม่เคยเห็น???
เครื่องหมายเหล่านั้นดังนั้นนี่จะเป็นเหตุการณ์ที่เกิดขึ้นได้ยาก
ต่อไปให้บันทึก (เช่นเขียน) เนื้อหาไปยังไฟล์อื่น (โดยปกติฉันจะต่อท้าย "2" ต่อท้ายชื่อไฟล์ต้นฉบับ):
:w notes2
ถัดไปบังคับปิดvim
เซสชันนี้:
:q!
ถัดไปเปรียบเทียบสองไฟล์:
diff notes notes2
หากdiff
ไม่มีการคืนค่านั่นหมายความว่าไม่มีความแตกต่างและปลอดภัยที่จะลบทั้งไฟล์ swap และไฟล์ที่สอง:
rm .notes.swp notes2
ถึงตอนนี้เปิดไฟล์ต้นฉบับและดำเนินการต่อราวกับว่าไม่เคยมีปัญหา:
vim notes
หากdiff
ส่งคืนบางสิ่งนั่นหมายถึงไฟล์ต้นฉบับ (ผ่านไฟล์สลับ) มีการเปลี่ยนแปลงที่บันทึกไว้ในการกู้คืนด้วยไฟล์ที่สอง
เนื่องจากการเปลี่ยนแปลงเหล่านั้นถูกบันทึกในไฟล์ที่สองคุณจึงปลอดภัยในการลบไฟล์ swap และเขียนทับไฟล์ต้นฉบับด้วยไฟล์ที่สอง:
rm .notes.swp
remove .notes.swp? y
mv notes2 notes
overwrite notes? (y/n [n]) y
ถึงตอนนี้เปิดไฟล์ต้นฉบับและดำเนินการต่อราวกับว่าไม่เคยมีปัญหา:
vim notes
ดูเหมือนว่าจะใช้งานได้มากมาย แต่เมื่อคุณคุ้นเคยกับขั้นตอนการทำงานจะใช้เวลาสูงสุด 20 วินาที