แนวปฏิบัติที่ดีที่สุดสำหรับไฟล์ VIM?


14

ทุกครั้งที่ฉันตัดเซสชันในกลุ่มโดยการสูญเสียการเชื่อมต่อของฉันฉันค่อนข้างเต็มไปด้วยความเบื่อหน่าย (แต่ฉันยังคงใช้ vim ต่อไป ... สิ่งที่นักทำโทษตนเองอย่างฉันจะต้องเป็น) เพราะเมื่อฉันเปิดไฟล์อีกครั้ง ไฟล์กำลังรอที่จะยิงที่ทำลายงานของฉัน แนวทางปฏิบัติที่ดีที่สุดในการทำงานกับไฟล์ vim swap คืออะไร คุณเพิ่งจะเลือกใหม่ล่าสุด? หากไฟล์ทำงานตามที่คุณคาดหวังคุณเพียงแค่ลบไฟล์สลับหรือไม่ คุณจะกำจัดพวกเขาได้อย่างไร


5
มีการสลับไฟล์เพื่อปกป้องงานของคุณ พิจารณาใช้หน้าจอ gnu

1
ฉันไม่ต้องการปิดฟังก์ชั่น มันน่ารำคาญ แต่ก็มีประโยชน์
leeand00

1
ฉันแค่อยากจะรู้วิธีการใช้อย่างถูกต้อง
leeand00

2
@DrEval ฉันใช้ tmux
leeand00

2
หากคุณใช้ tmux คุณไม่จำเป็นต้องกังวลเกี่ยวกับการขาดการเชื่อมต่อของคุณ: เพียงแค่แนบเซสชันของคุณอีกครั้งเมื่อคุณเชื่อมต่อใหม่ นอกจากนี้คุณยังอาจจะสนใจในร็อกและ @ ChristianBrabandt ของการกู้คืนปลั๊กอิน
รวย

คำตอบ:


24

อย่าตกใจ!

การกู้คืนไฟล์นั้นปลอดภัยเสมอเพราะ vim ไม่เคยเขียนการเปลี่ยนแปลงใด ๆ จนกว่าคุณจะเขียนเอง ดังนั้นการกู้คืนจากไฟล์สลับแล้วปิดโดยไม่บันทึกจะไม่เปลี่ยนแปลงอะไรเลย

จัดระเบียบไฟล์แลกเปลี่ยนของคุณ:

รับคำสั่งให้ใส่ไฟล์ swap ทั้งหมดของคุณไว้ในที่เดียวกันดังนั้นคุณจะรู้ว่าพวกเขาอยู่ที่ไหน:

set directory^=$HOME/.vim/swap//

หรือทุกที่ที่คุณต้องการ ใช้//ที่ส่วนท้ายของชื่อไฟล์ทำให้ vim ใช้ไฟล์พา ธ สัมบูรณ์สำหรับชื่อไฟล์สลับเพื่อให้คุณไม่ได้รับการชนกันของชื่อ ตรวจสอบให้แน่ใจว่ามีไดเรกทอรีอยู่หรือไม่ใช้เป็นกลุ่ม (มันจะไม่สร้างให้คุณ)

หมายเหตุ: ใช้งานได้เฉพาะกับตัวแปรสภาพแวดล้อมเท่านั้นหากคุณต้องการใช้ตัวแปร vimscript เราจำเป็นต้องใช้:executeเวทย์มนตร์:

execute "set directory^=".my_vim_home_var."/swap//"

ความแตกต่างที่แตกต่าง:

:DiffOrigความช่วยเหลือที่เป็นกลุ่มแสดงให้เห็นคำสั่งที่มีประโยชน์มากที่จะใช้ในสถานการณ์เช่นนี้: มันไม่ได้เป็นคำสั่งที่เป็นกลุ่มเริ่มต้นเพื่อคัดลอกการดำเนินงานจากการ:h :DiffOrigเข้า vimrc ของคุณ (มันยังอยู่ใน$VIMRUNTIME/defaults.vimถ้าคุณมี vim8) ตอนนี้คุณสามารถกู้คืนไฟล์และเรียกใช้ DiffOrig เพื่อรับ vimdiff ของสิ่งที่เปลี่ยนแปลงจากเวอร์ชันที่ไม่ได้แก้ไข

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

คำสั่งที่มีประโยชน์:

:swapname: get ชื่อ vim ใช้สำหรับสลับไฟล์สำหรับบัฟเฟอร์ปัจจุบัน ( :h :swapname) :recover: กู้คืนไฟล์ที่เลือกเช่นเดียวกับเมื่อคุณเริ่ม vim และกดR( :h :recover)

ลองดูความช่วยเหลือ:

เป็นกลุ่มที่มีทั้งส่วนของคู่มือการใช้ในการกู้คืน: :usr_11.txt
กลุ่มความช่วยเหลือของการอ้างอิงในแฟ้มแลกเปลี่ยน: :h swap-file, h recovery
ช่วยเหลือตัวเลือกไดเรกทอรี (สำหรับการตั้งค่าที่ตั้งแลกเปลี่ยนไฟล์)::h 'directory'

แก้ไข:แก้ไขตัวอย่างสำหรับการตั้งค่าไดเรกทอรีตามที่ระบุไว้ในความคิดเห็นโดย @B Layer


จะเกิดอะไรขึ้นเมื่อคุณจบลงด้วยไฟล์สลับหลายไฟล์? เนื่องจากการเชื่อมต่อลดลงมากมาย?
leeand00

1
ฉันพูดถึงว่าในย่อหน้าที่สองของ "Diff the Differencces" เมื่อคุณใช้ diffs เพื่อพิจารณาว่าการเปลี่ยนแปลงใดที่คุณต้องการให้ลบไฟล์ชั่วคราวและไฟล์ swap เก่าทั้งหมดที่คุณทำไว้ (ตอนนี้คุณรู้ว่าไฟล์ swap ทั้งหมดอยู่ที่ไหน)
flemingfleming

1
FYI คุณไม่จำเป็นต้องใช้exec... set directory^=$HOME/.vim/swap//ทำงานได้ดีตราบใดที่$HOMEตัวแปรสภาพแวดล้อมเริ่มต้นได้ :h expand-envดู ทำงานร่วมกับdictionary, undodirและbackupdirเพื่อตั้งชื่ออีกไม่กี่
B Layer

ขอบคุณที่เตือนฉันเกี่ยวกับเรื่องนี้! ฉันใช้ตัวแปร vimscript ในการกำหนดค่าของฉันแทนที่นั่นดังนั้นการดำเนินการและลืมตัวแปรสภาพแวดล้อมที่ไม่ต้องการ เมื่อคิดถึงมันฉันควรใช้ vim เพื่อตั้งค่าตัวแปรสภาพแวดล้อมแทน
flemingfleming

2

โดยส่วนตัวแล้วฉันได้ปิดการแลกเปลี่ยนและไฟล์สำรองเนื่องจากมันมีแนวโน้มที่จะสร้างไฟล์ swap และไฟล์สำรองทุกที่และสร้างความขัดแย้งบ่อยครั้ง การยกเลิกอย่างต่อเนื่องของ Vim นั้นเชื่อถือได้มากขึ้นและปราศจากข้อผิดพลาด

กลุ่มในปัจจุบันมีการเลิกทำแบบถาวรซึ่งเป็นวิธีการสำรองข้อมูลที่ละเอียดยิ่งขึ้น ทุกครั้งที่คุณกดEscสถานะปัจจุบันของไฟล์จะถูกจับ

คุณสามารถใช้:undolistหรือปลั๊กอินเช่นgundoหรือเลิกทำต้นไม้เพื่อเรียกดูประวัติการเลิกทำของคุณ

วิธีใช้เป็นกลุ่มด้วยวิธีนี้:

  • สร้างไดเรกทอรีที่คุณแก้ไขประวัติสำหรับแต่ละไฟล์จะถูกบันทึก
  • บอกเป็นกลุ่มเพื่อใช้ไดเรกทอรีนั้น
  • เปิดใช้งานเลิกทำแบบถาวร

ในเปลือก:

mkdir ~/.vim/undodir

ในกลุ่ม

set undodir=~/.vim/undodir
set undofile

หากต้องการปิดไฟล์สลับ: :set noswapfile


1
มีปัญหาใหญ่สองสามข้อในคำตอบนี้ 1. การเลิกทำแบบถาวรจะแก้ปัญหาต่าง ๆ เพื่อสลับไฟล์ (และ'writebackup'แก้ไขปัญหาอื่น) การเปิดใช้งานเลิกทำแบบถาวรจะไม่ช่วยหากคอมพิวเตอร์ของคุณขัดข้อง คุณสามารถยืนยันว่าไฟล์ swap ไม่จำเป็นสำหรับเหตุผลอื่น (ความเสถียรของระบบปฏิบัติการที่ทันสมัย, การมีอยู่ของ UPS) แต่คุณไม่ได้ทำเช่นนั้นในคำตอบนี้ 2. การตั้งค่า'undodir' ไม่เปิดใช้งานการเลิกทำแบบถาวร! คุณต้องตั้งค่า'undofile'สำหรับสิ่งนี้
Rich
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.