คำสั่งในการรีเฟรชไฟล์จากเวอร์ชันบนดิสก์คือ :e!
ฉันจะทำเช่นเดียวกันกับไฟล์ทั้งหมดในบัฟเฟอร์ได้อย่างไร
ความเป็นมา: ฉันต้องการสิ่งนั้นเพราะฉันใช้ git กับหลายสาขาโดยเปิดเป็นกลุ่มเดียวที่มีบัฟเฟอร์ เมื่อฉันชำระเงินสาขาฉันต้องการรีเฟรชเป็นกลุ่ม
คำสั่งในการรีเฟรชไฟล์จากเวอร์ชันบนดิสก์คือ :e!
ฉันจะทำเช่นเดียวกันกับไฟล์ทั้งหมดในบัฟเฟอร์ได้อย่างไร
ความเป็นมา: ฉันต้องการสิ่งนั้นเพราะฉันใช้ git กับหลายสาขาโดยเปิดเป็นกลุ่มเดียวที่มีบัฟเฟอร์ เมื่อฉันชำระเงินสาขาฉันต้องการรีเฟรชเป็นกลุ่ม
คำตอบ:
อ่านเอกสารประกอบbufdo
ควรทำตามที่คุณต้องการ
set noconfirm
ก่อนใช้bufdo
คำสั่ง ( set confirm
หลังจากนั้นจึงจะสามารถใช้ซ้ำได้)
bufdo e
ทิ้งบัฟเฟอร์ทั้งหมดที่ไม่เน้นไวยากรณ์
:checkt[ime]
คำสั่งที่ถูกออกแบบมาเพื่อวัตถุประสงค์อย่างนี้
มันจะแจ้งให้คุณโหลดบัฟเฟอร์ที่มีการเปลี่ยนแปลงใหม่ หากคุณต้องการข้ามพรอมต์คุณสามารถทำได้:set autoread
ล่วงหน้า (คุณจะยังคงได้รับข้อความแจ้งเกี่ยวกับบัฟเฟอร์ที่มีการเปลี่ยนแปลงที่ไม่ได้บันทึกในเครื่อง)
นอกจากนี้ยังหลีกเลี่ยงปัญหาการเน้นไวยากรณ์ที่กล่าวถึงโดย Steven Lu ในคำตอบที่ยอมรับ จะปิดการเน้นไวยากรณ์จากการออกแบบ:bufdo
นี่คือสิ่งที่ฉันลงเอยด้วยการใส่. vimrc:
fun! PullAndRefresh()
set noconfirm
!git pull
bufdo e!
set confirm
endfun
nmap <leader>gr call PullAndRefresh()
จาก:help autoread
:
เมื่อตรวจพบว่ามีการเปลี่ยนแปลงไฟล์ภายนอก Vim และไม่มีการเปลี่ยนแปลงภายใน Vim ให้อ่านอีกครั้งโดยอัตโนมัติ เมื่อไฟล์ถูกลบจะไม่เสร็จสิ้น
ถ้าเช่นฉันคุณแค่ต้องการโหลดบัฟเฟอร์ที่ค้าง แต่ไม่ได้แก้ไขแบบพาสซีฟเสมอดูเหมือนว่ามันควรจะทำให้งานเสร็จ
อย่างไรก็ตามรายละเอียดสุดท้ายคือเมื่อกลุ่มสังเกตเห็นบัฟเฟอร์เก่า checktime
ที่สามารถนำมาบังคับกับ หากคุณมีการตั้งค่าเหตุการณ์โฟกัสเราสามารถเรียกใช้checktime
เมื่อใดก็ตามที่เราได้รับโฟกัสดังนี้:
set autoread
autocmd FocusGained * checktime
คำตอบนี้ยังมีรายละเอียดที่น่าสนใจ
ตามที่ @Matthew S พูดถึงที่นี่https://vi.stackexchange.com/a/462คุณสามารถใช้:
:set noconfirm
:bufdo !e
:set confirm