Jawaban:
Anda dapat menggunakan skrip ini dari vim.org:
http://www.vim.org/scripts/script.php?script_id=1071
Masukkan saja ke .vim/plugindirektori Anda dan kemudian gunakan :BufOnlyperintah untuk menutup semua buffer tetapi yang aktif. Anda juga dapat memetakannya di tempat lain yang Anda sukai di .vimrc.
Sumber di Github (via vim-scripts mirror): https://github.com/vim-scripts/BufOnly.vim/blob/master/plugin/BufOnly.vim
Coba ini
bufdo bd
bufdo menjalankan perintah untuk semua buffer
bdperintah menutup vim itu sendiri; nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>.
Saya dapat melakukan ini dengan cukup mudah seperti ini:
:%bd|e#
:%bd|e#
%bd= hapus semua buffer. e#= buka buffer terakhir untuk diedit. Pipa di antara hanya melakukan satu perintah demi satu.
%bd|e#|bd#untuk menghapus [No Name]buffer yang dibuat.
command! BufOnly silent! execute "%bd|e#|bd#"
|:map <leader>o :%bd\|e#<cr>
Jika Anda tidak peduli yang sekarang, lebih mudah untuk melakukan sesuatu seperti (tidak perlu skrip):
1,100bd
nnoremap <leader>bd :%bd | NERDTree<cr>
E16: Invalid rangekarena beberapa buffer dalam jangkauan sebenarnya tidak ada. Itu mengabaikan itu sampai saat ini.
:lsuntuk melihat buffer terbesar yang sebenarnya Anda buka, dan atur rentang Anda ke itu (yaitu jika buffer tertinggi Anda adalah 22, maka :1,22bd). Saya mendapat kesalahan yang sama sampai saya melakukan itu.
saya melakukan ini
:w | %bd | e#
Favorit saya jika saya ingin buffer saya saat ini membuka dan menutup semua yang lain.
Cara kerjanya: pertama tulis perubahan buffer saat ini, lalu tutup semua buffer terbuka, kemudian buka kembali buffer yang saya gunakan saat ini. Di Vim, |rantai eksekusi perintah bersama. Jika buffer Anda terkini, di atas dapat disingkat menjadi:%bd | e#
%- kadang tidak bisa bekerja karena semua pemilih. Bisakah Anda menebak sesuatu?
bufnr("$")bawaan yang mengembalikan nomor buffer terakhir. tapi saya tidak punya ide untuk menyisipkan ke string ketika saya menggunakan seperti ini :1,bufnr("$")bd. Mungkin .. solusi terbaik :1,9999bd.
:help :bdmenunjukkan :%bdelete " delete all buffers. Jadi %itulah yang Anda inginkan. Saya menggunakan varian dari solusi Anda: :%bd<CR><C-O>:bd#<CR>Ini akan menghapus semua buffer, kemudian gunakan <C-O>untuk memulihkan posisi pada file saat ini, kemudian :bd#untuk menghapus buffer yang tidak dikenal. Ini menutup semua buffer dan membuat Anda berada di lokasi yang sama dalam file.
Membangun jawaban juananruiz.
Buat perubahan kecil di buffer yang ingin Anda simpan, lalu
:1,1000bd
Perintah bd (buffer delete) tidak akan menghapus buffer dengan perubahan yang belum disimpan. Dengan cara ini Anda dapat menyimpan file saat ini (diubah) dalam daftar buffer.
Sunting: Harap perhatikan bahwa ini juga akan menghapus NERDTreeBuffer Anda. Anda bisa mendapatkannya kembali dengan: NERDTree
set nohiddenuntuk diatur?
Dengan menggunakan
:on[ly][!]
dan
:h only
Menutup semua buffer terbuka:
silent! execute "1,".bufnr("$")."bd"
Menutup semua buffer terbuka kecuali untuk yang sekarang :
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
Tambahkan fungsi ini ke .vimrcdan panggil menggunakan :call CloseAllBuffersButCurrent().
Peta kenyamanan:
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>
:%bd|e#|bd#
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
Saya memasukkan ini ke file .vimrc saya
nnoremap <leader>ca :w <bar> %bd <bar> e# <bar> bd# <CR>
lalu milikmu leader + ca (tutup semua) tutup semua buffer kecuali yang sekarang.
Apa yang dilakukannya adalah
: w - simpan buffer saat ini
% bd - tutup semua buffer
e # - buka file yang terakhir diedit
bd # - tutup buffer tanpa nama
Ada sebuah plugin yang melakukan ini dan sedikit lebih banyak!
Lihat close-buffer.vim
Inilah yang saya lakukan. Jadi saya ingin mempertahankan posisi kursor setelah menghapus semua buffer dan sebagian besar solusi di atas mengabaikan fakta ini. Saya juga berpikir bahwa mem-remapping perintah lebih baik daripada mengetiknya jadi di sini saya gunakan <leader>bduntuk menghapus semua buffer dan melompat kembali ke posisi kursor asli saya.
noremap <leader>bd :%bd\|e#\|bd#<cr>\|'"
%bd = hapus semua buffer.
e# = buka buffer terakhir untuk diedit (Yang merupakan buffer saya kerjakan).
bd# untuk menghapus buffer [No Name] yang dibuat saat Anda menggunakan %bd .
Pipa di antara hanya melakukan satu perintah demi satu. Anda harus menghindarinya meskipun menggunakan\|
'" = pertahankan posisi kursor saya.
Saya suka 1,100bd( disarankan oleh juananruiz ) yang sepertinya bekerja untuk saya.
Saya menambahkan quit!ke pemetaan untuk memberi saya
nnoremap <leader>bd :1,100bd<CR>
nnoremap <leader>bdq :1,100bd<CR>:q!<CR>
Ini membunuh semua buffer dan mematikan Vim, yang paling saya cari.
bdqpemetaan yang menutup semua buffer dan keluar dari vim :q!, padahal Anda hanya bisa menggunakannya :qa!. Kecuali saya sedang menghadap sesuatu
Bagaimana kalau saja:
ctrl-w o
(terima kasih kepada https://thoughtbot.com/blog/vim-splits-move-faster-and-more-natural )