Tampilan berlapis-lapis Vim (Windows, Buffer dan Tab) membuat saya sedikit bingung. Katakanlah saya membagi tampilan (: sp) dan kemudian memilih buffer yang berbeda untuk ditampilkan di setiap jendela. Sekarang saya ingin menutup salah satu buffer, namun saya tidak ingin jendelanya ditutup (Setelah menutupnya dapat menampilkan buffer berikutnya pada daftar atau buffer kosong, tidak masalah). Bagaimana saya bisa melakukan ini?
Terima kasih.
DeleteCurBufferNotCloseWindow()
bekerja dengan baik dan cukup mudah dibaca . (Penafian: jawaban saya)Jawaban:
Ada skrip di wiki Vim untuk melakukan ini. Saya tidak berpikir ada bawaan yang melakukan apa yang Anda inginkan.
Versi terbaru vim-bufkill ada di github .
sumber
Saya mengacaukan ini sedikit dan akhirnya muncul dengan:
Berikut versi salin / tempel untuk pemetaan kunci:
Saya telah mengujinya sedikit dan berfungsi secara konsisten dalam berbagai kondisi. Jika digunakan pada buffer terakhir, Anda akan mendapatkan buffer kosong baru.
Lempar ini ke .vimrc Anda:
Mulai ulang Vim, atau hanya
:source ~/.vimrc
agar perubahan diterapkan. Lain kali Anda ingin menutup buffer ketik saja:\q
(jika\
adalah kunci pemimpin Anda)sumber
map <leader>q :bp<bar>sp<bar>bn<bar>bd<CR>
. Mulai ulang VIM, lain kali Anda ingin menutup buffer ketik saja:\q
sp
).sp
denganvsp
. entri .vimrc saya terlihat seperti ini:cnoremap bd bp<bar>vsp<bar>bn<bar>bd
Saya mencari hari ini dan menemukan
:b#|bd#
yang mengubah jendela saat ini ke buffer yang sebelumnya terbuka dan menghapus / menyembunyikan buffer yang baru saja Anda alihkan.
Ini membutuhkan setidaknya dua buffer yang diketahui.
Jika jendela lain tetapi arus menunjukkan buffer yang sama, ini masih akan merusak pemisahan. Anda dapat mengubah semua jendela ke buffer yang sebelumnya terbuka dengan
:windo b#
Saya menambahkan lebih banyak detail tentang perintah sebelumnya yang membahas pemetaan untuk itu (dan beberapa jebakan) dalam jawaban untuk pertanyaan serupa .
sumber
:#b|#bd
Hanya menukar perintah buffer & nomor buffer di atas.:bn|bd#
atau:bp|bd#
beralih ke buffer terbuka sebelumnya atau berikutnya, masing-masing, daripada buffer yang terakhir Anda akses (b #).Bekerja sebagaimana mestinya sampai satu buffer terbuka di beberapa jendela. Cukup baik kecuali Anda ingin menggunakan skrip yang lebih besar di luar sana.
Sunting: inilah yang saya gunakan sekarang:
sumber
nmap <leader>d :ene<CR>:bd #<CR>
Saya pikir inilah yang Anda cari
http://www.vim.org/htmldoc/windows.html#window-moving
Coba ini:
Lihat apakah buffer id Anda menggunakan
Anda akan melihat daftar buffer di sana seperti
jika Anda ingin menghapus b.py dari buffer
jika Anda ingin menghapus / menutup semua dari buffer
sumber
Bagi mereka yang menggunakan NERDTree.
Saya memperbaiki ini menggunakan plugin ini https://github.com/jistr/vim-nerdtree-tabs dan sekarang saya dapat menutup satu-satunya buff / file / tab tanpa menutup jendela.
Setelah plugin di atas diinstal, letakkan kode berikut di .vimrc saya:
Deskripsi untuk variabel di atas adalah: Tutup tab saat ini jika hanya ada satu jendela di dalamnya dan itu adalah NERDTree (default 1)
Info lebih lanjut di sini: https://github.com/jistr/vim-nerdtree-tabs#configuration
sumber
Saya tidak berpikir ada satu cara untuk melakukan ini, tetapi Anda dapat melakukan
:enew
atau:ls
mendaftar buffer Anda dan menukar ke yang lain menggunakan:b [number]
.Setelah Anda mendapatkan buffer yang berbeda di jendela
:bd #
akan menghapus buffer sebelumnya di jendela, dan karena buffer saat ini masih ada, jendela tidak akan ditutup.sumber
Saya biasa menggunakan:
Tetapi saya menemukan kejadian-kejadian tertentu di mana itu menutup jendela saya.
Baru-baru ini saya perhatikan bahwa saya selalu menggunakan ini ketika saya mengerjakan sebuah proyek dan perlu segera membukanya
.tmux.conf
.zshrc
sebelum kembali bekerja.Untuk penggunaan ini, saya menemukan yang lebih baik untuk:
C-6
:bd#
untuk menghapus buffer sebelumnya (saya telah memetakannya seperti ininnoremap <leader>d :bd#<CR>
:)Ini memungkinkan saya untuk mengontrol buffer tempat saya kembali dan terasa lebih alami.
sumber
Akan
lakukan apa yang kamu inginkan? itu akan mengedit buffer baru tanpa nama di jendela saat ini membiarkan file yang ada terbuka di jendela lain.
sumber
Solusi favorit saya untuk ini adalah plugin bufkill.vim ( GitHub ). Ini memberikan versi alternatif dari berbagai
:b
perintah -prefix yang bekerja sama seperti rekannya, tetapi membiarkan jendela terbuka. Mereka menampilkan apa pun yang terkandung dalam buffer terakhir yang terlihat, atau buffer kosong / baru jika tidak ada buffer sebelumnya.Dari dokumentasi:
sumber
Untuk 'menutup' tampilan, gunakan
:hid[e]
. Berfungsi jika Anda telah berhasil membagi viewport atau membuka banyak file. Anda tidak dapat menyembunyikan buffer terakhir yang ditampilkan.1 Tip lebih lanjut yang membantu saya: gunakan
:e ./path/to/file.work
untuk membuka file di viewport tanpa membelah jendela.PS Pada dua hari setelah vim saya masih kesulitan menemukan perintah bantuan yang tepat. Mudah-mudahan ini akan membantu orang lain terus bekerja sampai mereka benar-benar mendapatkan waktu untuk memahami vim.
sumber
Ini adalah fungsi vimscript yang sangat mudah dibaca, yang menangani semua kasus dengan baik ,
:bd
(jika hanya satu jendela, panggil saja!),:enew
.buffer-list
, alihkan ke buffer , jika tidak lanjutkan berikutnya, melalui:bn
.sumber
Jika Anda seperti saya dan Anda datang ke sini mencoba melakukan yang sebaliknya , tutup jendela tanpa menutup buffer, Anda dapat melakukannya melalui:
:close
sumber
Versi sederhana yang saya gunakan secara pribadi adalah
Ini pergi ke buffer sebelumnya dan menghapus buffer lain (yang sebenarnya adalah buffer asli tempat kita melompat). Ini melakukan apa yang Anda harapkan dalam 99% kasus tanpa skrip yang rumit.
Sebagai pintasan keyboard, saya menggunakan yang berikut ini
sumber
gunakan ": bd" sebagai perintah.
sumber