Secara default, mesin penyelesaian zsh hanya mencoba untuk menambahkan sesuatu ke apa yang Anda ketik. Anda mengkonfigurasinya untuk mencoba menambahkan awalan juga. Mesin konfigurasi penyelesaian interaktif sederhana ( compinstall
) menawarkan ini di bawah "kontrol yang cocok → penyelesaian substring". Ini menyisipkan baris seperti ini di .zshrc
:
zstyle ':completion:*' matcher-list '' 'l:|=* r:|=*'
The zstyle
builtin set (kebanyakan) pengaturan selesai. Gaya matcher-list
penyelesaian adalah daftar cara untuk mencoba berturut-turut, berhenti ketika setidaknya ada satu pertandingan. String kosong berarti penyelesaian standar (hanya sufiks). The kontrol yang cocok mantera l:|=* r:|=*
sarana untuk mencoba pencocokan awalan *
dan akhiran yang cocok *
, yaitu awalan dan akhiran.
Anda dapat melarang awalan yang dimulai dengan _
semuanya. Ini masih memungkinkan penyelesaian kata-kata yang dimulai dengan _
, dan selesai dengan menambahkan awalan, tetapi awalan mungkin tidak dimulai dengan _
.
zstyle ':completion:*' matcher-list '' 'l:|=[^_]* r:|=*'
Ini berlaku untuk semua penyelesaian, bukan hanya penyelesaian nama perintah. Saya tidak tahu cara membatasi ini untuk perintah nama.
Seharusnya ada cara untuk lebih tepatnya mengecualikan nama perintah yang dimulai dengan _
, tetapi saya tidak tahu caranya. Awal pertama adalah dengan ignored-patterns
gaya penyelesaian.
zstyle ':completion:*:*:-command-:*:*' ignored-patterns '_*'
Ini tidak termasuk kecocokan yang dimulai dengan _
; namun, jika tidak ada kecocokan, maka zsh akan mencoba lagi tanpa aturan abaikan. Yang baik dari ini adalah bahwa jika perintah dimulai dengan garis bawah di tempat pertama, itu akan selesai di lintasan kedua ini. Bagian yang buruk adalah bahwa zsh akan mencoba menambahkan garis bawah pula jika tidak ada kecocokan, jadi jika Anda memiliki vi
dan view
tetapi tidak vim
maka menekan Tabsetelah vi
akan menawarkan vi
dan view
tetapi tidak _vim
, tetapi jika Anda mengetik vim
maka penyelesaian akan menawarkan _vim
.