ประวัติคำสั่งถูกแก้ไขได้อย่างไรระหว่าง Vim หลายอินสแตนซ์?


15

Vim จะเก็บประวัติคำสั่ง ex (สามารถเข้าถึงได้ผ่าน:และq:) และประวัตินั้นจะคงอยู่หลังจากเลิก

ถ้าฉันเรียกใช้หลายอินสแตนซ์ของ Vim (ผู้ใช้เดียวกัน, โฮมไดเร็กตอรี่เดียวกัน), Vim จะทำการอนุญาโตตุลาการระหว่างประวัติคำสั่งอย่างไร? ดูเหมือนว่ากระบวนการสุดท้ายที่จะออกจากการชนะ มีวิธีการเก็บประวัติคำสั่งของอินสแตนซ์ทั้งหมดหรือไม่


1
จริงๆ? ประวัตินี้ไม่ได้มีอยู่หลังจากเลิกให้ฉัน (กลุ่ม 7.4.52, Ubuntu 14.04)
Doorknob

3
@ Doorknob ตรวจสอบให้แน่ใจว่าคุณ~/.viminfoเป็นเจ้าของโดยคุณ ข้อผิดพลาดทั่วไปสำหรับคนที่จะทำงานsudo vim ...ซึ่งถ้าคุณไม่ได้เรียกใช้ vim ในฐานะผู้ใช้ของคุณมาก่อนจะสร้าง~/.viminfoเป็น root หากเป็นปัญหาฉันขอแนะนำให้เรียนรู้การใช้sudoeditหรือsudo -eแก้ไขไฟล์ที่มีสิทธิ์
jamessan

@jamessan Huh ดูเหมือนว่านั่นเป็นปัญหา chownกำลังส่ง. viminfo ของฉันกลับไปยังตัวฉันแก้ไข (ไม่แน่ใจว่าการเป็นเจ้าของนั้นเปลี่ยนไปเป็นรูทอย่างไรเนื่องจากฉันใช้มาตลอดsudoeditแต่ก็ดีนะ)
Doorknob

คำตอบ:


10

คำตอบสำหรับคำถามเรื่องของคุณคือสิ่งที่คุณสังเกต จากคู่มือผู้ใช้ที่เป็นกลุ่ม:help 21.3

เมื่อคุณเรียกใช้ Vim หลายครั้งการออกครั้งสุดท้ายจะเก็บข้อมูลไว้ นี่อาจทำให้ข้อมูลที่ออกจาก Vims ที่เก็บไว้สูญหายก่อนหน้านี้ แต่ละรายการสามารถจดจำได้เพียงครั้งเดียว

อย่างไรก็ตามชื่อไฟล์ของไฟล์ viminfo (ซึ่งจัดเก็บประวัติคำสั่งเหนือสิ่งอื่นใดเช่นเครื่องหมายสากลและเนื้อหาการลงทะเบียนหากกำหนดค่าเช่นนั้น) อาจเปลี่ยนแปลงได้! ซึ่งหมายความว่าคุณสามารถตั้งค่า 'ประวัติ' ที่แตกต่างกันสำหรับโครงการหรืออินสแตนซ์ต่าง ๆ ของ vim สมมติว่าคุณไม่ได้ใช้อินสแตนซ์ vim มากกว่าหนึ่งรายการต่อโครงการการจัดการชื่อไฟล์ viminfo ผ่าน vimrc (หรือปลั๊กอินการตั้งค่าโปรเจ็กต์อื่น ๆ ) เป็นวิธีที่ยอดเยี่ยมในการจัดการกับสิ่งนี้

ตั้งค่าไฟล์ viminfo อื่น ๆ

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

:set viminfo+=nPath/to/custom/viminfofile

ตัวอย่างของการให้ vimrc ตั้งค่านี้โดยอัตโนมัติตามไดเรกทอรี:

 if getcwd() == "/projects/projA"
     set viminfo+=n~/.viminfo-projA
 endif

ผลลัพธ์จากด้านบนคือประวัติที่ระบุโปรเจ็กต์จะถูกโหลดเมื่อเริ่มต้นและบันทึกเมื่อออกหาก vim ถูกเรียกใช้ในไดเร็กทอรี / projects / projA

โหลด viminfo สำรองระหว่างการเริ่มต้น

นี่เป็นสิ่งที่ดีสำหรับกรณีที่คุณต้องการบันทึกประวัติของคุณไปที่ด้านข้างและโหลดในภายหลังโดยไม่ต้องจัดการในระดับโครงการ

ก่อนอื่นให้บันทึกประวัติคุณเพิ่มไปที่ตัวเลือก viminfo ดังกล่าวข้างต้นก่อนที่จะออก จากนั้นเพื่อโหลดประวัติเรียกใช้ vim ด้วยอ็อพชัน -i

vim -i Path/to/custom/viminfofile

หากคุณไม่ต้องการออกจากกลุ่มเพื่อบันทึกไฟล์ viminfo คุณสามารถใช้:wv( :wviminfo) สิ่งนี้จะบันทึกไฟล์ viminfo โดยไม่ต้องออก vim ตามการตั้งค่า n ด้านบน และคุณสามารถทำได้:wv SomeOtherFileเพื่อบันทึกไปยังตำแหน่งที่ไม่เหมือนกับการตั้งค่าในตัวเลือก viminfo การดำเนินการนี้อาจสะดวกกว่าการตั้งค่าชื่อไฟล์ที่จะใช้ที่ exit แต่จะไม่หยุด vim จากการใช้ไฟล์เริ่มต้นเมื่อออก

ตัวอย่างเช่นในกลุ่มแรก:

:wv ~/customInfo

และในสถานีที่สอง:

vim -i ~/customInfo

หรือถ้าเป็นกลุ่มที่สองทำงานแล้วและคุณต้องการโหลด viminfo:

:rv ~/customInfo

โปรดทราบว่า:wvและ:rvจะไม่เปลี่ยนชื่อไฟล์เป็นกลุ่มจะบันทึกเมื่อออกหรือชื่อไฟล์ที่อ่านระหว่างการเริ่มต้น

ข้อมูลเพิ่มเติม

คำอธิบายของset viminfo+=nSomePath: viminfoเราใช้ชุดคำสั่งเพื่อปรับตัวเลือกในการตั้งชื่อ ตัว+=บ่งชี้ที่เราต้องการผนวกเข้ากับตัวเลือกไม่ใช่เปลี่ยนแปลงทุกอย่าง เราผนวกnตัวเลือกที่ระบุชื่อไฟล์สำหรับ viminfo ทันทีหลังจากที่nเรามีSomePathซึ่งจะเป็นชื่อไฟล์ที่ใช้สำหรับการบันทึก viminfo

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

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