ฉันจะใช้คำสั่ง undofile ได้อย่างไร


36

รายการข่าวล่าสุดในvim.orgพูดถึงการใช้ 'เลิกทำ' เพื่อบันทึกประวัติของคุณและยกเลิกการเปลี่ยนแปลงแม้หลังจากรีบูต:

ผู้ใช้หลายคนไม่รู้จักคุณสมบัติที่ฉันชอบโดยใช้ตัวเองเนื่องจากฉันพบเมื่อสัปดาห์ที่แล้ว นอกเหนือจากการเลิกทำในหลาย ๆ ระดับตามที่คุณต้องการ Vim ยังมีการจัดเก็บข้อมูลการเลิกทำในไฟล์ ดังนั้นคุณสามารถออกจาก Vim รีบูตเครื่องคอมพิวเตอร์และยกเลิกการเปลี่ยนแปลงที่คุณทำไว้ ดูความช่วยเหลือสำหรับ 'undofile' (Bram Moolenaar)

ฉันจะเปิดใช้งานและใช้คุณสมบัตินี้ได้อย่างไร?


2
Bram อาจจะพูดถึงเหตุการณ์นี้
Kurt Pfeifle

คำตอบ:


37

รุ่นที่ง่ายที่สุดคือ: สร้าง~/.vim/undo-dir/ไดเรกทอรีและเพิ่มรายการต่อไปนี้ลงใน.vimrc:

set undodir=~/.vim/undo-dir
set undofile

อย่างไรก็ตามมันไม่ได้ไร้ที่ติและควรอ่านต่อ จากตัวฉันเอง.vimrc:

" Let's save undo info!
if !isdirectory($HOME."/.vim")
    call mkdir($HOME."/.vim", "", 0770)
endif
if !isdirectory($HOME."/.vim/undo-dir")
    call mkdir($HOME."/.vim/undo-dir", "", 0700)
endif
set undodir=~/.vim/undo-dir
set undofile

ฉันไม่ต้องการถ่วงไดเรกทอรีสุ่มด้วยไฟล์เลิกทำ ดังนั้นฉันจึงตั้งค่าundodirตัวเลือกซึ่งทำให้พวกเขาทั้งหมดในไดเรกทอรีเลิกทำหนึ่ง นั่นทำให้เกิดปัญหาหนึ่ง - ฉันขี้เกียจและไม่อยากสร้างไดเรกทอรีนั้นบนเครื่องทั้งหมดของฉัน (ฉันใช้ระบบควบคุมเวอร์ชันเพื่อทำให้ข้อมูลตรงกัน.vimrcในหลาย ๆ เครื่อง) โชคดีที่มันง่ายพอที่จะให้ Vim ตรวจสอบและสร้างไดเรกทอรีหากไม่มีอยู่

โปรดทราบ0700โหมดในไดเรกทอรีเลิกทำ (นั่นเป็นสิทธิ์แบบเต็มสำหรับเจ้าของไม่มีสิทธิ์สำหรับผู้อื่น) ไฟล์ที่ฉันแก้ไขเมื่อใด ฯลฯ ควรเป็นแบบส่วนตัว และเนื่องจากนี่เป็นไดเรกทอรีเดียวที่ฉันสามารถเข้าถึงได้ฉันไม่ต้องกังวลกับคนอื่นที่วาง symlink ไว้ในนั้นหรือยกเลิกไฟล์ของตนเองหรืออะไรก็ตามที่คุณต้องกังวลเกี่ยวกับการใช้ไดเรกทอรีชั่วคราวของระบบ

ท้ายที่สุดไม่ได้เป็นไดเรกทอรีชั่วคราวของระบบมันไม่อยู่ภายใต้นโยบายการล้างข้อมูลบนระบบ tempfile บ่อยครั้งที่ค่อนข้างสั้น - สัปดาห์หรือมากกว่านั้น แต่เพื่อป้องกันไม่ให้มันเติบโตตลอดไปฉันใส่สิ่งต่อไปนี้ในของฉันcrontab:

# m h  dom mon dow   command
 43 00 *   *   3     find /home/anthony/.vim/undo-dir -type f -mtime +90 -delete

ดังนั้นหลังจากไม่มีการแก้ไข 90 วันพวกเขาจะถูกลบ (จริงๆแล้วพวกเขาไม่ได้ใหญ่ขนาดนั้นคุณสามารถทิ้งไว้ตลอดไปได้อย่างง่ายดายด้วยดิสก์ราคาถูก แต่พิจารณาความเป็นส่วนตัวของคุณด้วยหากเครื่องของคุณถูกบุกรุก)


ขอบคุณสำหรับคำตอบรายละเอียด @derobert! ฉันรู้ว่านี่เป็นคำถามเก่า แต่ฉันได้พยายามหาวิธี vimscript ในการลบไฟล์ vim undo เก่า ( vi.stackexchange.com/questions/16053/… ) ฉันคิดว่ามันคงจะสะอาดกว่าถ้าทำแบบนั้น แต่มันพิสูจน์แล้วว่าไม่ใช่เรื่องง่าย คุณเคยคิดว่าจะใช้ vimscript เพื่อลบไฟล์ vim เก่าหรือไม่? ถ้าไม่คุณจะยังคงใช้ crontab แทน vimscript ได้หรือไม่?
โลแกน

1
@Logan การใช้สคริปต์ vim จะใช้ได้เฉพาะเมื่อเรียกใช้ vim และจะเกิดอะไรขึ้นถ้ามี vim หลายตัวกำลังทำงานอยู่ สาย cron ที่ง่ายไม่ต้องทนทุกข์ทรมานจากปัญหาเหล่านั้นและถูกต้องอย่างชัดเจน ...
derobert

ดูเหมือนว่าmkdir()ฟังก์ชั่นรองรับการสร้างโครงสร้างไดเรกทอรีหลายรายการพร้อม"p"ตัวเลือกสำหรับ{path}พารามิเตอร์ ดังนั้นสคริปต์ข้างต้นสามารถทำให้เข้าใจง่ายขึ้นเล็กน้อย ใช้call mkdir($HOME."/.vim/undo-dir", "p", 0700)งานสำหรับฉันใน Vim 7.4.160 เป็นอย่างน้อย
jdhao
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.