Zsh otomatis lengkap menyarankan fungsi lengkap (_git _vim dll)

9

Saya memiliki gangguan kecil dengan bagaimana zshmelakukan saran lengkap untuk perintah saya.

Jika saya mengetik awal perintah yang belum saya instal dan menekannya tabakan menyarankan fungsi penyelesaian yang diinstal.

Katakanlah saya ingin menjalankan vimtetapi tidak diinstal itu akan menyarankan _vim.

Apakah ada cara untuk mematikan ini? Atau apakah saya melakukan sesuatu yang salah pada pengaturan saya?

Semua dotfile saya bersifat publik di github.com/henrikbjorn/castle.

Henrik Bjørnskov
sumber
Saya telah melihat perilaku ini sebelumnya, tetapi dalam pengaturan saya saat ini sepertinya tidak ada. Sayangnya, saya tidak tahu, pengaturan mana yang mengubah perilaku itu.
Penyesuai

Jawaban:

8

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 zstylebuiltin set (kebanyakan) pengaturan selesai. Gaya matcher-listpenyelesaian 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-patternsgaya 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 vidan viewtetapi tidak vimmaka menekan Tabsetelah viakan menawarkan vidan viewtetapi tidak _vim, tetapi jika Anda mengetik vimmaka penyelesaian akan menawarkan _vim.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Terima kasih tampaknya bekerja dengan melakukan salah satu solusi yang Anda tentukan, juga saya belajar banyak tentang cara kerjanya.
Henrik Bjørnskov
2
Solusi dengan ignore-patternsberfungsi dengan baik untuk saya, bahkan jika tidak ada kecocokan. Baru saja memastikan itu completertidak mengandung _ignored.
Adaephon