Saya tidak mengerti buffer. Ketika saya membuka 3 file pada tab yang sama dan menutup jendela saya, saya biasanya kesal untuk mencari tahu lain kali saya membuka salah satu file yang ada file swap aneh yang melekat dan memberi saya pesan sial. Tetapi berkali-kali saya membaca bahwa hal-hal ini adalah nirwana produktivitas yang saya lewatkan dan bahwa tab dibuat untuk digunakan oleh orang-orang Kanada.
Jadi saya bertanya kepada Anda, ahli Vim: apa keuntungan menggunakan buffer daripada tab? Saya tidak melihat bagaimana perbedaannya bisa sangat berbeda, tetapi saya akan menganggap diri saya hanya pada level pemula-menengah di operasi Vim. Apakah :ls
:b#
benar-benar jauh lebih cepat daripada di gt
sekitar? Saya merasa itu harus lebih dalam dari ini.
:split
masuk ke "windows". Jika Anda memiliki semua buffer (file) di tab terpisah, Anda tidak akan mendapatkan tampilan simultan itu. Saya akan merekomendasikan belajar vim menggunakan 1 tab untuk memulai dan membiasakan diri dengan splits.Jawaban:
Seperti yang dikatakan ZyX pada #vim, pertanyaan ini terdengar seperti, "Mengapa para pakar Vim lebih suka enak daripada hangat?" .
"Ahli Vim" tidak lebih suka buffer daripada tab: mereka menggunakan buffer sebagai proksi file mereka dan halaman tab sebagai ruang kerja mereka. Buffer dan halaman tab memiliki tujuan yang berbeda sehingga memilih satu sama lain tidak masuk akal.
Masalah dengan buffer dan tab adalah salah satu kebingungan , yang disebabkan oleh kombinasi fakta independen.
Kebanyakan editor dan IDE teks "modern" menggunakan metafora tab untuk mewakili file yang dimuat. Metafora itu bertindak sebagai sistem informasi - ini menunjukkan kepada pengguna file apa yang dibuka dan statusnya - dan sebagai perangkat interaktif - itu memungkinkan pengguna untuk memanipulasi (menyusun ulang, memilih, menutup ...) file-file yang dibuka. Meskipun banyak keterbatasan mereka, tab ada di mana-mana dan orang-orang terbiasa dengan mereka dan mengharapkannya di mana-mana.
Vim memperkenalkan halaman tab di 7.0 sebagai cara bagi penggunanya untuk membuat "ruang kerja" ad-hoc. Tidak ada dalam fitur mereka, opsi spesifik mereka, perintah khusus mereka atau
:help
bagian mereka menunjukkan bahwa halaman tab dapat atau harus digunakan sebagai file proxy.Tidak ada apa-apa selain nama dan penampilan "halaman tab", tentu saja, yang menyebabkan banyak kebingungan.
Tanpa
:set hidden
, yang dinonaktifkan secara default dan tidak mudah ditemukan, Vim membuatnya tidak mungkin untuk beralih ke buffer lain tanpa menulis yang sekarang atau mengabaikan perubahannya. Pengguna baru, yang tidak mengetahui pilihan itu, tidak punya pilihan selain beralih ke penggunaan windows yang berat atau ke fitur "mirip-tab" terdekat yang dapat mereka temukan: halaman tab."Tab page" adalah pilihan nama yang disayangkan untuk fitur itu, terutama di era yang didominasi oleh gagasan bahwa membaca dokumentasi adalah buang-buang waktu.
Di Vim, halaman tab adalah abstraksi yang dibangun di atas jendela, itu sendiri abstraksi yang dibangun di atas buffer. Setiap level baru menambahkan fitur yang bermanfaat tetapi membatasi alur kerja Anda.
"Cara penyangga"
Dengan alur kerja berbasis penyangga, file yang sedang Anda kerjakan didistribusikan sepanjang dimensi tunggal. Anda dapat menggilir buffer Anda, Anda dapat mengakses buffer tertentu dengan mengetik bagian dari namanya (dengan selesai) atau nomornya, Anda dapat berganti-ganti buffer, Anda dapat menargetkannya dengan mudah. Pada dasarnya tidak ada gesekan.
Delapan buffer terbuka, hanya satu yang terlihat:
Berpindah dengan nomor:
Berpindah berdasarkan nama:
Buffer adalah file-proxy Vim. Jika Anda berpikir dalam hal file, Anda berpikir dalam hal buffer.
"Jendela jalan"
Dengan alur kerja berbasis jendela, "file" Anda sama-sama didistribusikan di sepanjang dimensi "virtual" yang sama seperti jika Anda hanya menggunakan buffer dan sepanjang dua dimensi "fisik" lainnya. Tetapi ruang kartesius di mana dimensi-dimensi itu ditemukan hampir sepenuhnya terpisah: pindah ke buffer lain masih berarti "pindah ke file lain" tetapi pindah ke jendela lain tidak. Buffer yang sesuai dengan file yang diinginkan dapat ditampilkan di jendela itu tetapi bisa juga ditampilkan di jendela lain, mungkin di halaman tab lain, atau tidak sama sekali.
Dengan windows, menavigasi antara file yang terbuka menjadi terlalu rumit atau terlalu sederhana, bahkan dengan
'switchbuf'
dan:sb
. Sebagian besar karena Anda dipaksa untuk menggunakan dua set perintah untuk apa yang pada dasarnya hal yang sama: mengakses buffer.Windows dapat digunakan, seperti dijelaskan di bawah, tetapi mereka tidak memiliki apa yang diperlukan untuk mengganti buffer dalam alur kerja siapa pun.
Di sini saya sedang mengerjakan skema warna Vim. Dua jendela adalah pandangan berbeda dari buffer yang sama: yang atas berfungsi sebagai referensi, dengan tabel kode warna yang digunakan dalam skema warna, dan yang bawah adalah tempat saya bekerja:
Windows tidak dirancang sebagai proksi file dan tidak dapat dibuat menjadi proksi: mereka adalah "wadah" atau "viewports" yang dirancang untuk menawarkan kepada Anda tampilan ke buffer. Tidak lebih, tidak kurang.
"Cara tab"
Dengan alur kerja berbasis-tab, Anda pada dasarnya mencoba untuk meniru pengalaman pengguna yang biasa Anda gunakan dari editor sebelumnya sambil sepenuhnya mengabaikan sifat halaman tab Vim. Jika kita lupa sejenak bahwa strategi ini umumnya sangat tidak produktif, juga tidak mungkin, seperti halnya windows, untuk memaksa Vim mematuhi paradigma "satu file = satu tab" tanpa kehilangan banyak fleksibilitas.
Masih bekerja dengan file yang sama seperti di atas, tabline mengambil ruang yang signifikan tanpa manfaat. Semua file saya dan semua tab saya dipanggil
javascript*.vim
jadi saya tidak bisa melakukan3gt
dan yakin saya akan berakhir di tempat yang tepat dan tidak mungkin untuk mencapai tab tertentu dengan nama. Tambahkan ke fakta bahwa labelnya bisa sangat tidak membantu tetapi sangat logis[Quickfix List]
... Karena tidak ada cara praktis untuk mengikat file / buffer ke halaman tab, Anda pada dasarnya dibiarkan dengan hanya satu cara praktis untuk menavigasi antara halaman tab / buffer / file: bersepeda.Dan ya, tabline saya musnah dengan hanya 8 tab, bayangkan jika saya punya 20!
Delapan buffer terbuka di delapan halaman tab (salah)
Dua tab untuk dua tugas spesifik (kanan)
Halaman tab adalah "wadah" atau "viewports" yang dirancang untuk berisi satu atau lebih jendela, itu sendiri juga "wadah" yang dirancang untuk berisi buffer.
Kesimpulannya
"Ahli Vim" (anggap saja saya dapat berbicara seolah-olah saya adalah salah satunya) tidak lebih suka buffer daripada tab: mereka hanya menggunakan Vim karena dirancang dan sangat nyaman dengan desain itu:
"Ahli Vim" memiliki 2, 30 atau 97 buffer yang dimuat dan sangat senang mereka tidak harus berurusan dengan distribusi spasial;
ketika mereka perlu membandingkan dua file atau bekerja di satu bagian dari buffer saat ini sambil menyimpan yang lain sebagai referensi, "Ahli Vim" menggunakan windows karena itulah cara mereka dimaksudkan untuk digunakan;
ketika mereka perlu bekerja untuk sementara waktu di bagian proyek yang terpisah tanpa mengacaukan pandangan mereka saat ini, "Ahli Vim" memuat halaman tab baru.
sumber
*.c
,*.h
,scripts/*
dantest/**/*.lua
file). Mengingat bahwa terminal saya hanya 239 kolom lebar "satu file per tab" pendekatan tidak mungkin digunakan.Saya biasa menyimpan setiap buffer di tab terpisah, tapi saya bosan terus-menerus gtdan gTberkeliling di mana-mana.
Saya juga merasa bahwa buffer terlalu sulit untuk dikelola.
Berikut adalah beberapa teknik yang benar-benar mengubah pendapat saya sebelumnya:
:b
. Anda menjadi sangat cepat dalam hal ini. Lihat vim, beralih antar file dengan cepat menggunakan vanilla Vim (tanpa plugin)Berikut ini adalah alur kerja khas saya:
:e
(biasanya dengan sejenis regex:e src/**/F*Bar.js
) untuk membuka buffer:e
untuk itu juga. Jika saya ingin beralih antara buffer ini dan buffer yang saat ini terbuka, saya akan menggunakan:sp
atau:vsp
membukanya di jendela yang terpisah.Saya merasa bahwa setelah kira-kira satu minggu atau lebih memaksakan pola-pola baru ini, menjadi lebih mudah untuk memvisualisasikan buffer mana yang telah saya buka, dan bagaimana mencapai salah satu dari mereka hanya dengan beberapa pukulan otomatis.
sumber
gT
adalah perintah untuk mengganti tab, aku sudah mencari penggantinyactrl+tab
. Jadi terima kasih telah benar-benar membantu pengguna baru daripada hanya membuat mereka merasa bodoh.nnoremap <leader>b :ls<CR>:b<space>
cukup bagus untuk mengganti buffer dengan cepat, karena menunjukkan daftar buffer yang saat ini terbuka. Juga, sebagian nama diterima (selama hanya ada satu kecocokan).ctrl N
atauctrl P
(P adalah apa yang biasanya saya gunakan), itu akan memberi Anda daftar kata-kata untuk menyelesaikan apa yang Anda ketik ... Cerdas berdasarkan pada saat ini Anda buffer, yang terbagi, yang baru saja Anda lihat, dan setiap file terbuka lainnya!Kelemahan dari tab adalah Anda hanya dapat melihat konten satu per satu. Jadi, jika Anda menggunakannya seperti di browser, Anda kehilangan melihat beberapa buffer secara berdampingan, atau bahkan melihat bagian terpisah dari file yang sama secara terpisah. Oleh karena itu, banyak yang merekomendasikan untuk menggunakan tab hanya untuk memisahkan ruang kerja yang berbeda (mis. Memiliki satu untuk proyek Java, yang lain untuk daftar agenda, yang ketiga untuk meretas skrip di samping).
Masalah yang Anda uraikan membuatnya tampak bahwa Anda menggunakan Vim salah. Entah memiliki (kebanyakan) satu contoh, berdedikasi. Kemudian, buffer yang menjadi tersembunyi hanya akan "muncul kembali" jika Anda mengeditnya kembali (dan sekarang Anda dapat menggunakan daftar buffer untuk memanggil mereka kembali), dan tidak akan ada pesan file swap. Atau, gunakan instance Vim terpisah per proyek / file / edit sesi, tetapi biasakan untuk sepenuhnya
:quit
setiap contoh ketika Anda selesai dengan file.sumber
Kiat lain, saat menggunakan nama buffer sebagai argumen untuk: buffer, Anda tidak harus menentukan seluruh nama. Namun, jika lebih dari satu buffer cocok dengan argumen yang diberikan, buffer tidak akan diaktifkan.
Setiap fragmen nama buffer dapat digunakan untuk mencocokkan. Misalnya, jika Anda memiliki buffer
request_manager.java
danqueue_manager.java
kemudian:buffer que
atau:b que
cocok dengan keduanya, tetapi akan beralih ke queue_manager.java karena cocok di awal.sumber
Saya menggunakan tab, Ctrl- Pdan sesi Vim dalam alur kerja saya dan sudah lebih dari satu tahun sekarang:
Saya telah )dan (memetakan masing-masing untuk "pergi ke tab berikutnya" dan "pergi ke tab sebelumnya". tnmembuka tab baru. Saya juga menggunakan tabm untuk membantu menjaga segalanya tetap teratur.
Saya menggunakan sesi Vim untuk grup file yang berkaitan dengan cerita / bug saat ini yang sedang saya kerjakan, biasanya dilakukan berdasarkan kategori. Sesi-sesi ini ditimpa selama proses berlangsung.
Saya belum menemukan sesuatu yang lebih baik dari Ctrl- P, tetapi butuh sedikit untuk memproses semua file untuk menemukan.
sumber
Tosses 2c ke dalam tumpukan.
TLDR;
:b *part-of-filename*
adalah cara terbaik untuk menemukan file yang Anda butuhkan dalam daftar buffer, yaitu file LEBIH CEPAT dan memiliki beban kognitif KURANG daripada nomor buffer, tab, atau jendela untuk melacak file.Tidak ada artinya bagi saya untuk memiliki 30 buffer terbuka (Yaitu saya belum housekeeping), dan keindahan buffer digunakan dengan baik adalah bahwa itu tidak memperlambat saya sama sekali. Bahkan, hal itu mempercepat ketika empat hari setelah saya membuka file yang saya butuhkan, menelepon
:b *part-of-filename*
dan itu muncul secara ajaib, mengesankan rekan kerja dan kolektivis toady sama.Buffer untuk file.
Agar efektif:
:e
ls
SEMUA waktu ketika Anda pertama kali mulai mendapatkan model mental yang baik (Anda tidak bisa mengerti apa yang tidak dapat Anda lihat, secara mental atau harfiah):q
, itu meledak:b
ke dalam memori otot Anda:b1
bagus untuk file pertama yang Anda tahu Anda buka, jika tidak, angka dan huruf akan cepat canggung:b#
baik untuk beralih ke file terakhir Anda, yang merupakan kebutuhan umum:bd#
baik untuk ketika Anda telah beralih ke file temp, melakukan apa yang perlu Anda lakukan, beralih kembali dengan:b#
, dan sekarang ingin menutup file temp:b *part-of-filename*
sebaliknya cara terbaik untuk menemukan file yang Anda butuhkan dalam daftar yaitu itu LEBIH CEPAT dan memiliki beban kognitif KURANG dari nomor buffer, tab, atau jendela untuk melacak file.Satu-satunya gangguan
:b *part-of-filename*
adalah bahwa kadang-kadang Anda belum membuka file, dan Anda harus kembali dan:e path/to/full-filename
pertama.Tab adalah untuk membedakan file yang benar-benar tidak terkait.
Atau menjaga tata letak windows tertentu agar mudah (disclaimer: Saya sendiri tidak pernah menggunakannya untuk ini).
Atau untuk file yang jarang digunakan, tetapi diprediksi dibutuhkan. Bagi saya, itu biasanya
commitMessage
file yang saya anotasi saat saya bekerja sehingga saya tidak perlu terlalu banyak berpikir ketika tiba saatnya untuk membuat komit.gt
lebih cepat dari:b com<enter>
(jika Anda merasa beruntung, jika tidak:b com<tab><enter>
):tabe commitMessage
gt
ataugT
juga favorit memori ototWindow split adalah untuk membandingkan informasi secara visual
Atau memiliki akses langsung ke informasi penting (jujur, kecuali jika info itu adalah sesuatu yang saya perlu perbarui dengan
:e
file log, saya biasanya hanya menarik konten ke file saat ini dan menanganinya di sana).:vsp
atauC-w v
membuka split vertikal yaitu kiri | benar, lalu gunakan:b
atau:e
untuk mendapatkan file yang Anda inginkan:sp
atauC-w s
buka split horizontal yaitu atas / bawahC-w C-w
yaitu double Ctrl-w, memutar Anda di sekitar jendela yang tersediaC-w c
tutup jendela saat iniC-w o
tutup semua jendela lain, pertahankan HANYA saat inisumber
:b#
dan:bd#
!Tambahkan ini ke
.vimrc
buffer Anda dan mulailah mencintai:Dengan begitu Anda dapat bersepeda maju / mundur melalui mereka dalam mode normal melalui Tab/ ShiftTab.
sumber
<C-I>
. Peta<C-Tab>
sebaliknya jika Anda benar-benar ingin.:n
dan:N
hubungkan dengan daftar argumen, bukan buffer terbuka. Anda ingin:bn
dan:bp
(:bnext
dan:bprev
). tpope yang tidak terganggu memberikan pemetaan]b
dan[b
untuk ini (dan hal-hal baik lainnya) jika Anda mau.(
dan)
, atau<left>
dan<right>
panah, bisa dibilang menjadi kunci yang kurang bermanfaat untuk ditimpa daripada tab, jika Anda benar-benar menginginkan pemetaan pendek.Ctrl + Tab
karena itulah yang digunakan oleh kebanyakan editor dan browser GUI lainnya.Saya ingin menyarankan implementasi cemerlang dari sejumlah tahun yang lalu: kien / tabman.vim . Ini menjelaskan hal-hal berikut:
Itu telah menemukan kembali yang luar biasa dari plugin ajaib ini, yang seharusnya tetap dalam konfigurasi Vim saya selama beberapa tahun juga. Sementara saya akan terus mencari sesuatu yang juga menampilkan semua buffer tersembunyi, TabMan adalah superman saya ketika datang untuk memiliki pandangan mata burung tentang bagaimana buffer diatur di berbagai tab.
sumber
Tab dan Buffer adalah dua standar berbeda di Vi. Baca tiga definisi ini:
Baca artikel ini untuk lebih https://joshldavis.com/2014/04/05/vim-tab-madness-buffers-vs-tabs/
sumber
Saya memuat buffer "terpilih" sebagai tab untuk cepat (TAB / S-TAB) beralih di antara mereka. Kerangka kerja cocok di sini karena bagi saya buffer tab VS sebagian besar adalah hal visibilitas. Saya dapat memunculkan file-file penting / kerja di windows dan tab dan menyembunyikan yang saat ini tidak perlu saya manfaatkan di latar belakang dengan cepat tanpa harus mengingat jalur atau meluangkan waktu untuk mencari dan memuatnya kembali begitu diperlukan. Ini memungkinkan untuk menangani beberapa tugas atau proyek dalam satu sesi VIM, saya kira ini dulunya penting di mesin memori rendah tetapi juga baik untuk memusatkan semua tugas pengeditan di bawah satu bingkai aplikasi. Saya juga mengatur pintasan pemindahan buffer ke Ctrl-Tepat / Kiri sehingga saya dapat dengan cepat menggeser berbagai buffer juga.
Intinya, seseorang hanya dapat membagi beberapa jendela untuk penggunaannya sebanyak screen estate berjalan, tetapi seseorang dapat menyimpan beberapa pengaturan windows di beberapa tab sehingga memperluas ruang kerja seseorang dan meningkatkan alur kerja memungkinkan pembagian tugas yang mudah dengan tugas rumit berputar lebih dari satu file .
Untuk file swap, Anda dapat memberi tahu VIM untuk menyimpan semuanya dalam satu folder tujuan Anda. Untuk penggunaan ini
:set directory
.sumber