ปิดและยกเลิกการโหลดบัฟเฟอร์โดยไม่ต้องออกเป็นกลุ่ม


54

:clo!บ่อยครั้งที่ผมจะโหลดข้อมูลบางอย่างเป็นบัฟเฟอร์ชั่วคราวและจากนั้นปิดมันด้วย แต่สิ่งนี้ซ่อนบัฟเฟอร์มากกว่าที่จะทำการขนถ่ายทั้งหมดแม้ว่าฉันจะnohiddenตั้งค่าไว้แล้วก็ตาม ฉันพบว่ามันน่าเบื่อเพราะฉันได้รับการยืนยันเป็นพิเศษเมื่อฉันออกจากกลุ่มเกี่ยวกับเนื้อหาที่ฉันทิ้งไปแล้ว

ฉันสามารถใช้:q!แทนได้ แต่มันก็เป็นนิสัยที่ไม่ดีที่จะเข้าไปเพราะมันจะออกจากกลุ่มทั้งหมดถ้ามีบัฟเฟอร์เหลือเพียงอันเดียวซึ่งน่ารำคาญเช่นกัน แย่กว่านั้นถ้าฉันพิมพ์ผิด:qa!ฉันอาจสูญเสียงานมาก

มีพื้นกลางหรือไม่ ฉันต้องการคำสั่งที่ฆ่าบัฟเฟอร์ปัจจุบัน แต่ไม่ได้ออกจากกลุ่ม ฉันไม่ได้คัดค้านการเขียนใน Vimscript แต่ฉันควรหลีกเลี่ยงหากคำสั่งนั้นมีอยู่แล้ว

คำตอบ:


69

มีคำสั่งที่จะทำตรงนั้นคือหรือเพียงแค่:bdelete :bdโดยค่าเริ่มต้นมันจะยกเลิกการโหลดบัฟเฟอร์ปัจจุบัน หากต้องการยกเลิกการโหลดบัฟเฟอร์อื่นก่อนอื่นให้รับรายการบัฟเฟอร์ทั้งหมดด้วย:buffersคำสั่งและหลังจากนั้นคุณสามารถระบุหมายเลขหลังจาก:bdลบได้ นอกจากนี้:bd+ space+ tabอนุญาตให้เสร็จสมบูรณ์โดยใช้ชื่อบัฟเฟอร์


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

ปลั๊กอิน vim-bbye อาจเป็นสิ่งที่คุณกำลังมองหา: github.com/moll/vim-bbye
alxndr

1
วิธีนี้ใช้ไม่ได้ในvi
redolent

นอกจากนี้นามแฝงในตัว:lsจะง่ายกว่า (imo) ที่จะจำและทำเช่นเดียวกับ:buffers
kuzyn

สิ่งนี้ไม่ได้ยกเลิกการโหลดบัฟเฟอร์ ที่จริงมันไม่ได้ปิด มันง่าย 'buflisted' unsets vim.wikia.com/wiki/Vim_buffer_FAQ
BTRUE

27

คุณสามารถล้างบัฟเฟอร์โดยใช้คำสั่ง: bwipeout (หรือ: bw) สิ่งนี้จะลบบัฟเฟอร์ออกจากหน่วยความจำอย่างสมบูรณ์รวมถึงเครื่องหมายใด ๆ การตั้งค่าตัวเลือก ฯลฯ ที่คุณเพิ่มเข้าไป ในทำนองเดียวกัน: bdelete (หรือ: bd) ลบบัฟเฟอร์ แต่ทิ้งไว้ในหน่วยความจำและเก็บเครื่องหมายและการตั้งค่าตัวเลือก

ตามความคิดเห็นของ Tom Hale เอกสาร Vim แนะนำให้ใช้: bd over: bw เว้นแต่คุณจะรู้ว่าคุณกำลังทำอะไรอยู่ ฉันมักจะใช้: bw เพราะชอบแนวคิดในการลบบัฟเฟอร์ออกจากหน่วยความจำอย่างสมบูรณ์และฉันไม่ได้ใช้ประโยชน์จากการทำเครื่องหมายการตั้งค่าตัวเลือกเฉพาะบัฟเฟอร์ ฯลฯ จนถึงจุดที่ต้องการให้คงอยู่หลังจากปิดบัฟเฟอร์ของฉัน

เช่นเดียวกับคำสั่ง: quit (: q) Vim จะให้ข้อผิดพลาดหากบัฟเฟอร์มีการเปลี่ยนแปลง เพื่อแก้ไขปัญหานี้คุณสามารถผนวกเครื่องหมายอัศเจรีย์หลังจากคำสั่งเพื่อไม่ให้พรอมต์ ตัวเลือกอื่นแทนที่จะเพิ่มเครื่องหมายอัศเจรีย์ในทุกสิ่งคือการเพิ่ม "ตั้งค่าการยืนยัน" ให้กับ vimrc ของคุณ ด้วยชุดนี้กลุ่มจะแจ้งให้คุณบันทึกการเปลี่ยนแปลงไฟล์เมื่อปิด

: bufdo เป็นคำสั่งที่มีประโยชน์ที่ดำเนินการคำสั่งอื่นในบัฟเฟอร์ที่ใช้งานทั้งหมด การรวมคำสั่ง: bufdo กับคำสั่ง: bw /: bd ช่วยให้คุณลบบัฟเฟอร์ที่ใช้งานอยู่ทั้งหมดในครั้งเดียว คุณยังสามารถใช้เครื่องหมายอัศเจรีย์เพื่อระงับข้อผิดพลาดได้ แต่ไม่ว่าคุณจะวางไว้ที่ใดหลังจาก: bufdo, after: bw หรือหลังจากทั้งคู่ทำให้ผลลัพธ์ที่แตกต่างกันสำหรับแต่ละ:

:bd          - deletes the current buffer, error if there are unwritten changes
:bd!         - deletes the current buffer, no error if unwritten changes
:bufdo bd    - deletes all buffers, stops at first error (unwritten changes)
:bufdo! bd   - deletes all buffers except those with unwritten changes
:bufdo! bd!  - deletes all buffers, no error on any unwritten changes

:bw          - completely deletes the current buffer, error if there are unwritten changes
:bw!         - completely deletes the current buffer, no error if unwritten changes
:bufdo bw    - completely deletes all buffers, stops at first error (unwritten changes)
:bufdo! bw   - completely deletes all buffers except those with unwritten changes
:bufdo! bw!  - completely deletes all buffers, no error on any unwritten changes

:set confirm - confirm changes (Yes, No, Cancel) instead of error

ต่อไปนี้เป็นคำสั่งบัฟเฟอร์ที่มีประโยชน์อื่น ๆ :

:ls          - list open buffers
:b N         - open buffer number N (as shown in ls)
:tabe +Nbuf  - open buffer number N in new tab
:bnext       - go to the next buffer (:bn also)
:bprevious   - go to the previous buffer (:bp also)

มีมากขึ้นในการจัดการบัฟเฟอร์ที่อยู่นอกขอบเขตของคำถามนี้ ดูที่:
http://vim.wikia.com/wiki/Vim_buffer_FAQ http://vimdoc.sourceforge.net/htmldoc/windows.html#buffers


คุณช่วยเพิ่มคำอธิบายลงในคำตอบนี้ได้ไหม?
EvergreenTree

ความช่วยเหลือบอกว่า "อย่าใช้สิ่งนี้จนกว่าคุณจะรู้ว่าคุณกำลังทำอะไรอยู่" ซึ่งแสดงให้เห็นว่า:bdเป็นที่ต้องการในกรณีส่วนใหญ่
Tom Hale

1
@ TomHale ยินดีที่ได้ทราบว่ามีอะไร:bwทำนอกเหนือจาก "ทุกอย่างที่เกี่ยวข้องกับบัฟเฟอร์หายไปเครื่องหมายทั้งหมดในบัฟเฟอร์นี้ไม่ถูกต้องการตั้งค่าตัวเลือกจะสูญหายไป ฯลฯ " ดูเหมือนว่าสมเหตุสมผลอย่างสมบูรณ์แบบสำหรับฉันหากฉันต้องการ 'ปิด' บัฟเฟอร์เช่นถ้าฉันออกจากกลุ่มทั้งหมด
Kenny Evitt

ฉันชอบ: bw มากกว่า: bd เพราะถ้าคุณใช้: bd แล้วกด <ctrl - ^> เพื่อไปยังบัฟเฟอร์ที่ใช้ล่าสุดมันจะดึงมันขึ้นมาจากหน่วยความจำ : bw ให้การควบคุมกับฉันมากขึ้นและทำในสิ่งที่ฉันต้องการ ^^
eli

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