Câu trả lời:
Bạn có thể sử dụng tập lệnh này từ vim.org:
http://www.vim.org/scripts/script.php?script_id=1071
Chỉ cần đặt nó vào .vim/plugin
thư mục của bạn và sau đó sử dụng :BufOnly
lệnh để đóng tất cả các bộ đệm nhưng hoạt động. Bạn cũng có thể ánh xạ nó ở nơi khác mà bạn thích .vimrc
.
Nguồn trên Github (thông qua nhân bản vim-scripts): https://github.com/vim-scripts/BufOnly.vim/blob/master/plugin/BufOnly.vim
Thử cái này
bufdo bd
bufdo chạy lệnh cho tất cả các bộ đệm
bd
lệnh đóng chính vim; nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>
.
Tôi đã có thể làm điều này khá dễ dàng như thế này:
:%bd|e#
:%bd|e#
%bd
= xóa tất cả bộ đệm. e#
= mở bộ đệm cuối cùng để chỉnh sửa. Các ống ở giữa chỉ thực hiện một lệnh khác.
%bd|e#|bd#
để xóa [No Name]
bộ đệm được tạo.
command! BufOnly silent! execute "%bd|e#|bd#"
|
:map <leader>o :%bd\|e#<cr>
Nếu bạn không quan tâm đến cái hiện tại, thì đơn giản hơn để làm một cái gì đó như (không cần kịch bản):
1,100bd
nnoremap <leader>bd :%bd | NERDTree<cr>
E16: Invalid range
vì một số bộ đệm trong phạm vi không thực sự tồn tại. Nó đã bỏ qua điều đó cho đến gần đây.
:ls
để xem bộ đệm lớn nhất mà bạn thực sự đã mở và đặt phạm vi của bạn thành đó (tức là nếu bộ đệm cao nhất của bạn là 22, thì :1,22bd
). Tôi đã nhận được cùng một lỗi cho đến khi tôi làm điều đó.
tôi làm việc này
:w | %bd | e#
Yêu thích của tôi nếu tôi chỉ muốn bộ đệm hiện tại của tôi mở và đóng tất cả những người khác.
Cách thức hoạt động: đầu tiên viết các thay đổi của bộ đệm hiện tại, sau đó đóng tất cả các bộ đệm đang mở, sau đó mở lại bộ đệm tôi hiện đang sử dụng. Trong Vim, |
chuỗi thực thi các lệnh với nhau. Nếu bộ đệm của bạn được cập nhật, có thể rút ngắn ở trên:%bd | e#
%
không thể làm việc như tất cả các bộ chọn. Bạn có đoán được gì không?
bufnr("$")
trả về số bộ đệm cuối cùng. nhưng tôi không có ý tưởng để nội suy chuỗi khi tôi sử dụng như thế này :1,bufnr("$")bd
. Có lẽ .. giải pháp tốt nhất sẽ là :1,9999bd
.
:help :bd
cho thấy :%bdelete " delete all buffers
. Vì vậy, %
chính xác là những gì bạn muốn. Tôi sử dụng một biến thể của giải pháp của bạn: :%bd<CR><C-O>:bd#<CR>
Điều này sẽ xóa tất cả các bộ đệm, sau đó sử dụng <C-O>
để khôi phục vị trí trong tệp hiện tại, sau đó :bd#
để xóa bộ đệm chưa được đặt tên. Điều này sẽ đóng tất cả các bộ đệm và để bạn ở cùng một vị trí trong tệp.
Dựa trên câu trả lời của juananruiz.
Thực hiện một thay đổi nhỏ trong bộ đệm bạn muốn giữ, sau đó
:1,1000bd
Lệnh bd
(xóa bộ đệm) sẽ không xóa bất kỳ bộ đệm nào với các thay đổi chưa được lưu. Bằng cách này bạn có thể giữ tệp hiện tại (đã thay đổi) trong danh sách bộ đệm.
Chỉnh sửa: Xin lưu ý rằng điều này cũng sẽ xóa NERDTreeBuffer của bạn. Bạn có thể lấy lại bằng: NERDTree
set nohidden
để được thiết lập?
Đóng tất cả các bộ đệm mở:
silent! execute "1,".bufnr("$")."bd"
Đóng tất cả các bộ đệm mở ngoại trừ bộ đệm hiện tại :
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
Thêm chức năng này .vimrc
và gọi nó bằng cách sử dụng :call CloseAllBuffersButCurrent()
.
Bản đồ tiện lợi:
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>
:%bd|e#|bd#
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
Tôi đặt cái này trong tập tin .vimrc của tôi
nnoremap <leader>ca :w <bar> %bd <bar> e# <bar> bd# <CR>
sau đó leader + ca
(đóng tất cả) của bạn đóng tất cả các bộ đệm trừ cái hiện tại.
Những gì nó làm là
: w - lưu bộ đệm hiện tại
% bd - đóng tất cả các bộ đệm
e # - mở tập tin chỉnh sửa cuối cùng
bd # - đóng bộ đệm không tên
Có một plugin thực hiện chính xác điều này và một chút nữa!
Kiểm tra bộ đệm.vim
Đây là những gì tôi làm. Vì vậy, tôi muốn giữ vị trí con trỏ của mình sau khi xóa tất cả các bộ đệm và hầu hết các giải pháp ở trên chỉ bỏ qua thực tế này. Tôi cũng nghĩ rằng ánh xạ lại lệnh tốt hơn là gõ nó vì vậy ở đây tôi sử dụng <leader>bd
để loại bỏ tất cả các bộ đệm và quay trở lại vị trí con trỏ ban đầu của tôi.
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
%bd
= xóa tất cả bộ đệm.
e#
= mở bộ đệm cuối cùng để chỉnh sửa (Bộ đệm nào tôi đang làm việc).
bd#
để xóa bộ đệm [Không Tên] được tạo khi bạn sử dụng %bd
.
Các ống ở giữa chỉ thực hiện một lệnh khác. Bạn đã thoát khỏi nó mặc dù sử dụng\|
'"
= giữ vị trí con trỏ của tôi.
Tôi thích 1,100bd
(được đề xuất bởi juananruiz ) dường như làm việc cho tôi.
Tôi đã thêm một quit!
bản đồ để cung cấp cho tôi
nnoremap <leader>bd :1,100bd<CR>
nnoremap <leader>bdq :1,100bd<CR>:q!<CR>
Điều này giết chết tất cả các bộ đệm và tắt Vim, đó là điều mà tôi đang tìm kiếm chủ yếu.
bdq
ánh xạ đóng tất cả các bộ đệm và thoát vim với :q!
, khi thay vào đó bạn chỉ có thể sử dụng :qa!
. Trừ khi tôi đang xem xét một cái gì đó