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.