Saya memahami bahwa membatasi diri saya pada vanilla Vim (tidak menggunakan plugin) membatasi kekuatan editor, tetapi karena saya sering beralih di antara mesin yang berbeda, seringkali terlalu banyak kesulitan untuk memindahkan lingkungan saya ke mana-mana. Saya ingin tetap di vanilla Vim.
Sesuatu yang menahan saya adalah kemampuan untuk beralih antar file dengan cepat. Saya (percaya setidaknya) memiliki pemahaman yang baik dari buffer , jendela , tab , serta netrw ( Vex
, Ex
, dll).
Tetapi di editor seperti Sublime Text , saya cukup mengetik ctrl- pdan langsung membuka file.
Saya tahu bahwa saya bisa drop down ke shell, tapi saya bertanya-tanya apakah ada rahasia "tersembunyi" lain untuk beralih cepat antar file di Vim berdasarkan lebih dari sekedar nama file.
Jawaban:
Persamaan yang paling dekat ("paling dekat", bukan "tepat") dengan Ctrl+ ST2 Padalah sebuah plugin bernama, bersiaplah… CtrlP . Ada plugin serupa lainnya seperti Command-T atau FuzzyFinder .
Saya menggunakan CtrlP dan saya menyukainya tapi saya dengan sepenuh hati mendukung keputusan Anda untuk menggunakan "plugin-free". Ini bukan cara termudah untuk melakukannya tetapi akan terbayar dalam jangka panjang.
Membuka file
Cara paling dasar untuk membuka file adalah
:e /path/to/filename
. Untungnya, Anda mendapatkan penyelesaian tab dan karakter pengganti: klasik*
dan khusus**
, yang merupakan singkatan dari "sembarang subdirektori".Menggabungkan semua itu, Anda dapat melakukan:
untuk memilih dari semua file yang berisi
foo
namanya di bawah direktori kerja atau:untuk memilih dari semua file yang berisi
bar
namanya di bawah subdirektori mana pun yang mengandungfoo
namanya, di mana saja di bawah direktori kerja.Tentu saja, itu berhasil untuk
:tabe[dit]
,:sp[lit]
dan:vs[plit]
, juga.Perintah-perintah itu terbatas pada satu file. Gunakan
:next
untuk membuka banyak file:dan lihatlah
:help arglist
.Melompat di antara buffer
:b[uffer]
adalah perintah buffer-switching dasar:Perhatikan bahwa banyak dari perintah ini dan kerabatnya menerima hitungan.
The
:ls
perintah menunjukkan Anda daftar buffer dimuat. Ini sedikit "istimewa", meskipun: buffer diberi nomor saat dibuat sehingga Anda dapat memiliki daftar yang terlihat seperti1 2 5
jika Anda menghapus buffer. Ini agak canggung, ya, dan itu membuat peralihan ke buffer berdasarkan nomornya agak terlalu merepotkan. Lebih suka beralih dengan nama parsial,:b foo<Tab>
atau bersepeda:bn :bp
,.Bagaimanapun, berikut adalah pemetaan keren yang mencantumkan semua buffer yang dimuat dan mengisi prompt untuk Anda, menunggu Anda untuk mengetik nomor buffer dan tekan
<enter>
:Dengan pemetaan ini, beralih ke buffer lain semudah:
atau:
Ide tersebut berasal dari gambar yang diambil dari koleksi infografis Vim Bairui :
Vim juga memiliki
<C-^>
(atau<C-6>
pada beberapa keyboard) —mode normal yang setara dengan:b#
—untuk melompat antara buffer saat ini dan yang sebelumnya. Gunakan jika Anda sering bergantian di antara dua buffer.Baca semua tentang buffer di
:help buffers
.Pergi ke deklarasi
Di dalam file, Anda dapat menggunakan
gd
ataugD
.Dalam sebuah proyek, fitur "tag" Vim adalah teman Anda, tetapi Anda memerlukan pengindeks kode eksternal seperti ctags atau cscope. Perintah paling dasar adalah
:tag foo
dan<C-]>
dengan kursor di nama metode. Kedua alat terintegrasi dengan baik ke dalam Vim: lihat:help tags
,:help ctags
dan:help cscope
.Untuk apa nilainya, saya menggunakan navigasi tag secara ekstensif untuk berpindah dalam sebuah proyek (menggunakan CtrlP
:CtrlPTag
dan:CtrlPBufTag
perintah, sebagian besar, tetapi buit-in juga) dan metode buffer switching "umum" favorit saya adalah dengan nama.Menerapkan konfigurasi Anda
Banyak pengguna Vim meletakkan konfigurasi mereka di bawah kontrol versi yang membuatnya sangat cepat dan mudah untuk menginstal konfigurasi Anda sendiri di mesin baru. Pikirkan tentang itu.
EDIT
Beberapa bulan lalu, saya harus mengerjakan mesin jarak jauh dengan Vim yang sudah ketinggalan zaman. Saya bisa saja memasang Vim yang tepat dan mengkloning konfigurasi kesayangan saya, tetapi saya memutuskan untuk melakukan perjalanan ringan, kali ini, untuk "mempertajam gergaji". Saya segera membangun minimalis
.vimrc
dan mengunjungi kembali beberapa fitur asli yang setengah terlupakan. Setelah pertunjukan itu, saya memutuskan CtrlP tidak terlalu penting dan menyingkirkannya: fitur asli dan pemetaan khusus tidak seseksi itu tetapi mereka menyelesaikan pekerjaan tanpa banyak ketergantungan.Menyulap dengan file
:find
adalah perintah yang benar-benar hebat jika Anda melakukannyaset path
dengan benar. Dengan pengaturan saya,,ffoo<Tab>
akan menemukan semua file yang berisi difoo
bawah direktori saat ini, secara rekursif. Cepat, intuitif, dan ringan. Tentu saja, saya mendapat manfaat dari penyelesaian dan karakter pengganti yang sama seperti dengan:edit
dan teman.Untuk mempercepat prosesnya, pemetaan berikut memungkinkan saya melewati seluruh bagian proyek dan menemukan file secara rekursif di bawah direktori file saat ini:
PERINGATAN! The
path
pilihan adalah sangat kuat. Nilai di atas—.,**
—berfungsi untuk saya tetapi bahasa yang saya gunakan tidak memiliki perpustakaan standar. Nilai yang tepat bergantung sepenuhnya pada kebutuhan Anda .Juggling dengan buffer
Pemetaan di atas mencantumkan buffer yang tersedia di "wildmenu" dengan prompt kosong, yang memungkinkan saya menavigasi menu dengan
<Tab>
atau mengetik beberapa huruf dan<Tab>
sekali lagi mempersempit daftar. Seperti halnya pemetaan file di atas, prosesnya cepat dan hampir tanpa gesekan.Pemetaan itu berbicara sendiri.
Menyulap dengan tag
Pemetaan ini menggunakan pencarian regex dan bukan pencarian seluruh kata sehingga saya dapat melakukannya
,jba<Tab>
untuk menemukan tagfoobarbaz()
.Ya, pencocokan fuzzy memang membuat ketagihan, tetapi Anda bisa sama produktif tanpanya. Dan untuk sebagian kecil dari biaya.
LEBIH BANYAK EDIT
Beberapa tip / trik tambahan…
Opsi Wildmenu
The "wildmenu", diaktifkan dengan
set wildmenu
, membuat navigasi file / buffer lebih mudah. Perilakunya diatur oleh sejumlah opsi yang patut diselidiki:wildmode
memberi tahu Vim bagaimana Anda ingin "wildmenu" berperilaku:wildignore
menyaring semua cruft:wildignorecase
memungkinkan Anda untuk mencarifoo
dan menemukanFoo
:Tanda file
Saya baru-baru ini menemukan permata ini pada orang lain
~/.vimrc
. Ini membuat tanda file pada posisi kursor yang tepat setiap kali Anda meninggalkan buffer sehingga, di mana pun Anda berada,'J
melompat ke buffer JavaScript terbaru yang Anda edit. Hebat.sumber
:e
tapi saya akan menggunakannya banyak dari sekarang. Saya mengagumi pekerjaan yang menggunakan Ctrl-P dan dapat belajar banyak darinya tetapi tidak berhasil untuk saya. Saya merasa agak lamban dan dengan demikian mengganggu**
memang bagus.gb
peta. Satu lagi akan saya gunakan banyak. Semua plugin buffer yang saya coba (CtrlP, bufExplorer, ...) hampir tidak secepat ini (memang, plugin ini menawarkan lebih banyak fungsionalitas tetapi tidak cukup bagi saya untuk tetap menggunakannya) .Jawabannya sangat bergantung pada preferensi dan keadaan Anda. Beberapa contoh:
<C-^>
sangat berguna. Secara umum, file alternatif merupakan konsep penting.:split
s mengubah masalah penempatan buffer dari lokasi jendela (setelah Anda membuka semua buffer). Anda dapat menggunakan[N]<C-w><C-w>
untuk beralih ke sana dengan cepat.:[N]b[uffer]
dan:[N]sb[uffer]
cukup berguna;:ls
memberi tahu Anda jumlahnya.Plugin (atau setidaknya pemetaan khusus) dapat meningkatkan banyak hal, dan ada banyak variasi tentang topik ini di vim.org . Ada berbagai mekanisme untuk mendistribusikan konfigurasi Anda (Pathogen + GitHub, Dropbox, ...), atau Anda dapat mengedit file server dari jarak jauh melalui plugin netrw yang disertakan dengan Vim.
sumber
mA
untuk menyimpan tandaA
dan `` A``` untuk mengembalikan. Saya menemukan jaringan jauh lebih berguna setelah saya belajar tentang:Rex
mana yang kembali ke penjelajah.:b
,:e
, Dan banyak lainnya dapat mengambil wildcard seperti*
dan**
. The:b
perintah dapat mengambil nama file parsial. Gabungkan itu dengan<c-d>
atau menu liar Anda bisa cukup jauh. Sedangkan untuk plugin Anda dapat menggunakan sesuatu yang spesifik domain seperti rail.vim yang menyediakan perintah navigasi khusus rel atau sesuatu yang lebih umum seperti CtrlP.Kadang-kadang juga berguna untuk menelusuri daftar file secara berurutan (misalnya, jika Anda melakukan sesuatu seperti
vim *.php
membuka beberapa file sekaligus). Kemudian Anda dapat menggunakan:n[ext]
(serta:prev[ious]
,:fir[st]
, dan:la[st]
) untuk navigasi (selain apa yang disarankan dalam jawaban yang lain).sumber
Anda dapat melakukan penyelesaian tab karakter pengganti pada baris perintah tanpa plugin apa pun. misalnya
akan membiarkan Anda menggilir semua file yang dimulai dengan 'foo' pada pohon direktori di bawah ./src dan pilih yang ingin Anda edit.
Jika Anda sudah mengedit file dan masih dalam buffer, Anda dapat beralih ke file tersebut dengan:
yang akan menggilir semua buffer dengan 'foo' di jalurnya. Anda mungkin perlu menyetel opsi wildmode dan wildmenu untuk mendapatkan perilaku yang Anda inginkan. saya sudah
di .vimrc saya.
sumber
Jika Anda menggunakan nama file dan ingin melompat ke file itu,
gf
akan melakukannya untuk Anda. Saya juga suka menggunakan ctags , yang bukan merupakan plugin; Anda baru saja membuat tag dan dapat dengan mudah beralih ke basis kode Anda.sumber
Jika Anda ingin beralih antar file di editor vim, silakan lihat jawaban di bawah ini
Pertama tekan
Esc
tombol untuk keluar dari mode edit.Kemudian ketik
:e
untuk memeriksa jalur file saat ini.jika Anda ingin membuka file lain kemudian ketik
:e /path-of-file.txt/
menggunakan ini Anda dapat beralih.Jika Anda ingin pergi ke file sebelumnya cukup ketik
:e#
yang beralih ke jalur file sebelumnya.sumber
Saya memiliki masalah yang sama dengan Vim.
Hal terakhir yang saya inginkan adalah bergantung pada plugin untuk tugas biasa seperti pengalihan file.
Saya menambahkan baris berikut ke
.vimrc
Dan BAM! Saya sekarang bisa
:find any/filename/in/any/folder/
selama vim ada di direktori root proyek. Penyelesaian tab bekerja. Wildcard bekerja!Setelah file dibuka, dan ada banyak buffer di latar belakang (Anda dapat menggunakan
:ls
untuk melihat semua buffer), menjalankan:b any/file <TAB>
pencarian fuzzy untuk semua buffer dan melompat ke file yang diperlukan. Dalam kasus ini tidak unik akan ada menu tab (karena itu baris ke-2 dalam .vimrc) yang dapat dipilih menggunakan tab.Jawaban saya datang dari video yang luar biasa ini
https://www.youtube.com/watch?v=XA2WjJbmmoM&feature=youtu.be&t=489
Ada lebih banyak trik dan saya sarankan untuk menontonnya.
sumber