XCode Command-T-Stil Autovervollständigung für zsh

XCode Command-T-Stil Autovervollständigung für zsh

Ich habe gerade angefangen, das Command-T-Plugin für vim zu verwenden, und es ist super. Falls Sie noch nicht davon gehört haben, können Sie damit etwa Folgendes eingeben:

Sb

um Something.hs-boot aus der Liste auszuwählen

src/project/Control/Whatever/Foobs.hs
src/project/Control/Whatever/Something.hs-boot
src/project/Control/Whatever/Something.hs

Und so weiter.

Ich habe mich gefragt, ob ich einen ähnlichen Autovervollständigungsstil mit zsh verwenden könnte. Ich verstehe, dass die Shell-Vervollständigung nicht annähernd so umfangreich sein kann wie die Vim-Vervollständigung, da die Shell-Vervollständigung wahrscheinlich nicht jedes Mal das gesamte System durchsuchen sollte, wenn Sie einen Buchstaben eingeben, aber gibt es eine ähnliche Vervollständigung, bei der ich zumindest Folgendes eingeben könnte?

s/p/c/w/Sb<tab>

und einen ähnlichen Effekt wie oben erzielen?

Ich habe gehört, dass zsh eine ziemlich gut programmierbare Autovervollständigungsfunktion hat, aber mein Shell-Fu ist ziemlich schwach.

Weiß jemand, wie man das einrichtet?

Antwort1

Um Teilpfade zu vervollständigen, genügt es, das Vervollständigungssystem zu initialisieren (zumindest auf meinem System mit zsh v4.3.17):

autoload -U compinit && compinit
zmodload zsh/complist

Wenn Sie es etwas ausgefallener gestalten möchten, können Sie die Groß-/Kleinschreibung beim Abgleichen ignorieren:

zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'

Aktualisierung 1:

Ich weiß nicht, ob Sie Command-T-Stil Autovervollständigung tun können ... aber wie zsh bekommen mussalleÜbereinstimmungen vor der Anzeige von etwas. Dies spontan zu tun, insbesondere an Orten, wo es viele Unterverzeichnisse/Dateien gibt, ist möglicherweise nicht praktikabel.

Sie könnten jedoch Folgendes verwenden:

**/*thing <Tab>

Dies **trifft auf alle Dateien und Unterverzeichnisse des aktuellen Verzeichnisses zu.

Idee: Wenn es keine aktuelle Dateiliste sein muss, können Sie möglicherweise eine Vervollständigungsfunktion schreiben, die die Ausgabe von locate(dh einer vorkalkulierten Dateiliste) verwendet.

Aktualisierung 2: https://github.com/junegunn/fzf#fuzzy-completion-for-bash-and-zsh

Antwort2

Eine weitere interessante Alternative ist die Verwendung von etwas wiefasd.

verwandte Informationen