Terkait dengan Bash-like partial partial-complete untuk nama file di Vim
Salah satu fitur yang benar-benar fantastis zsh
adalah Anda dapat mengetik, misalnya ls /u/s/m/m/who.1
, menekan Tabdan membuatnya lengkap
ls /usr/share/man/man1/who.1.gz
. Setelah Anda terbiasa, sangat menyebalkan untuk kembali /u<tab>/s<tab>/m<tab>/m<tab>...
, terutama ketika seluruh jalur parsial hanya dapat menyelesaikan ke satu jalur yang sebenarnya, tetapi setiap komponen individu mungkin memiliki beberapa penyelesaian. Bisakah ini dicapai dalam Vim, misalnya, ketika menggunakan :e
atau :cd
?
Ada fitur-fitur terkait jalur yang berguna lainnya di zsh, seperti menggunakan cd foo bar
untuk pindah ke jalur yang sama dengan foo
diganti dengan bar
(yaitu, /blah/foo/baz/yada
menjadi /blah/bar/baz/yada
). Jika ada solusi yang membawa ini juga (pada dasarnya menyerahkan tugas-tugas terkait shell ke shell yang melakukan itu dengan sangat baik), itu akan bagus.
Jawaban:
Saya dulu menggunakan CtrlP dan plugin terkait lainnya jauh sebelumnya sampai saya benar-benar menemukan kekuatan asli vim. Izinkan saya menjelaskan beberapa cara untuk melakukan ini tanpa memerlukan plugin eksternal:
:e
, hal yang menyenangkan tentang: e adalah Anda dapat melakukan sesuatu seperti:e /u*/s*/m*/m*/<Tab>
dan vim akan memperluas itu secara otomatis untuk Anda:e /usr/share/man/man
. Itu jauh lebih pendek dan sederhana dari apa yang Anda posting, tetapi cara yang lebih baik adalah dengan melakukannya:e /usr/**/man<Tab>
, dengan cara itu akan terlihat secara rekursif di bawah/usr
dan daftar semua jalur yang cocok, ini bisa memakan waktu meskipun tergantung pada seberapa besar set, tetapi dalam memproyeksikan ini bekerja dengan sangat baik karena Anda dapat melakukan sesuatu seperti:e ap**/jav**/user<Tab>
dan itu akan menyelesaikan semua jalur yang tidak lengkap dan memberi Anda daftar jalur yang cocok dan bekerja dengan sangat baik.:b
, Untuk membuka buffer yang ada. Ini sangat kuat karena ia menerima parsial secara default sehingga Anda bisa melakukan sesuatu seperti:b usr*man<Tab>
itu dan itu akan melengkapi nama file jika sudah dimuat dalam daftar buffer. Ini sangat baik karena hampir instan dan sangat cepat. Saya juga sering menggunakan sesi vim, dengan bantuan tpope / vim-obsesi dan dhruvasagar / vim-prosession , yang menjaga semua file yang saya buka dalam daftar buffer dan mereka tersedia bahkan jika saya ada vim dan kembali ke sana dari direktori proyek.sumber
/u*/s*/m*/m*/<Tab>
adalah bagaimana saya dulu bekerja di sekitar bash. Ini bukan pengganti zsh sejauh satu mil./usr/**/man<Tab>
sangat lambat ketika seluruh sistem file terbuka, tetapi mungkin berguna untuk proyek-proyek kecil. Kecuali saya salah paham:b
, ini bukan untuk membuka file baru.**
memang sangat lambat, tetapi bekerja baik untuk proyek reguler.:b
adalah untuk buffer terbuka yang ada, itu sebabnya menggunakan sesi membantu.vim-zsh-path-completion bertujuan untuk melakukan persis apa yang Anda minta (bagian pertama, setidaknya), tapi saya belum pernah mencobanya. (Saya bahkan belum pernah mendengarnya sampai romainl ditautkan ke jawaban SO oleh penulisnya , meskipun dokumentasinya juga menyebutkan beberapa batasan.
Selain itu, ada berbagai pencari file fuzzy yang mencapai sesuatu yang mirip untuk membuka file.
Plugin favorit saya untuk ini adalah CtrlP . Ketika digunakan untuk membuka file, ia mencari file apa pun yang path lengkapnya mengandung karakter yang Anda ketik dalam urutan yang benar — Anda tidak harus mengetikkan bagian dari setiap komponen path (dan semua pemisah path) saat Anda miliki dalam contoh Anda, tetapi berfungsi dengan baik jika Anda melakukannya. Itu juga menggunakan antarmuka yang sama untuk membuka file yang baru saja digunakan dan buffer saat ini terbuka, dan lebih banyak lagi.
Secara default, ini memetakan
<c-p>
dalam mode normal untuk membuka prompt CtrlP. Prompt menampilkan daftar file, yang dipersempit saat Anda mengetikkan karakter. Anda dapat menekan Enterkapan saja untuk membuka file yang saat ini dipilih, atau menggunakan<c-k>
dan<c-j>
untuk memindahkan pilihan ke atas dan ke bawah melalui daftar file yang saat ini cocok.Alternatif populer lainnya adalah Command-T , tapi saya lebih suka CtrlP karena itu diimplementasikan dalam VimScript; Command-T memiliki komponen Ruby.
sumber