Salah satu cara untuk memilih buffer dalam vim bisa dengan menelusuri daftar buffer, menggunakan perintah standar sebagai :ls
, atau dengan beberapa plugin / kode vimscript eksternal untuk menelusuri daftar di jendela .
Katakanlah saya ingin melompat ke buffer secara langsung, secepat mungkin.
Untuk melintasi daftar buffer dalam mode berurutan, saya sekarang menggunakan <C-J>
<C-K>
cara pintas, setelah mengatur di .vimrc saya:
" move among buffers with CTRL
map <C-J> :bnext<CR>
map <C-K> :bprev<CR>
Cara lain (akses langsung) dapat beralih dengan nomor : mengetahui nomor buffer, dimungkinkan untuk beralih secara langsung dengan memasukkan nomor buffer diikuti oleh <C-^>
. Jadi jika saya ingin beralih ke buffer nomor 5, saya akan menekan 5<C-^>
.
Tapi ini sepertinya tidak berfungsi untuk saya (saya menggunakan vim 7.4 pada kotak ubuntu, dari tamu Windows, dengan keyboard Italia ). Saya menduga itu karena ^
karakternya ada pada huruf besar ^ì
di keyboard Italia, jadi sebenarnya untuk mendapatkannya ^
saya perlu menekanSHIFT-^
Ada ide?
<c-6>
bukan<c-^>
?1<C-6>
beralih ke nomor penyangga 1. Terima kasih!Jawaban:
The
:b
perintah juga dapat mengambil substring dari nama file dari buffer yang Anda ingin perjalanan ke, yang sangat nyaman.Misalnya, jika Anda memiliki tiga buffer
foo
,bar
danbaz
, kemudian:b bar
akan beralih kebar
file.:b o
akan beralih kefoo
file.:b a
akan memberikan Anda sebuah kesalahan karena bisa berarti baikbar
ataubaz
, tetapi Anda dapat memperbaiki nama untuk menjadi lebih spesifik dengan, misalnya, : ↑ r Enter.Ini bisa sangat berguna, karena itu berarti bukan
Anda dapat melakukan sesuatu seperti
yang jauh lebih pendek dan lebih mudah.
Perintah ini juga dapat mengambil nomor, jika Anda ingin menggunakannya:
sumber
:b
perintah. Misalnya, jika Anda memiliki dua bufferpath/to/foo
danpath/to/tofu
, perintah:b f<Tab>
tidak akan pernah cocokpath/to/tofu
, karena cocok di awal katapath/to/foo
.:5b
sedikit lebih pendek dari:b 5
;-)Inilah yang saya gunakan:
Sekarang menekan
\b
akan mendaftar buffer yang tersedia dan mempersiapkan:b
untuk Anda.Kemudian Anda bisa mengetikkan nomor buffer , dan tekan Enter.
Atau Anda dapat mengetik bagian dari nama file , dan tekan Enter. (Namun saya biasanya menekan Tab sebelum menekan Enter, untuk memeriksa saya mendapat buffer yang tepat. Jika tidak, saya melanjutkan bersepeda dengan Tab sampai saya mendapatkan yang saya inginkan.)
Bahkan, saya menggunakan versi yang sedikit tweak di atas:
Ini akan mencegah
-- More --
muncul dari ketika Anda memiliki lebih banyak buffer daripada garis yang tersedia untuk menampilkannya.Tetapi jika Anda biasanya tetap memiliki
'more'
opsi yang dinonaktifkan, pemetaan ini akan sangat mengganggu Anda, karena itu mengaktifkan kembali'more'
opsi setelah melakukannyals
!sumber
[count]<C-^>
ketika Anda tahu nomor buffer, itu cukup berguna ketika Anda tidak tahu.[count]<C-6>
bagi saya tampak cara tercepat untuk beralih ke buffer yang dikenal[count]<C-^>
hari ini. Tapi itu berarti saya harus menjalankan MiniBufExplorer atau yang serupa, untuk mengetahui apa nomor buffer!:CtrlPBuffer
dari plugin CtrlP (4k ★)Fitur utama dari plugin ini adalah untuk menyediakan pencocokan fuzzy untuk dengan mudah membuka buffer berbeda dengan umpan balik visual.
Buka daftar buffer fuzzy dengan
:CtrlPBuffer
atau tekan<C-p>
diikuti oleh<C-b>
untuk mengubah mode kebuffer
.Masukkan jumlah karakter yang cukup untuk menentukan buffer yang ingin Anda buka.
Anda juga dapat menggunakan
<C-j>
dan<C-k>
untuk menelusuri daftar dan memilih buffer secara manual.Kustomisasi
Jika Anda ingin segera membuka daftar buffer
<C-p>
, tambahkan baris berikut ke vimrc Anda:Anda dapat menggunakan
<C-f/b>
untuk mengganti mode dari jendela ctrlp.Saya pribadi menggunakan
let g:ctrlp_cmd = 'CtrlPMRU'
. Daftar (mru) yang terakhir digunakan juga berisi buffer yang dibuka. Jika Anda menggunakan berbagai mode ctrlp dan ingin tetap menggunakan mode terakhir Anda, Anda dapat mengaturlet g:ctrlp_cmd = 'CtrlPLastMode [--dir]'
.Plugin serupa
Ada lebih banyak plugin yang menyediakan daftar buffer dengan prompt interaktif dengan pencocokan fuzzy, misalnya
Sisi gelap vs. sisi terang
(yaitu pengaturan vim plugin-berat vs cara vim)
Sebelum Anda memutuskan untuk menggunakan plugin yang lebih kompleks ini, pelajari jawabannya dengan @Doorknob dan @joeytwiddle . Secara khusus, periksa one-liner jika salah satu dari mereka sudah memenuhi kebutuhan Anda.
nnoremap <Leader>b :b <C-d>
nnoremap <Leader>b :ls<Cr>:b<Space>
Menginstal plugin hanya untuk switching buffer mungkin merupakan kerja keras. Lihat juga komentar di https://www.vi-improved.org/recomendations dan artikel oleh Drew Neil 'Tentang mengasah gergaji' .
sumber
map <leader>a <ESC>:CtrlPBuffer<CR><CR>
untuk melompat ke buffer yang sebelumnya dibuka dengan<leader>a
(sementara<leader>b
hanya membuka daftar buffer untuk saya)<C-^>
(=<C-6>
)? lihat:h CTRL-^
. Afaik, ini hanya melakukan apa yang<leader>a
tampaknya pemetaan Anda lakukan. Karena itu saya pikir Anda baru saja memberikan contoh mengapa orang mengatakan menggunakan plugin dapat menyebabkan pengguna vim yang tidak tahu apa yang sudah dapat dilakukan vim sendiri.Selain jawaban yang sangat berguna oleh joeytwiddle dan Doorknob jangan lupa
:b#
, yang beralih ke buffer yang terakhir digunakan. Itu juga bisa dilakukan dengan adil<C-^>
. Ketika Anda memiliki banyak buffer dan Anda terus-menerus beralih di antara mereka, buffer terbaru biasanya merupakan tujuan paling umum.Secara pribadi saya menggunakan kombinasi banyak metode. Ketika saya bekerja dengan terutama dua buffer dan sisanya dibuka hanya untuk referensi sesekali, saya cenderung beralih di antara mereka dengan
:b#
atau<C-^>
. Ketika saya harus bekerja dengan lebih banyak dari mereka dan berganti lebih sering, saya menggunakan salah satu nomor (seperti pada ujung joeytwiddle), atau bagian dari nama (seperti pada ujung Doorknob) dengan TAB untuk menyelesaikannya. Ketika nama-nama membingungkan, dan ada banyak buffer dibuka (biasanya lebih dari 10), saya lebih sering menggunakan Ctrl-P plugin ( https://github.com/kien/ctrlp.vim ) Dengan dua penekanan tombol cepat saya mendapat daftar semuanya dan saya dapat menggunakan pencarian fuzzy yang kuat untuk menemukan apa yang saya inginkan dengan cepat.sumber
[b
dan]b
dari pluginvim-unimpaired
(> 2k ★)Jika Anda telah menginstal
vim-unimpaired
, Anda dapat menggunakan[b
(:bp[revious]
) dan]b
(:bn[ext]
)untuk bersepeda melalui buffer terbuka. Tidak perlu mendefinisikan pemetaan yang lebih berharga untuk perintah yang sama. Selanjutnya, melompat ke buffer pertama dan terakhir dapat dilakukan oleh
[B
(:bf[irst]
) dan]B
(:bl[ast]
).Ada lebih banyak pemetaan-braket yang terkandung di
vim-unimpaired
mana Anda mungkin menemukan berguna. Mereka semua mengikuti skema yang sama yang membuatnya mudah menghafal mereka.Sisi gelap vs. sisi terang
Plugin ini dapat dianggap ringan dan 'vimish'. Itu dilambangkan oleh komunitas #vim sebagai plugin "tidak berbahaya".
sumber
3[b
untuk melompat tiga buffer kembali.Saat ini saya menggunakan tombol
<Leader>
+number
untuk beralih. Kunci pemimpin adalah<space>
kunci saya . Saya juga menggunakan vim-airline untuk menunjukkan buffer nr di atas jendela.Sementara bufnr sering melebihi 10, jadi saya men-tweak pemetaan saya sendiri, jika
number
ini satu-satunya yang cocok, segera ganti buffer, jika tidak, tunggu lebih banyak input angka atau<space>
kunci untuk konfirmasi:Kode disisipkan dari sini
Ngomong-ngomong, saya juga menggunakan
<S-h>
dan<S-l>
untuk:bp
dan:bn
, atau:tabp
dan:tabn
jika lebih dari satu tabpage dibuka saat ini. Ini cukup intuitif bagi saya.sumber
Hari-hari ini saya gunakan
[buffer_number]<Ctrl-^>
untuk mengganti buffer karena sangat cepat.Tetapi bagaimana cara mengetahui nomor buffer? Saya menggunakan MiniBufExplorer sehingga saya selalu dapat melihat nomor buffer di bagian atas Vim.
Saya juga menggunakan pemetaan berikut, karena
<C-^>
agak sulit dijangkau dengan satu tangan.Pada mesin baru tanpa konfigurasi, saya kembali ke
:b [part_of_filename]<Tab><Enter>
sumber