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.
NERDTree ditutup jika fokus ada di panel kutu buku
gayavat
2
Anda mungkin ingin menutup NERDTree sebelum melakukan ini untuk mencegah bdperintah menutup vim itu sendiri; nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>.
lvarayut
11
Dokumentasi memperingatkan bahwa argumen untuk :bufdo'tidak boleh menghapus buffer atau menambah buffer ke daftar buffer'. Jadi jika solusi ini bekerja, ini bekerja secara tidak sengaja ... dan sering kali tidak berhasil untuk saya (beralih ke buffer yang berbeda).
glts
10
Ini menutup semua penyangga untuk saya, dan bukan itu pertanyaannya. (MacVim versi 8.0.1207)
Michael Leonard
143
Saya dapat melakukan ini dengan cukup mudah seperti ini:
Ini jawaban yang bagus. Itu membuat BufOnly merasa sedikit berlebihan (maksud saya, seluruh plugin?) Kecuali Anda menggunakan fitur passing argumen dari BufOnly. Yang ingin saya lakukan hanyalah:%bd|e#
shmup
41
@jorgeh %bd= hapus semua buffer. e#= buka buffer terakhir untuk diedit. Pipa di antara hanya melakukan satu perintah demi satu.
OldTimeGuitarGuy
20
@ Jared Anda dapat menggunakan %bd|e#|bd#untuk menghapus [No Name]buffer yang dibuat.
kshenoy
12
Hebat. Maka di sini Anda memiliki satu-satunya hal yang pernah saya gunakan untuk plugin BufOnly, disaring menjadi satu perintah:command! BufOnly silent! execute "%bd|e#|bd#"
shmup
4
@Finn, Anda perlu melarikan diri |:map <leader>o :%bd\|e#<cr>
Halil Özgür
57
Jika Anda tidak peduli yang sekarang, lebih mudah untuk melakukan sesuatu seperti (tidak perlu skrip):
Saya menghadapi beberapa masalah menggunakan perintah ini ketika NERDTree diaktifkan. Saya sarankan menggunakan plugin BufOnly.vim seperti yang disebutkan oleh @VoY.
moeabdol
1
Saya membuat pemetaan berikut yang menjelaskan penghapusan buffer NERDTree:nnoremap <leader>bd :%bd | NERDTree<cr>
Uri
5
Saya menggunakan ini untuk waktu yang lama, tetapi sekarang saya dapatkan E16: Invalid rangekarena beberapa buffer dalam jangkauan sebenarnya tidak ada. Itu mengabaikan itu sampai saat ini.
Jon
3
@Jon Periksa :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.
Nairou
51
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#
Sebagian besar berfungsi dengan baik. tapi kadang %- kadang tidak bisa bekerja karena semua pemilih. Bisakah Anda menebak sesuatu?
Jinyoung Kim
@JinyoungKim (dari [1]) Dalam perintah ":% bd", rentang '%' akan diganti dengan nomor baris awal dan akhir dalam buffer saat ini. Alih-alih menggunakan '%' sebagai rentang, Anda harus menentukan angka untuk rentang. Misalnya, untuk menghapus semua buffer, Anda dapat menggunakan perintah ": 1,9999bd" [1] vimdoc.sourceforge.net/cgi-bin/vimfaq2html3.pl#8.8
iamnotsam
Saya baru saja memeriksa dokumen. Jadi, rentang '%' bergantung pada sejumlah baris file saat ini?
Jinyoung Kim
2
Saya menemukan fungsi 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.
Jinyoung Kim
2
: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.
Alejandro
25
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
Saya perhatikan bahwa ketika melanjutkan sesi vim, yang mengembalikan buffer, saya tidak dapat menghapus buffer lagi menggunakan di atas. Sebagai gantinya, saya harus menggunakan:%bd|e#|bd#
shmup
Solusi terbaik. Saya menambahkan perintah untuk membuka kembali NERDTreenmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
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\|
Tidak ada alasan bagi Anda untuk memiliki bdqpemetaan yang menutup semua buffer dan keluar dari vim :q!, padahal Anda hanya bisa menggunakannya :qa!. Kecuali saya sedang menghadap sesuatu
Jawaban:
Anda dapat menggunakan skrip ini dari vim.org:
http://www.vim.org/scripts/script.php?script_id=1071
Masukkan saja ke
.vim/plugin
direktori Anda dan kemudian gunakan:BufOnly
perintah 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
sumber
Coba ini
bufdo menjalankan perintah untuk semua buffer
http://vim.wikia.com/wiki/Run_a_command_in_multiple_buffers
sumber
bd
perintah menutup vim itu sendiri;nnoremap <silent> <leader>c :NERDTreeClose<bar>bufdo bd<CR>
.:bufdo
'tidak boleh menghapus buffer atau menambah buffer ke daftar buffer'. Jadi jika solusi ini bekerja, ini bekerja secara tidak sengaja ... dan sering kali tidak berhasil untuk saya (beralih ke buffer yang berbeda).Saya dapat melakukan ini dengan cukup mudah seperti ini:
sumber
:%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):
sumber
nnoremap <leader>bd :%bd | NERDTree<cr>
E16: Invalid range
karena beberapa buffer dalam jangkauan sebenarnya tidak ada. Itu mengabaikan itu sampai saat ini.:ls
untuk 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
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#
sumber
%
- 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 :bd
menunjukkan:%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
sumber
set nohidden
untuk diatur?Dengan menggunakan
dan
sumber
Menutup semua buffer terbuka:
Menutup semua buffer terbuka kecuali untuk yang sekarang :
Tambahkan fungsi ini ke
.vimrc
dan panggil menggunakan:call CloseAllBuffersButCurrent()
.Peta kenyamanan:
sumber
:%bd|e#|bd#
nmap <Leader>\c :call CloseAllBuffersButCurrent()<CR>:NERDTree<CR>
Saya memasukkan ini ke file .vimrc saya
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
sumber
Ada sebuah plugin yang melakukan ini dan sedikit lebih banyak!
Lihat close-buffer.vim
sumber
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>bd
untuk menghapus semua buffer dan melompat kembali ke posisi kursor asli saya.%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.sumber
Saya suka
1,100bd
( disarankan oleh juananruiz ) yang sepertinya bekerja untuk saya.Saya menambahkan
quit!
ke pemetaan untuk memberi sayaIni membunuh semua buffer dan mematikan Vim, yang paling saya cari.
sumber
bdq
pemetaan yang menutup semua buffer dan keluar dari vim:q!
, padahal Anda hanya bisa menggunakannya:qa!
. Kecuali saya sedang menghadap sesuatuBagaimana kalau saja:
(terima kasih kepada https://thoughtbot.com/blog/vim-splits-move-faster-and-more-natural )
sumber