Saya ingin kasus-sensitif selesai kabur untuk file dan direktori di zsh
. Setelah membaca manual selama beberapa jam, inilah yang saya dapatkan:
zstyle ':completion:*:*:*:*:globbed-files' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:local-directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
Selain itu, saya ingin menekan TAB
sekali untuk menampilkan kemungkinan penyelesaian, hanya memodifikasi apa yang telah saya ketik jika ada satu penyelesaian. Kemudian menekan TAB
kedua kalinya harus menempatkan saya ke mode "penyelesaian menu". Berdasarkan manual, saya datang dengan ini:
zstyle ':completion:*' menu select
Sekarang semuanya berjalan sebagaimana mestinya kecuali dalam satu keadaan. Saya memiliki dua folder Desktop
dan .rstudio-desktop
di direktori home saya. Karena sudah setopt globdots
, saya berharap mengetik yang berikut ini:
$ cd ~/dktop<TAB>
untuk meninggalkan perintah saya seperti yang dimasukkan, dan ditampilkan sebagai kandidat penyelesaian Desktop
dan .rstudio-desktop
. Alih-alih, itu dihapus dktop
, meninggalkan saya dengan yang berikut:
$ cd ~/
Saya telah melihat semua manual, panduan, pertanyaan Stack Exchange yang relevan, dan berbagai sumber lainnya. Tapi apa pun yang saya lakukan, saya tidak bisa membuat ini berhasil.
Menariknya, jika saya berada di direktori home dan ketik yang berikut ini maka semuanya berfungsi seperti yang diharapkan:
$ cd dktop<TAB>
Artinya, ini hanya masalah dengan segmen jalur yang tidak mengarah (dan Anda dapat melihat C-x h
bahwa ini terkait dengan directories
tag daripada local-directories
tag yang digunakan).
Untuk kemudahan reproduksi, berikut adalah ~/.zshrc
yang akan mereproduksi situasi dan perilaku yang dijelaskan di atas (diuji pada mesin virtual El Capitan dengan zsh
dari Homebrew).
sumber
zsh 5.3.1
padaArch Linux
.cd ~/dktop<tab>
hasil panencd ~/Desktop
.zsh 5.3.1
pada OS X masalah tidak mereproduksi. Sangat menarik bahwa ada perbedaan antara sistem operasi.Jawaban:
Salah satu solusi yang mungkin dilakukan adalah:
Ini akan menyebabkan tab meluas
~/
ke jalur absolut.sumber
cd /Users/raxod502/dktop
, dan penyelesaian dinonaktifkan.~/
ke jalur absolutnya, penyelesaian fuzzy akan mulai bekerja. Rasanya seperti salah satu kasus di mana masalahnya adalah ia mengevaluasi sekali, tetapi Anda benar-benar membutuhkannya untuk mengevaluasi dua kali untuk bekerja, sehingga memiliki jalur absolut alih-alih~/
berarti kembali ke hanya membutuhkan satu evaluasi. Tapi omong kosong, aku minta maaf, aku lupa bahwa bindkey menggantikan bindings yang lama, dan aku tidak dapat menemukan apa pun yang mengatakan jika bahkan memungkinkan untuk mengikat dua fungsi menjadi satu kunci. Tanpa bindkey saya, apakah penyelesaian Anda berfungsi sebagaimana dimaksud saat diberikan jalur absolut?~/dktop
atau/Users/raxod502/dktop
; hasilnya adalah sama, yaitu bahwadktop
dihapus ketika saya menekan TAB.