Di zsh
, cd
perintah memiliki bentuk dua argumen: cd OLD NEW
perubahan ke ${PWD/OLD/NEW}
. Dengan sistem penyelesaian gaya baru, zsh mampu menyelesaikan NEW
: argumen kedua diselesaikan berdasarkan apa yang OLD
bisa diganti dengan untuk mendapatkan direktori yang ada. Tetapi argumen pertama hanya selesai untuk direktori yang ada.
Bagaimana saya bisa meminta zsh untuk menawarkan penyelesaian yang merupakan nilai yang mungkin untuk OLD
, selain menyelesaikan direktori yang ada?
Sebagai contoh, jika direktori saat ini /path/to/foo
dan ada juga direktori /also/to/foo
dan /path/to/foo/prime
, kemudian cd p
Tabmelengkapi p
untuk prime
. Jika saya bermaksud untuk menjalankan cd path also
maka saya ingin zsh juga menawarkan path
sebagai penyelesaian. Bagaimana?
Menggunakan nilai-nilai yang sudah diketik dari argumen kedua untuk membatasi kemungkinan untuk argumen pertama akan menjadi nilai tambah, tetapi melengkapi argumen pertama secara mandiri juga akan baik-baik saja.
sumber
cd p also <Tab>
ataucd p also <left arrow x 5> <Tab>
?cd p also<Left*5><Tab>
: jika saya menekan<Tab>
saat kursor masukalso
, saya berharapalso
akan selesai, tidakp
.cd t<tab>
apakah itu harus menawarkanth/to/foo/prime
danto/foo/prime
? Atau haruskah itu hanya membatasi diri ke batas direktori?Jawaban:
Saya kira Anda dapat menambahkan komponen
$PWD
kecd
daftar penyelesaian, meskipun ini tampaknya membutuhkan mengutak-atik_cd
; yaitu, versi khusus_cd
harus muncul pertama kali di$fpath
.Kemudian di bagian atas
~/zcomp/_cd
tambahkan fungsidan kemudian tepat sebelum
_alternative
baris tambahkan apa yang kembali ke daftar alternatifmeskipun ini akan selalu menambahkan
pwd
komponen kecd
penyelesaian:dengan logika tambahan Anda hanya bisa menambahkan
$PWD
komponen ketika sudah ada argumen kedua bukan selalu.Namun! Ini selalu mengacaukan
cd
penyelesaian dan mengharuskan kami menambal_cd
penyelesaian hulu . Pilihan lain adalah membuat nama baru untuk fungsi yang disediakan oleh dua-argcd
, mungkin disebutcdsub
, dan hanya memiliki penyelesaianPWD
komponen yang muncul untuk itu. Tambahkan ini ke~/.zshrc
Dan kemudian
_cd
penyelesaian_cdsub
patah hati untuk ditempatkan di suatu tempat di$fpath
:sumber