Zsh kabuğu için bulanık bir eşleme modu var mı?


22

Son zamanlarda verimli metin tamamlama sistemlerine aşık oldum. En sevdiğim tamamlama türlerinden biri de bulanık tamamlama. Bu, programın, kullanıcı adını yalnızca dosya adında veya yolunda 'herhangi bir yerde (neredeyse) meydana gelebilecek birkaç karaktere dayanarak tamamlayacağı bir moddur. Bu özellik en azından şu programlar için var:

Bir metin düzenleyicide bu kipin kullanım örneği:

Kullanıcı longWordNameThatTheyDontWantToWriteByHand sözcüğünü tamamlamaya çalışıyor ve bunu örneğin ilk harfini ve bazı büyük harflerden bazılarını yazarak yapabilirler. Lwnt yazarak tüm kelimeyi tamamlayabilir.

Sorum şu: zsh kabuğuyla kullanabileceğim bir mod veya benzeri bir şey var mı?

Yanıtlar:


27

Bende bu var .zshrc

# 0 -- vanilla completion (abc => abc)
# 1 -- smart case completion (abc => Abc)
# 2 -- word flex completion (abc => A-big-Car)
# 3 -- full flex completion (abc => ABraCadabra)
zstyle ':completion:*' matcher-list '' \
  'm:{a-z\-}={A-Z\_}' \
  'r:[^[:alpha:]]||[[:alpha:]]=** r:|=* m:{a-z\-}={A-Z\_}' \
  'r:|?=** m:{a-z\-}={A-Z\_}'

zshTamamlanma motoruna tam bulanık eşleme ekler . Yüce metnin süper akıllılarından yoksun ama evet tamamlayacak lwnt -> longWordNameThatTheyDontWantToWriteByHand.


1
Sadece bir hata buldum: boşluktan sonra dosya yazmak için stack install && vlc ~/Music/erfçalışmıyor , boşluktan sonra bir şey yazdığınızdan dolayı, yani tamamlanmadı stack install && vlc ~/Music/FGFC820\ -\ Perfect\ War.mp3.
Hi-Angel

5
@ Merhaba-Melek, bunu çarptığın için teşekkürler. Aslında 'r:|?=** m:{a-z\-}={A-Z\_}'şimdi kullanıyorum, ki bu daha basit ve tanımladığınız problemden sıkıntı çekmiyor.
PythonNut

Bu harika! Belki bu kodla bir eklenti yapabilirsin. Sadece bulmak daha kolay ki.
Julien__

15

Projem göz atın fzf .

Golang'da yazılmış herhangi bir şey listesiyle kullanılabilecek genel amaçlı bulanık bir bulucu: dosyalar, işlemler, komut geçmişi, git dalları, vb.

Zsh için aşağıdaki anahtar bağlantıları sağlar:

  • CTRL-T - Seçili dosya yollarını komut satırına yapıştırın
  • CTRL-R - Seçili komutu tarihe göre komut satırına yapıştırın.
  • ALT-C - seçilen dizine cd

ve bulanık tamamlama modu:

# Files under current directory
# - You can select multiple items with TAB key
vim **<TAB>

# Files under parent directory
vim ../**<TAB>

# Files under parent directory that match `fzf`
vim ../fzf**<TAB>

# Files under your home directory
vim ~/**<TAB>

# Directories under current directory (single-selection)
cd **<TAB>

# Directories under ~/github that match `fzf`
cd ~/github/fzf**<TAB>

# Process IDs. Can select multiple processes with TAB or Shift-TAB
kill -9 <TAB>

# Host names
ssh **<TAB>
telnet **<TAB>

# Environment variables / aliases
unset **<TAB>
export **<TAB>
unalias **<TAB>

4
Sekmeyi varsayılan olarak bununla nasıl tamamlayabilirim? Tip gerek kalmadan**
theonlygusti
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.