Vim - daftar dinamis buffer terbuka di jendela


22

Saya telah menyelidiki beberapa cara untuk mempertahankan daftar buffer terbuka di Vim, dan beberapa di antaranya sangat bagus, tetapi tidak ada yang tampak seperti yang saya inginkan. Sangat mungkin bahwa tidak ada yang seperti yang saya inginkan ada, dan tidak ada salahnya untuk bertanya.

Saya telah menggunakan NERDTree di GVim, dan saya menyukai gagasan untuk meletakkan informasi di jendela kiri yang ramping. Saya telah menyusun diagram yang berguna untuk bagaimana saya ingin lingkungan saya terlihat:

|--------|---------------------------------------|
|        |                                       | 
|        |                                       | 
|NERDTree|           Windows                     | 
|        |                                       | 
|        |                                       | 
|        |                                       | 
|--------|                                       |
|        |                                       | 
|        |                                       | 
|  List  |                                       | 
|   of   |                                       | 
|  Open  |                                       | 
| Buffers|                                       | 
|        |                                       | 
|        |                                       | 
|--------|---------------------------------------|

Jadi pertanyaan saya adalah: Apakah ada cara asli-vim atau plugin-enabled untuk mempertahankan daftar buffer yang saat ini terbuka dan pilih / edit / tutup dari daftar itu, di dalam jendela yang mirip dengan NERDTree?

Saya mengerti bahwa pendekatan ini mungkin tidak sesuai dengan cara Vim dalam melakukan sesuatu , dan jika Anda merasa saya kehilangan sesuatu tentang cara mengelola banyak file dalam sesi Vim, silakan tinggalkan komentar dengan saran!


Saya juga mencari untuk memiliki daftar buffer di bawah (atau di atas) panel nerdtree. Saya akan mencoba untuk mengingat untuk memperbarui posting ini jika saya menemukan solusi yang baik (tapi terima kasih sudah bertanya)
Eric Drechsel

Jawaban:


7

Apakah Anda mencari repositori plugin vim.org? Ada puluhan plugins switching penyangga untuk Anda pilih seperti BufferGator atau SelectBuf . Atau, kebanyakan dari mereka dikompilasi dalam daftar yang bagus di Vim wiki .


Seperti yang Anda singgung di bagian terakhir dari pertanyaan Anda, sistem semacam itu tidak sesuai dengan selera semua orang.

Saya benci memiliki semua menu, tombol, dan daftar ini atau yang terbuka setiap saat: daftar buffer terbuka hanya berguna ketika Anda benar-benar perlu melompat ke buffer lain, membiarkan daftar seperti itu terbuka sepertinya membuang-buang ruang untuk saya . Hal yang sama dapat diterapkan pada baris status yang supercharged juga.

Saya menggunakan plugin yang sama untuk beralih antara buffer dan dengan cepat menjelajahi filesystem di sekitar file yang sedang saya edit. Dipanggil dengan ,f(file) atau ,b(buffer), jendela menghilang ketika saya selesai. Sempurna. Ada plugin serupa lainnya , coba semuanya jika Anda suka ide itu.

EDIT

Saya merasa terdorong untuk menambahkan GIF animasi CtrlP dalam aksi, mengganti buffer:

Beralih buffer dengan CtrlP

ENDEDIT

Penduduk asli :sb <Tab>juga cukup rapi tapi kurang seksi. Itu tidak mendukung pencocokan fuzzy tetapi memiliki beberapa keuntungan besar: itu built in dan berfungsi seperti :e <Tab>, :vs <Tab>dan sebagainya.


Terima kasih atas saran Anda. Sepertinya BufferGator dan SelectBuf sama-sama setidaknya dekat dengan fungsionalitas yang saya kejar, meskipun mereka mungkin perlu sedikit penyesuaian untuk menyelesaikannya. Saya sangat menghargai kekhawatiran tentang pemborosan ruang, tetapi dengan case use saya saat ini saya punya satu instance GVim terbuka selama berjam-jam sekaligus dengan banyak file terbuka sekaligus, melompat di antara mereka sesuai kebutuhan. Untuk keadaan ini, daftar buffer persisten sangat membantu. Namun, saya akan meluangkan waktu untuk mempelajari tentang pendekatan Vim yang lebih khas untuk manajemen buffer.
asfallows

Saya membayangkan bahwa Anda bekerja pada monitor besar. Sistem apa pun yang Anda pilih, Anda masih harus 1. beralih ke bufferlist, 2. memilih buffer, 3. menekan tombol untuk melompat ke sana apakah bufferlist sudah terlihat atau belum. Dengan demikian menggunakan buffer switcher "sesuai permintaan" sama efektifnya dengan menjaga bufferlist tetap terbuka dan menghemat ruang.
romainl

Saya sangat menghargai alasan itu, itulah sebabnya saya tidak terlalu khawatir tentang kemungkinan konfigurasi tepat yang saya jelaskan di sini mungkin tidak mungkin. Satu-satunya keuntungan utama dari daftar buffer persisten adalah bahwa diperlukan 0 penekanan tombol untuk memeriksa buffer mana yang terbuka, sepotong informasi yang saya anggap berharga dan juga menemukan diri saya sangat buruk dalam menyimpan dalam memori jangka pendek. (Dan ya, saya bekerja pada monitor yang cukup besar.)
Asfallows

@romainl, perintah vimrc apa yang Anda gunakan untuk memetakan ,buntuk mencari buffer dengan ctrlp?
bersalju

1
@snowbound, FWIW Saya sudah berhenti menggunakan CtrlP atau plugin serupa lainnya beberapa waktu lalu. Bagaimanapun, perintah saya adalah nnoremap ,b :CtrlPBuffer<CR>.
romainl

5

Saya sangat merekomendasikan MiniBufExplorer . Lihat juga alternatif untuk minibufexplorer?

Tangkapan layar


Terima kasih atas jawabannya - Saya menemukan MiniBufExplorer, dan sepertinya sangat bagus dalam hal ini, tetapi tidak memenuhi persyaratan yang saya jelaskan tentang bagaimana saya ingin mengelola buffer. Jika ternyata tidak ada cara yang baik untuk melakukan apa yang saya coba lakukan, atau saya memutuskan bahwa itu bukan cara yang tepat untuk melakukannya, MBE cukup tinggi dalam daftar saya untuk hal-hal untuk dicoba selanjutnya.
asfallows

1
Satu-satunya syarat yang tidak terpenuhi adalah bahwa daftar ada di sebelah kiri. Saya setuju, MiniBufExplorerada di atas (di mana tidak membuang banyak ruang seperti di sebelah kiri). Atau mungkin saya salah mengerti kebutuhan Anda.
Marco

Dengan pengaturan saya saat ini, memiliki daftar buffer di sebelah kiri seperti yang digambarkan sebenarnya merupakan peningkatan penggunaan ruang, karena NERDTree terbuka setiap saat tetapi tidak selalu kita sepenuhnya vertikal. Berbagi ruang itu dengan daftar buffer akan menyenangkan. Perlu dicatat bahwa ini adalah bagaimana saya menggunakan GVim, dan saya tidak ingin kolom kiri yang persisten jika saya menggunakan Vim di konsol. Sebagian besar penggunaan Vim konsol saya adalah "buka file, edit cepat, tutup vim"
asfallows

1

Ada cara untuk melakukan hal itu dengan menggunakan plugin winmanager . Dalam tangkapan layar ini saya menggabungkan NERDTree dan MiniBufExpl (github: techlivezheng / vim-plugin-minibufexpl, plug commit atm 349a9fbb terbaru) pada split vertikal yang sama dan beralih dengan F4. Secara teori solusi ini harus bekerja untuk kombinasi plugin lainnya.

Contoh .vimrc saya

"{{{Konfigurasi MiniBufExpl
biarkan g: miniBufExplVSplit = 20 "terbuka secara vertikal
biarkan g: miniBufExplSplitToEdge = 0 "terbuka relatif terhadap jendela sebelumnya (NERDTree)
"}}} Konfigurasi MiniBufExpl

"{{{winmanager config
"daftarkan plugin
biarkan g: NERDTree_title = 'NERD Tree'
biarkan g: MiniBufExpl_title = 'MiniBufExpl'

"atur tata letak
biarkan g: winManagerWindowLayout = 'NERDTree | MiniBufExpl'

"pengendali untuk NERDTree
fungsi! NERDTree_Start ()
    exec 'NERDTree'
fungsi akhir

"pengendali untuk MiniBufExpl
fungsi! MiniBufExpl_Start ()
    exec 'MBEOpen'
fungsi akhir

"pemetaan untuk mengaktifkan perpecahan ke F4
nmap <F4>: WMToggle
"}}} konfigurasi winmanager

Masalah:

  • NERDTree tidak menggunakan buffer yang dibuat oleh winmanager tetapi terbuka sendiri ...
  • ... oleh karena itu buffer winmanager tetap tidak digunakan
  • MiniBufExpl tidak memperbarui dirinya dengan benar ketika melompat di antara buffer

Perilaku yang saya capai jauh dari sempurna tetapi ini awal yang baik.

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.