Ketika saya perlu mengerjakan proyek yang berbeda pada saat yang sama saya memiliki alur kerja berikut:
- Saya membuat satu tab untuk setiap proyek.
- Di setiap tab saya membuka file yang ingin saya edit, yang membuat beberapa buffer.
- Optionnaly jika saya perlu melihat dua (atau lebih) file pada saat yang sama saya membuat windows split jadi saya memiliki tab yang berisi jendela berbeda yang menunjukkan satu buffer.
Untuk menavigasi antara buffer saya, saya tidak benar-benar menggunakan :ls
dan :b [name or number of buffer]
sebaliknya saya membuat beberapa pemetaan yang nyaman memungkinkan saya untuk beralih antara buffer dengan :bnext
dan:bprevious
Cara bekerja ini cukup bagus tetapi ada sesuatu yang mengganggu saya: buffer dibagi di antara tab.
Jika saya membuka file1
dan file2
masuk tab1
dan file3
masuk tab2
, jika dalam tab1
saya menggunakan beberapa waktu :bnext
saya akan melihat file3
di tab ini yang saya tidak mau. Alur kerja yang ingin saya dapatkan adalah sebagai berikut :
- Mulai vim (saya memiliki tab pertama dengan buffer di dalamnya):
$ vim foo
- Tambahkan buffer ke tab ini:
:e bar
- Buka tab baru dan alihkan ke sana:
:tabnew
- Buka buffer baru di tab ini:
:e baz
- Jika saya tetap di buffer ini dan melakukan
:bnext
atau:bprevious
saya akan tetap dibaz
buffer (karena itu adalah satu-satunya di tab ini) - Jika saya masuk ke tab sebelumnya
:tabprevious
dan menjalankan beberapa waktu:bnext
saya akan beralih hanya antarafoo
danbar
buffer tetapi tidak akan melihatbaz
Jadi inilah pertanyaan saya: Apakah mungkin untuk mengikat satu set buffer ke sebuah tab dan membuat vim melarang akses ke beberapa buffer dari tab lain daripada yang seharusnya?
Catatan: Saya sadar bahwa menggunakan :b [myBuffer]
akan menjadi cara untuk menyimpan buffer di tab, tetapi ketika saya memiliki 3 atau 4 file untuk diedit, saya merasa seperti saya benar-benar lebih cepat menggunakan pemetaan daripada mengetikkan nama buffer (bahkan jika saya bisa ketik hanya beberapa karakter yang cocok dengan nama buffer) .
alt+tab
(atau lebih buruk lagi mouse) terasa jauh lebih mudah daripada beralih tab dalam vim.Jawaban:
Mhh, saya tidak menemukan plugin apa pun di sana, tetapi Anda dapat menulisnya sendiri. Anda perlu mempelajari vimscript untuk ini. Saya baru saja mengimplementasikan fungsionalitas yang dapat Anda alihkan di antara buffer dalam satu tab (belum ada penghapusan). Anda dapat menyalin ini ke vimrc Anda:
Tutup vimrc Anda dan buka lagi. Untuk menemukan buffer selanjutnya cukup gunakan
atau tentukan perintah atau pemetaan Anda sendiri. Ini akan berfungsi selama Anda tidak menutup atau menghapus tab atau buffer. Ini juga tidak akan berfungsi untuk beberapa buffer. Dibutuhkan lebih banyak pekerjaan untuk menambahkan fitur-fitur itu, tetapi pasti bisa dilakukan.
sumber
Buffer bersifat global dan tidak ada yang dapat Anda lakukan selain menulis lapisan abstraksi Anda sendiri di atas halaman tab, jendela, dan buffer. jawaban philolo1 menunjukkan pendekatan yang masuk akal untuk masalah ini tetapi Anda akan segera menemukan batas-batas "solusi" dan perlu menduplikasi banyak fitur bawaan seperti
:bufdo
atau file alternatif ..."Argumen" di sisi lain, bisa bersifat lokal ke jendela sehingga mungkin lebih berguna dalam alur kerja Anda daripada "buffer" (dalam arti kata yang paling ketat):
Argumen tidak sefleksibel buffer tetapi mereka dapat memberikan dasar yang lebih dapat diandalkan untuk alur kerja Anda.
Tetapi bekerja pada setiap proyek dalam contoh Vim sendiri menurut saya satu-satunya solusi praktis.
sumber
Jadi, dengan beberapa penundaan, saya pikir saya mungkin telah menemukan jawaban yang memuaskan (setidaknya untuk saya!). Anda membutuhkan dua plugin Shougo:
dan peta akses cepat untuk digunakan alih-alih
:ls
, untuk melihat (dan memilih) hanya penyangga dari tab saat ini .Misalnya, sesuatu seperti:
Anda sekarang dapat bergerak melalui daftar buffer tab saat ini (
j
,k
), pilih satu (CR
), batalkan (q
), masukkan mode "input" (masukkan) untuk dengan cepat menyaring pemilihan buffer dengan mengetik beberapa huruf, atau bahkan menekanTab
untuk membuka daftar tindakan untuk item yang dipilih saat ini (mis. untuk membuka buffer di atas yang aktif saat ini) - singkatnya, Anda bertindak dengan cara umum "Bersatu".(lihat juga
:h unite_default_key_mappings
dan Unite help secara umum).Dan sekarang untuk trik terakhir (belum opsional). Dengan altercmd , Anda dapat membuat
ls
perintah Anda sendiri, diaktifkan dengan tab, (berdasarkan fungsionalitas Unite di atas):... dan setiap kali Anda menekan
:ls
, Vim sebenarnya akan menjalankan perintah Anda sebagai gantinya.Perhatikan bahwa Anda juga tidak perlu
:bn
atau:bp
, karena tampilan dan pemilihan buffer tab sekarang adalah perintah yang sama.sumber
Saya tidak dapat berkomentar karena akun saya baru, maaf tentang hal itu, tetapi ++++ 1 untuk ctrl-space.
Saya dijual pada saat saya mencapai setengah bantuan. Ctrlspace memiliki struktur seperti ini:
Jadi, Anda dapat menyimpan ruang kerja untuk setiap proyek yang sedang Anda kerjakan dan kemudian segera memuatnya kapan pun Anda inginkan. Ini berarti bahwa setiap kali Anda menutup vim, Anda dapat menyimpan semua buffer dan tab split.
Anda juga dapat memberi nama tab Anda. Jika itu tidak cukup, Anda juga dapat dengan mudah mengubah direktori kerja dan membuat bookmark untuk direktori yang sering Anda gunakan.
Ini berinteraksi dengan baik dengan nerdtree jika Anda menggunakannya (walaupun jujur Anda mungkin tidak akan merasa seperti Anda membutuhkannya setelah seminggu dengan ctrlspace)
Pertimbangkan kasus penggunaan ini:
Anda punya proyek. Ini melibatkan penanaman pohon. Ada pohon buah dan pohon uang. Pohon uang mengandung dolar dan sen sementara pohon buah-buahan mengandung apel dan jeruk.
Dalam contoh ini apel, jeruk, dolar, dan sen semuanya "penyangga."
Ctrlspace memungkinkan Anda memisahkan apel dan jeruk menjadi satu "tab" yang dapat Anda beri label "buah" - label ini akan muncul di baris tag di bagian atas jendela Anda. Demikian juga, dolar dan sen masuk ke tab "uang".
Ruang kerja "tree" menyimpan seluruh konfigurasi ini dan memungkinkan Anda mengaksesnya segera setiap kali Anda membuka vim.
Sekarang saya menyadari keberadaannya, saya benar-benar tidak bisa membayangkan melakukan pengembangan berorientasi objek di vim tanpa plugin ini. Untuk berjaga-jaga, berikut adalah tautannya: https://github.com/szw/vim-ctrlspace
sumber
Jadi akhirnya memutuskan untuk membuat plugin sendiri untuk menyelesaikan masalah saya, tersedia di github .
Saya menggunakan ide @ philolo1 dan mencoba untuk menyelesaikannya, pada saat saya menulis jawaban ini masih dalam proses.
EDIT Saya tidak lagi mempertahankan plugin karena alur kerja saya berkembang dan saya menyadari bahwa mengikat buffer ke sebuah tab menambah lebih banyak masalah daripada yang diselesaikan.
Plugin mengikat buffer ke tab: Ketika pengguna membuka buffer, itu secara otomatis "disimpan" di tab dan tidak dapat diakses dari tab lain.
Instalasi harus "plugin manager friendly" (paling tidak itu berfungsi baik dengan Vim-Plug dan Vundle )
Beberapa fitur utama adalah:
:NextBuf
dan:PrevBuf
ganti:bn
dan:bN
untuk menjaga status tab yang konsisten:ListBuf
memungkinkan untuk membuat daftar buffer yang sama dengan:ls
pengecualian bahwa mereka dipisahkan dalam tab dan tanda membiarkan pengguna melihat dengan mudah di tab mana dia saat ini.:ChangeBuf
menerima nomor buffer atau nama buffer untuk mengubah buffer dan mengganti tab secara otomatis:CloseBuf
:CloseTab
Untuk operasi lainnya pengguna harus dapat menggunakan built-in fitur (seperti
:tabopen
,:tabnext
, dll ...)Untuk setiap perintah beberapa pemetaan default disediakan dan mereka dapat dengan mudah dinonaktifkan dengan menambahkan
let g:betterTabsVim_map_keys = 0
ke Anda.vimrc
.Saya juga mencoba membuat file bantuan eksplisit (
:h betterTabs.txt
): belum lengkap tetapi pengguna harus mencari minimum untuk menggunakan plugin.Saya masih memiliki banyak pengujian yang harus dilakukan untuk memastikan plugin tidak mengacaukan perilaku asli.
Akhirnya, jika ada yang ingin membantu, selalu dimungkinkan untuk membuat masalah di halaman github atau untuk membuat permintaan tarik.
sumber
Lihatlah plugin ini. Menurut saya itu sesuai dengan kebutuhan Anda dengan sempurna. https://github.com/szw/vim-ctrlspace
sumber