ฉันจะปิดบัฟเฟอร์ทั้งหมดใน Vim ได้อย่างไรยกเว้นบัฟเฟอร์ที่ฉันกำลังแก้ไขอยู่ในปัจจุบัน?
ฉันจะปิดบัฟเฟอร์ทั้งหมดใน Vim ได้อย่างไรยกเว้นบัฟเฟอร์ที่ฉันกำลังแก้ไขอยู่ในปัจจุบัน?
คำตอบ:
คุณสามารถใช้สคริปต์นี้จาก vim.org:
http://www.vim.org/scripts/script.php?script_id=1071
เพียงแค่นำไปไว้ใน.vim/plugin
ไดเรกทอรีของคุณแล้วใช้:BufOnly
คำสั่งเพื่อปิดบัฟเฟอร์ทั้งหมดยกเว้นบัฟเฟอร์ที่ใช้งานอยู่ นอกจากนี้คุณยังสามารถ map .vimrc
ที่อื่นคุณชอบในของคุณ
แหล่งที่มาบน Github (ผ่านมิเรอร์ vim-สคริปต์): https://github.com/vim-scripts/BufOnly.vim/blob/master/plugin/BufOnly.vim
ลองสิ่งนี้
bufdo bd
bufdo ทำงานคำสั่งสำหรับบัฟเฟอร์ทั้งหมด
bd
คำสั่งปิดเสียงเรียกเข้าเอง nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>
.
ฉันสามารถทำสิ่งนี้ได้อย่างง่ายดายเช่นนี้:
:%bd|e#
:%bd|e#
%bd
= ลบบัฟเฟอร์ทั้งหมด e#
= เปิดบัฟเฟอร์สุดท้ายสำหรับการแก้ไข ไปป์ในระหว่างเพียงแค่หนึ่งคำสั่งหลังจากนั้นอีก
%bd|e#|bd#
เพื่อลบ[No Name]
บัฟเฟอร์ที่สร้างขึ้น
command! BufOnly silent! execute "%bd|e#|bd#"
|
:map <leader>o :%bd\|e#<cr>
หากคุณไม่สนใจสิ่งที่เป็นอยู่ในปัจจุบันคุณสามารถทำสิ่งต่าง ๆ ได้ง่ายกว่า (ไม่จำเป็นต้องใช้สคริปต์):
1,100bd
nnoremap <leader>bd :%bd | NERDTree<cr>
E16: Invalid range
เพราะบัฟเฟอร์บางตัวในช่วงนั้นไม่มีอยู่จริง มันไม่สนใจสิ่งนั้นจนกระทั่งเมื่อไม่นานมานี้
:ls
เพื่อดูบัฟเฟอร์ที่ใหญ่ที่สุดที่คุณได้เปิดจริงและตั้งค่าช่วงของคุณที่ (เช่นถ้าบัฟเฟอร์สูงสุดของคุณคือ 22 แล้ว:1,22bd
) ฉันได้รับข้อผิดพลาดเดียวกันจนกระทั่งฉันทำอย่างนั้น
ฉันทำนี่
:w | %bd | e#
รายการโปรดของฉันถ้าฉันต้องการเปิดบัฟเฟอร์ปัจจุบันของฉันและปิดอื่น ๆ ทั้งหมด
วิธีการทำงาน: ก่อนอื่นให้เขียนการเปลี่ยนแปลงของบัฟเฟอร์ปัจจุบันจากนั้นปิดบัฟเฟอร์ที่เปิดทั้งหมดจากนั้นเปิดบัฟเฟอร์ที่ฉันเปิดอยู่ ในกลุ่มจะ|
เชื่อมโยงการดำเนินการของคำสั่งเข้าด้วยกัน หากบัฟเฟอร์ของคุณเป็นรุ่นล่าสุดสามารถตัดให้สั้นลงได้:%bd | e#
%
ไม่สามารถทำงานได้ในฐานะตัวเลือกทั้งหมด คุณเดาอะไรได้ไหม
bufnr("$")
ที่ส่งคืนหมายเลขบัฟเฟอร์ล่าสุด :1,bufnr("$")bd
แต่ผมไม่มีความคิดที่จะสอดแทรกสตริงเมื่อฉันใช้เช่นนี้ บางที .. :1,9999bd
ทางออกที่ดีที่สุดจะเป็น
:help :bd
:%bdelete " delete all buffers
แสดงให้เห็นว่า ดังนั้น%
เป็นสิ่งที่คุณต้องการ ฉันใช้ชุดตัวเลือกการแก้ไขของคุณ: วิธี:%bd<CR><C-O>:bd#<CR>
นี้จะลบบัฟเฟอร์ทั้งหมดจากนั้นใช้<C-O>
เพื่อเรียกคืนตำแหน่งในไฟล์ปัจจุบันจากนั้นจึง:bd#
ลบบัฟเฟอร์ที่ไม่ได้ระบุ สิ่งนี้จะปิดบัฟเฟอร์ทั้งหมดและทำให้คุณอยู่ในตำแหน่งเดียวกันในไฟล์
สร้างคำตอบของ juananruiz
ทำการเปลี่ยนแปลงเล็กน้อยในบัฟเฟอร์ที่คุณต้องการเก็บไว้แล้ว
:1,1000bd
คำสั่งbd
(ลบบัฟเฟอร์) จะไม่ลบบัฟเฟอร์ใด ๆ ที่มีการเปลี่ยนแปลงที่ไม่ได้บันทึก วิธีนี้คุณสามารถเก็บไฟล์ปัจจุบัน (เปลี่ยน) ในรายการบัฟเฟอร์
แก้ไข: โปรดสังเกตว่าสิ่งนี้จะลบ NERDTreeBuffer ของคุณด้วย คุณสามารถรับมันคืนด้วย: NERDTree
set nohidden
การตั้งค่าหรือไม่?
การปิดบัฟเฟอร์ที่เปิดอยู่ทั้งหมด:
silent! execute "1,".bufnr("$")."bd"
การปิดบัฟเฟอร์ที่เปิดอยู่ทั้งหมดยกเว้นบัฟเฟอร์ปัจจุบัน :
function! CloseAllBuffersButCurrent()
let curr = bufnr("%")
let last = bufnr("$")
if curr > 1 | silent! execute "1,".(curr-1)."bd" | endif
if curr < last | silent! execute (curr+1).",".last."bd" | endif
endfunction
เพิ่มฟังก์ชั่นนี้และเรียกว่าใช้.vimrc
:call CloseAllBuffersButCurrent()
แผนที่ความสะดวก:
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>
:%bd|e#|bd#
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
ฉันใส่สิ่งนี้ลงในไฟล์. vimrc ของฉัน
nnoremap <leader>ca :w <bar> %bd <bar> e# <bar> bd# <CR>
จากนั้นleader + ca
ปิด (ทั้งหมด) ของคุณปิดบัฟเฟอร์ทั้งหมดยกเว้นบัฟเฟอร์ปัจจุบัน
มันคืออะไร
: w - บันทึกบัฟเฟอร์ปัจจุบัน
% bd - ปิดบัฟเฟอร์ทั้งหมด
e # - เปิดไฟล์ที่แก้ไขล่าสุด
bd # - ปิดบัฟเฟอร์ที่ไม่มีชื่อ
มีปลั๊กอินที่ทำสิ่งนี้และอีกเล็กน้อย!
ลองดูclose-buffers.vim
นี่คือสิ่งที่ฉันทำ ดังนั้นฉันจึงต้องการรักษาตำแหน่งเคอร์เซอร์ไว้หลังจากลบบัฟเฟอร์ทั้งหมดและโซลูชันส่วนใหญ่ข้างต้นไม่สนใจข้อเท็จจริงนี้ ฉันคิดว่าการแมปคำสั่งนั้นดีกว่าการพิมพ์ดังนั้นที่นี่ฉันใช้<leader>bd
เพื่อลบบัฟเฟอร์ทั้งหมดและกระโดดกลับไปที่ตำแหน่งเคอร์เซอร์เดิมของฉัน
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
%bd
= ลบบัฟเฟอร์ทั้งหมด
e#
= เปิดบัฟเฟอร์สุดท้ายสำหรับการแก้ไข (ซึ่งเป็นบัฟเฟอร์ที่ฉันทำงานอยู่)
bd#
ลบ [ไม่มีชื่อ] buffer %bd
ที่ได้รับการสร้างขึ้นเมื่อคุณใช้
ไปป์ในระหว่างเพียงแค่หนึ่งคำสั่งหลังจากนั้นอีก คุณต้องหนีจากมันแม้ว่าจะใช้\|
'"
= รักษาตำแหน่งเคอร์เซอร์ของฉัน
ฉันชอบ1,100bd
( แนะนำโดย juananruiz ) ซึ่งดูเหมือนว่าจะทำงานให้ฉัน
ฉันเพิ่มquit!
แผนที่ของฉันเพื่อมอบให้ฉัน
nnoremap <leader>bd :1,100bd<CR>
nnoremap <leader>bdq :1,100bd<CR>:q!<CR>
สิ่งนี้ฆ่าบัฟเฟอร์ทั้งหมดและปิด Vim ซึ่งเป็นสิ่งที่ฉันกำลังมองหาเป็นส่วนใหญ่
bdq
แมปที่ปิดบัฟเฟอร์ทั้งหมดและออกเป็นกลุ่มด้วย:q!
เมื่อคุณสามารถใช้:qa!
แทนได้ ยกเว้นกรณีที่ฉันมองเห็นบางสิ่งบางอย่าง