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?



Ini bekerja dengan baik untuk saya.
Rumple Stiltskin

[Yang ini DeleteCurBufferNotCloseWindow()berfungsi dengan baik dan cukup mudah dibaca] ( stackoverflow.com/a/44950143/3625404 ).
qeatzy

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.


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.


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.


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! :)


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>

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.