Bagaimana Anda lebih suka beralih di antara buffer di Vim?


92

Saya sudah mencoba MiniBufExplorer , tetapi saya biasanya berakhir dengan beberapa jendela yang menampilkannya atau menutupnya sama sekali. Yang saya suka adalah sesuatu seperti LustyJuggler dengan pencarian tambahan, cara saya beralih antar buffer di Emacs. Pasti ada script seperti ini?

Jawaban:


23

Saya telah menggunakan plugin Command-T vim dari Wincent Colaiuta selama beberapa bulan sekarang. Wincent menulis bagian-bagiannya yang perlu cepat di C, dan saya harus mengatakan itu! Dan, saya pikir logika pencocokan pola file-nya bahkan lebih baik daripada Command-T Textmate. Lihat screencast .

Plug-in Command-T untuk VIM menyediakan mekanisme yang sangat cepat dan intuitif untuk membuka file dengan sedikit penekanan tombol. Ini dinamai "Command-T" karena terinspirasi oleh jendela "Go to File" yang terikat ke Command-T di TextMate.

File dipilih dengan mengetik karakter yang muncul di jalurnya, dan diurutkan oleh algoritme yang mengetahui bahwa karakter yang muncul di lokasi tertentu (misalnya, segera setelah pemisah jalur) harus diberi bobot lebih.

Peralihan buffer yang lebih mudah berisi banyak tip berguna. Saya telah mengadaptasi berikut ini ke .vimrc saya, yang melakukan penyelesaian otomatis nama-buffer, memetakan perintah pengalihan buffer yang paling berguna ke <Leader> dan kunci baris beranda sisi kiri saya, dan menunjukkan nomor buffer saat ini di baris status :

"" Tab triggers buffer-name auto-completion
set wildchar=<Tab> wildmenu wildmode=full

let mapleader = ","

map <Leader>t :CommandT<Return>
map <Leader>a :bprev<Return>
map <Leader>s :bnext<Return>
map <Leader>d :bd<Return>
map <Leader>f :b 

"" Show the buffer number in the status line.
set laststatus=2 statusline=%02n:%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P

Saya juga menggunakan MiniBufExplorer , yang menyediakan daftar ringkas dari setiap buffer yang terdaftar di bagian atas horizontal sendiri.


73

Saya dulu menggunakan kombinasi tab dan beberapa contoh gvim, menyimpan grup file terkait sebagai tab di setiap contoh. Selama saya tidak mendapatkan terlalu banyak tab dalam satu contoh, bilah tab menunjukkan nama setiap file yang Anda edit secara sekilas.

Kemudian saya membaca posting oleh Jamis Buck tentang bagaimana dia beralih dari TextMate kembali ke vim , dan mempelajari beberapa trik hebat:

  • Ctrl-w s dan Ctrl-w v untuk membagi jendela saat ini
  • Ctrl-6 untuk beralih antara dua buffer di jendela yang sama.
  • fuzzyfinder.vim yang luar biasa yang memberi Anda pencarian pelengkapan otomatis file di direktori Anda saat ini atau buffer yang saat ini Anda buka
  • Jamis sendiri fuzzy_file_finder dan fuzzyfinder_textmate , yang sedikit memodifikasi bagaimana fuzzyfinder bekerja untuk berperilaku lebih seperti fitur serupa di TextMate (sejauh yang saya tahu, perbedaannya adalah bahwa itu cocok di mana saja di nama file, bukan hanya dari awal). Tonton video ini untuk melihat aksinya.

Sekarang saya hanya memiliki satu contoh gvim, dimaksimalkan, dan membaginya menjadi beberapa jendela sehingga saya dapat melihat beberapa file sekaligus. Saya mengikat Ctrl-F ke fuzzyfinder_textmate, jadi sekarang jika saya mengetik (katakanlah) Ctrl-F mod/usobitu membuka app / models / user_observer.rb. Saya hampir tidak pernah repot dengan tab lagi.

Perbarui 2010/08/07

Meskipun fuzzyfinder_textmate tetap keren, seperti yang ditunjukkan Casey di komentar, itu tidak lagi dipertahankan. Juga, itu (dan / atau fuzzyfinder.vim) menjadi agak lambat dan tidak stabil saat bekerja dengan proyek besar (banyak direktori atau file), jadi saya telah mencari alternatif lain.

Untungnya, tampaknya ada alternatif yang sangat bagus dalam bentuk Wincent Colaiuta 's Command-T Plugin . Ini memiliki perilaku yang sangat mirip (jika tidak sedikit lebih baik) dengan fuzzyfinder_textmate, tetapi terasa lebih cepat; itu juga memiliki fitur bagus seperti dapat membuka file yang ditemukan dalam split atau split vertikal. Terima kasih (dan suara positif!) Kepada David Rivers karena telah menunjuknya.


Ya, fuzzyfinder sangat cocok dengan yang saya inginkan.
Alexey Romanov

Fuzzyfinder_textmate dari Jamis melengkapi vim. Ini harus benar-benar menjadi fitur inti!
csexton

Sepertinya Jami telah berhenti mengerjakan proyek ini. Mungkin penulis asli akan menarik fitur ini? weblog.jamisbuck.org/2009/1/28/…
cmcginty

Sam, terima kasih atas properti yang Anda berikan kepada saya (pada hari ulang tahun saya!): D
David Rivers

14
Coba plugin ctrlp vim ( kien.github.com/ctrlp.vim ) yang mengimplementasikan fuzzyfinder tetapi dengan banyak fitur yang lebih berguna :)
Philip

33

Saya menggunakan dasar-dasar - ' :ls' + ' :bn' / ' :bp' + ' :b <part-of-name>'


8
:-) Saya tidak pernah berpikir saya akan melihat "simple" dan "': ls' + ': bn' / ': bp' + ': b <part-of-name>'" dalam kalimat yang sama.
paxdiablo

16
Pax, saya masih tidak melihatnya. :-)
csexton

Ini, plus :map <c-n> :bn<cr>dan :map <c-p> :bp<cr>, karena C-ndan C-pcepat untuk diketik dan memungkinkan perputaran antar buffer jika Anda menekannya berulang kali. (Saya tidak pernah menggunakannya untuk tujuan aslinya.) Ini seperti berpindah antar tab browser dengan C-PgUpdan C-PgDnatau pintasan apa pun yang dimiliki browser Anda.
Tobia

Ctrl + N adalah standar untuk 'File Baru' di sebagian besar editor lain dan Ctrl + P adalah perintah tempel, jadi bagi kebanyakan orang ini akan sangat membingungkan. Vim-unimpaired dari Tim Pope memberi Anda [bbuffer sebelumnya dan ]bbuffer berikutnya. Ditambah banyak barang lain yang menggunakan konsep ]untuk berikutnya dan [sebelumnya.
icc97

31

Saya suka "ctrl-w s" dan "ctlr-w v" untuk membagi jendela. Kemudian saya memetakan tombol gerakan (h, j, k, l) dengan ctrl ditahan untuk berpindah di antara jendela yang terbagi:

" Map ctrl-movement keys to window switching
map <C-k> <C-w><Up>
map <C-j> <C-w><Down>
map <C-l> <C-w><Right>
map <C-h> <C-w><Left>

Harus memindahkan tangan saya ke tombol panah itu mengganggu.

Selanjutnya, saya menyiapkan ctlr-tab untuk beralih di antara buffer di jendela saat ini (seperti banyak lingkungan lainnya):

" Switch to alternate file
map <C-Tab> :bnext<cr>
map <C-S-Tab> :bprevious<cr>

Ini telah bekerja cukup baik untuk saya selama beberapa tahun terakhir meskipun vim selalu memiliki lebih banyak rahasia daripada yang bisa Anda ketahui.


3
Komentar Anda "beralih ke file alternatif" menyesatkan karena Vim sudah memiliki file alternatif, ini adalah file sebelumnya yang Anda gunakan, dan Anda dapat mengganti file saat ini (%) dan alternatif (#) dengan mudah menggunakan ctrl-6.
greywh

10
Selain itu, <Cw> dengan hjkl akan mengganti jendela - tombol panah tidak diperlukan.
greywh

4
<CS-Tab> menanyakan RSI. Saya telah memetakan <SJ> ke :bpdan <SK> ke:bn
puk

3
Memetakan ulang <SJ> sepertinya pilihan yang buruk dalam mode normal, seperti yang biasa digunakan (untuk menggabungkan garis).
Michael Percy

18
nmap <Leader>bb :ls<CR>:buffer<Space>

dan tidak ada yang menyebutkan plugin ctrlp.vim yang bagus . Menggunakan plugin ini Anda dapat mencari buffer berdasarkan nama.


Saya suka pemetaan itu! Cerdas dan fleksibel.
ivan


5
imap <A-1> <Esc>:tabn 1<CR>i
imap <A-2> <Esc>:tabn 2<CR>i
imap <A-3> <Esc>:tabn 3<CR>i
imap <A-4> <Esc>:tabn 4<CR>i
imap <A-5> <Esc>:tabn 5<CR>i
imap <A-6> <Esc>:tabn 6<CR>i
imap <A-7> <Esc>:tabn 7<CR>i
imap <A-8> <Esc>:tabn 8<CR>i
imap <A-9> <Esc>:tabn 9<CR>i

map <A-1> :tabn 1<CR>
map <A-2> :tabn 2<CR>
map <A-3> :tabn 3<CR>
map <A-4> :tabn 4<CR>
map <A-5> :tabn 5<CR>
map <A-6> :tabn 6<CR>
map <A-7> :tabn 7<CR>
map <A-8> :tabn 8<CR>
map <A-9> :tabn 9<CR>

1
Hal yang paling menarik dengan Vim adalah Anda dapat mempelajari sesuatu setiap hari!
Luc M

Pertanyaannya adalah tentang buffer , bukan tab ... tetapi Anda dapat :tab sballterlebih dahulu, atau alih-alih menggunakan, :tabnAnda harus menggunakan:buffer
pera

5

Saya baru-baru ini menjadi lebih minimalis.

Untuk siklus buffer yang saya gunakan ]bdan [bdari yang tidak rusak: https://github.com/tpope/vim-unimpaired

Untuk melompat langsung ke buffer terbuka cukup gunakan penyelesaian tab Vim dengan :b. Beberapa huruf sudah cukup untuk masuk ke buffer terbuka dengan satu atau dua tab.

Demikian pula untuk membuka buffer yang saya gunakan :edengan jalur relatif dan tab lengkap.

Saya juga menggunakan :lssesekali untuk melihat buffer apa yang telah saya buka (dan untuk memeriksa status modifikasinya).

Untuk menghilangkan buffer yang saya gunakan :bwuntuk menghapus buffer. Saya biasanya membuat pemisahan sementara dan mengubah buffer untuk mempertahankan tata letak saya meskipun karena :bwjuga menutup jendela aktif.

Semua hal minibuf yang saya coba akhirnya mengganggu saya, dan saya tidak ingin beberapa hal pencocokan cerdas membuka file acak untuk saya. Jika saya benar-benar perlu menelusuri sesuatu, saya menggunakan NERDtree ( :e .).

IDK, Akhir-akhir ini saya juga menjatuhkan Yankring (karena rusak xp) dan mulai menggunakan register, dan saya baru-baru ini memutuskan f/ tmovement adalah hal terhebat yang pernah ada ...


Ini semua adalah nasihat yang bagus. Saya dipetakan <leader>llke :ls. Juga sangat berguna untuk memastikan bahwa Anda ada set wildmenudi Anda .vimrcsaat Anda mendapatkan menu kecil yang muncul dengan semua alternatif untuk:b
icc97

2

Yang sangat baik Buffer Explorer , be telah mendapat untuk menjadi seperti memori otot yang kuat bahwa saya menemukan diri saya berharap saya bisa menggunakannya dalam aplikasi lain. Saya merasa sangat cepat ketika secara aktif mengedit lebih dari dua file.


2

Saya telah menghabiskan cukup banyak waktu untuk membangun .vimrc saya untuk bekerja dengan proyek HTML :: Mason yang telah saya jalani selama empat tahun, jadi saya memiliki campuran tab dan jendela terpisah yang aneh. Untuk kesenangan menonton Anda:

map ;o :Sex <CR>
map <C-J> <C-W>j
map <C-K> <C-W>k
map <C-l> <C-W>l
map <C-h> <C-W>h
map ;] :tabnext<CR>
map ;[ :tabprev<CR>
map <C-t> :tabe +"browse ."<CR>
map <C-O> :NERDTreeToggle ~/curr/trunk/<CR>

2

Saya menggunakan tselectbuffer . Ini sangat cepat dan tidak seperti bufexplorer tidak memakan tempat di jendela Anda. Ini juga memiliki pencarian tambahan. Saya mencoba minibufexplorer dan saya menemukan navigasi di penyangga agak sulit.


Terima kasih atas penunjuknya, sekarang saya menggunakan keduanya. Default untuk BufExplorer adalah ,be, ,bs, ,bv, jadi saya dipetakan TSelectBuffer untuk ,bb.
Brady Trainor

2

Untuk membuat daftar dan beralih di antara buffer yang saya gunakan:

nnoremap <Leader>l :ls<CR>:b<space>

Untuk beralih di antara buffer:

map <Leader>n :bn<CR>
map <Leader>p :bp<CR>

2

Saya telah memetakan <S-J>dan <S-K>ke :bpdan :bn, meskipun saya akui saya tidak menggunakannya karena jumlah file lebih besar dari 10. Saya kemudian telah memetakan <C-J>dan <C-K>ke tab Gnome Terminal sebelumnya dan berikutnya, dan saya biasanya menjalankan 4 contoh vim untuk masing-masing 4 proyek berbeda yang saya kerjakan. Saya masih benar-benar berharap buffer berikutnya dan sebelumnya akan pergi ke sejarah buffer yang telah saya kerjakan, dan bukan urutan daftar buffer.


2

Saya menggunakan tselectbuffer. Ini sangat cepat dan tidak seperti bufexplorer tidak memakan tempat di jendela Anda. Ini juga memiliki pencarian tambahan. Saya mencoba minibufexplorer dan saya menemukan navigasi di penyangga agak sulit.


0

saya menggunakan simple: vsplit dengan ^ W + w / ^ W + r dan: tabnew dengan kombinasi tombol Ctrl + Alt + PgUp / PgDown.


1
Saya harus setuju dengan apa yang dikatakan Zathrus di sini . Tab di Vim (atau Emacs dengan TabBar dalam hal ini) tidak berfungsi seperti pada antarmuka tab biasa.
Alexey Romanov

0

Ketika ada beberapa buffer yang dibuka dalam sesi Vim, akan menjadi sulit untuk melacak buffer dan nomor buffernya masing-masing. Jika demikian, beralih ke file lain dapat dilakukan dengan lebih mudah menggunakan peta sederhana:

: nnoremap (F5): buffer (CR): buffer (Spasi)

vim.wikia.com

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.