Vim: Hapus buffer tanpa kehilangan jendela pemisahan

149

Ketika buffer dihapus (perintah "bd [elete]"), buffer tidak hanya menghapus buffer tetapi juga menghapus jendela split tempat buffer itu berada.

Apakah ada cara untuk menghapus / membongkar buffer dan menjaga window split?

byneri
sumber
Ini bekerja dengan baik untuk saya.
Rumple Stiltskin
[Yang ini DeleteCurBufferNotCloseWindow()berfungsi dengan baik dan cukup mudah dibaca] ( stackoverflow.com/a/44950143/3625404 ).
qeatzy
2
Kemungkinan duplikat buffer dekat Vim tetapi tidak memecah jendela
ezdazuzena

Jawaban:

326

bp|bd # akan melakukannya.


Detail: bp("buffer sebelumnya") memindahkan kami ke buffer berbeda di jendela saat ini ( bnakan berfungsi juga), lalu bd #("buffer delete" "file alternatif") menghapus buffer yang baru saja kami pindah. Lihat: help bp, help bd, help alternate-file.

Lumpur
sumber
71
Anda tidak tahu sudah berapa lama saya mencari sesuatu seperti ini yang sangat sederhana, tidak memerlukan seluruh skrip untuk menjalankannya. Dalam VIMRC saya, sekarang saya memetakan ini untuk CTRL + C:nnoremap <C-c> :bp\|bd #<CR>
Cloud
11
Saya mencoba memetakan ulang menggunakan nmap <silent> <leader>d :bp|bd #<CR>, tapi saya mengerti E94: No matching buffer for #<CR>.
Fábio Perez
22
Letakkan backslash di depan |(misalnya :bp\|bd)
Mud
4
Saya tahu saya tidak perlu menginstal plugin untuk ini. Terima kasih!
Akash Agrawal
2
b#|bd #akan beralih ke buffer yang terakhir digunakan alih-alih yang berikutnya / sebelumnya. Namun, itu akan melompat ke buffer tersembunyi jika sudah set hidden, jadi saya membuat fungsi BD yang lebih cerdas untuk menghindarinya.
c24w
15

Anda dapat menambahkan yang berikut ini agar Anda .vimrcbisa Bdbekerja bdtetapi tanpa menyentuh celah jendela:

command Bd bp\|bd \#

Saya menemukan ini sebagai pelengkap yang berguna untuk apa yang dijawab Mud.

rrosa
sumber
Itulah yang saya miliki di .vimrc saya. :)
Mud
Dan Anda dapat menambahkan 3 perintah untuk membongkar, menghapus, dan menghapus buffer: perintah! BUN bp \ | bun \ # perintah! Perintah BD bp \ | bd \ #! BW bp \ | bw \ # yang setara dengan apa yang disediakan bufkill tetapi dengan 3 baris di vimrc, bukannya plugin 700+ baris!
fievel
3
Bagi saya ini hanya berfungsi dengan ini di .vimrc command! Bd bp|bd #. Perintah di atas dengan `` menyimpan buffer di daftar buffer.
mljrg
3

Saya melakukan sesuatu yang mirip dengan @Mud, tetapi beralih ke buffer tampilan sebelumnya #, bukan buffer sebelumnya dalam daftar buffer. Berikut ini adalah kunci yang mengikat di saya .vimrc:

nnoremap <silent> <leader>q :lclose<bar>b#<bar>bd #<CR>

Tutup jendela Lokasi, jika ada, pindah ke buffer tampilan sebelumnya, lalu tutup buffer beralih terakhir.

lvarayut
sumber
1

Pilihan saya adalah

:sb # | bd #
:sb 1 | bd #
: <1. Recall Buffer> | <2. Delete Buffer>

Pikirkan Seperti itu! /// <1. Ingat Buffer> | <2. Hapus Buffer>

:vert sb 2 | bd #
:vert sb <tab key~completed file(buffer)name> | bd #

Mengapa?! Mudah diingat 3 (1) kata kunci!

  1. sb split_buffer
  2. bd hapus buffer ▶ kata kunci 2 sederhana
  3. # atau Jumlah buffer
  4. vert ▶ short_form of vertical (split_buffer atau yang lain)

Itu mudah dan sangat berguna dalam banyak kasus lainnya!

Semoga harimu menyenangkan! :)

Jeongpyo Lee
sumber
0

Dulu saya menggunakan:

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

Tetapi saya menemukan kesempatan-kesempatan tertentu ketika menutup jendela saya. Selain itu, buffer berikutnya atau sebelumnya mungkin bukan yang ingin Anda tampilkan di split.

Sekarang saya melakukan ini:

  • beralih ke buffer yang ingin saya kerjakan
  • Hapus buffer alternatif

nnoremap <leader>d :bd#<CR>

DaftWooly
sumber