Zsh otomatik tamamlama, tam işlevler önerir (_git _vim vb)


9

zshKomutlarım için nasıl tam önerilerde bulunduğum konusunda küçük bir sıkıntı var .

Kurmadığım bir komutun başlangıcını yazar ve tabbasarsam, kurulu olan tamamlama işlevini önerir.

Diyelim ki yürütmek istiyorum vimama yüklü değil önerecektir _vim.

Bunu kapatmanın bir yolu var mı? Yoksa kurulumumda yanlış bir şey mi yaptım?

Tüm nokta dosyalarım herkese açık github.com/henrikbjorn/castle.


Bu davranışı daha önce gördüm, ancak mevcut kurulumumda mevcut görünmüyor. Ne yazık ki hiçbir fikrim yok, ayarlarımdan hangisi bu davranışı değiştirdi.
Özelleştirici

Yanıtlar:


8

Varsayılan olarak, zsh'ın tamamlama motoru yalnızca yazdıklarınıza bir şey eklemeye çalışır. Bir önek eklemeyi de deneyecek şekilde yapılandırdınız. Basit etkileşimli tamamlama yapılandırma motoru ( compinstall) bunu “eşleştirme kontrolü → alt dize tamamlama” altında sunar. Bu, aşağıdakine böyle bir satır ekler .zshrc:

zstyle ':completion:*' matcher-list '' 'l:|=* r:|=*'

zstyleYerleşik setleri (çoğunlukla) tamamlama ayarları. matcher-listTamamlama tarzı en az bir maç varken durdurma, arka arkaya denemek için yollar listesidir. Boş dize, varsayılan tamamlama anlamına gelir (yalnızca son ekler). Eşleştirme kontrol büyü l:|=* r:|=*aracı bir önek eşlemeyi denemek *ve bir sonek eşleme *herhangi önek ve sonek, yani.

_Tamamen ile başlayan önekleri yasaklayabilirsiniz . Bu yine de ile başlayan kelimelerin _tamamlanmasına ve bir önek ekleyerek tamamlanmasına izin verir , ancak önek ile başlamayabilir _.

zstyle ':completion:*' matcher-list '' 'l:|=[^_]* r:|=*'

Bu, yalnızca komut adlarının tamamlanması için değil, tüm tamamlamalar için geçerlidir. Bunu komut adlarıyla nasıl sınırlayacağımı bilmiyorum.

Başlayan komut adlarını daha kesin olarak hariç tutmanın bir yolu olmalı _, ancak nasıl yapacağımı bilmiyorum. İlk başlangıç, ignored-patternstamamlama stilidir.

zstyle ':completion:*:*:-command-:*:*' ignored-patterns '_*'       

Bu, ile başlayan maçları içermez _; ancak, eşleşme yoksa, zsh yoksay kuralları olmadan tekrar dener. Bunun iyi tarafı, eğer komut ilk etapta alt çizgi ile başlamışsa, bu ikinci geçişte tamamlanacaktır. Kötü tarafı var eğer öyleyse, böylece hiçbir eşleşme yoksa zaten bir alt çizgi eklemeyi deneyin olacağı zsh olduğunu vive viewancak vimo zaman bastıktan Tabsonra viirade teklif vive viewfakat _vimancak yazarsanız vimsonra tamamlama sunacak _vim.


Teşekkür belirttiğiniz çözümlerden birini yaparak çalışıyor gibi görünüyor, ayrıca nasıl çalıştığı hakkında bir grup öğrendim.
Henrik Bjørnskov

2
ignore-patternsEşleşme olmasa bile, çözüm benim için iyi çalışıyor. Sadece completeriçermediğinden emin olmalıydım _ignored.
Adaephon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.