Bagaimana cara menutup buffer tanpa menutup jendela?

23

Saya biasanya membuka beberapa jendela dan membiarkan beberapa buffer tetap terbuka. Karena MO saya dalam penjelajahan buffer adalah menggunakan pintasan cepat untuk :bndan :bp, saya ingin menutup buffer yang tidak dibutuhkan agar mengganggu selancar buffer saya.

Tetapi rasa sakitnya adalah, mengeluarkan :bddan :bwmenghasilkan menutup jendela juga, kalau-kalau ada beberapa yang terbuka. Bagaimana cara menutup (menghapus) buffer dan membiarkan windows tetap utuh?

Solusi yang terinspirasi oleh jawaban @ peth

:command! BW :bn|:bd#

Sederhana saja. Tidak berfungsi dengan baik hanya dengan satu buffer terbuka (saya mendapatkan perilaku berbeda tergantung pada cara saya membuka file) tetapi itu bukan masalah besar. :)

unperson325680
sumber

Jawaban:

12

Ini bisa menyebalkan, pertanyaan ini muncul berulang kali #vim(Freenode) juga.

Beberapa orang merekomendasikan untuk tidak menghapus buffer dan beralih dengan yang :b partial<Tab>bukan :bn, yang berfungsi, tetapi bukan itu yang Anda minta.

Cara terbaik yang saya tahu untuk melakukannya adalah beralih ke buffer lain dan kemudian :bd#, yang bisa Anda petakan, tentu saja.

Lihat juga Menghapus buffer tanpa menutup jendela pada wiki Vim.

peth
sumber
Script terlihat solusi yang saya bersedia terima jika tidak ada cara resmi. :)
unperson325680
21

Saya sedikit mengacaukan ini dan akhirnya muncul dengan:

:bp | sp | bn | bd

Inilah versi salin / tempel untuk pemetaan kunci:

:bp<bar>sp<bar>bn<bar>bd<CR>

Atau perintah untuk .vimrc Anda (panggilan dengan: Bd):

perintah Bd bp | sp | bn | bd

Saya sudah mengujinya sedikit dan bekerja secara konsisten dalam berbagai kondisi. Ketika digunakan pada buffer terakhir itu akan meninggalkan Anda dengan buffer kosong baru.

Jonah Braun
sumber
3
Saya kehilangan split saya jika saya menutup buffer terbuka di kedua windows, seperti buffer terakhir. 1 karena lebih sederhana daripada skrip wikia untuk bd tanpa menutup jendela .
Leif Carlsen
Saya menggunakan vim-bbye tetapi jawaban Anda jauh lebih sederhana dan tidak bergantung pada skrip apa pun. Terima kasih.
Andrew-Dufresne
4

Jendela adalah viewport ke dalam buffer. (Lihat :help window.) Anda tidak dapat memiliki jendela tanpa buffer terkait. Anda dapat menggunakan perintah seperti :enewuntuk mengganti konten jendela saat ini dengan buffer kosong.

garyjohn
sumber
Saya mengharapkan bahwa setelah buffer dihapus, vim dapat beralih ke buffer lain, atau buka yang baru jika perlu.
unperson325680
@progo, itu memerlukan beberapa skrip, yaitu plugin, atau pemetaan sederhana.
Clint Pachl
2

yang bufkill.vim Plugin bekerja dengan baik. Saya suka menggunakannya dengan vim-command-w untuk fungsionalitas dan fungsi tambahan (seperti itu akan menutup split jika buffer terakhir atau close vim jika buffer / split terakhir).

Aaron Jensen
sumber
2

Inilah solusi lain:

map <C-W>o <C-W>n<C-W><C-W><C-W>c

Mengetik Ctrl + W maka o akan diam-diam membuat jendela baru dan menutup jendela lama. Kursor ditinggalkan di jendela baru. Ada sejumlah efek positif:

  1. Dimensi pemisahan asli Anda dipertahankan.
  2. Buffer kosong dimuat di split baru.
  3. Buffer asli masih dimuat, gunakan: buffer untuk mendaftar.
  4. Ctrl + o memindahkan kursor ke posisi semula di buffer lama jika Anda perlu kembali.
  5. Bekerja dengan baik bahkan jika hanya satu jendela yang dimuat.
rustushki
sumber
1

Saya pikir masalahnya adalah kebanyakan orang mengharapkan vim buffer dan window menjadi sesuatu yang bukan.

Orang-orang cenderung menganggap jendela vim sebagai proses mandiri yang memiliki daftar buffer sendiri, tetapi sayangnya tidak. Jendela vim hanya merupakan viewport dari buffer-nya.
Karenanya banyak masalah muncul, seperti masalah Anda, atau masalah yang berbeda jendela berbagi daftar buffer yang sama sehingga Anda tidak dapat mengedit Buffer 1 di Window A, dan biarkan Window B mengabaikan Buffer 1 di daftar buffernya.

Solusi saya adalah membuka dua contoh vim, sehingga Anda dapat memiliki jenis jendela vim yang Anda inginkan. Ini bekerja paling baik pada ubin WMs.

octref
sumber
1

Biasanya saya hanya membuka menu sambil di buffer apa saja. Ini akan membuka menu di panel kiri dan kursor akan aktif di sana. Jadi saya hanya beralih kembali ke buffer aktif dan menghapus buffer.

Setelah itu saya bisa membuka file lain dari menu.

Langkah saya adalah:

:Vex

ctrl + w + w

:bd
Apit John Ismail
sumber