Stoppen Sie zsh, indem Sie / etc / hosts in die automatische Vervollständigung einbinden - zsh, autocomplete, hosts-file

Ich habe meiner Datei / etc / hosts eine Menge Einträge hinzugefügt, um das Blockieren und Verfolgen von Werbung im Internet zu erleichtern (eine Liste, die ich von github erhalten habe) https://github.com/StevenBlack/hosts).

Bei der Suche nach Autovervollständigungen bezieht zsh jetzt jedoch alle Einträge in die Hosts-Datei ein. Dies bedeutet, dass ich eine einfache Datei mit einem langen Namen verschieben und tippe mv w<TAB> und ich bekomme hunderte von Autocomplete-Einträgen mit dem Dateinamen, den ich irgendwo vergraben möchte.

Gibt es eine Möglichkeit, die Quellen einzuschränken, die zsh für die automatische Vervollständigung verwendet?

Edit: hier sind die meiner Meinung nach relevanten Teile meines Zshrc:

zstyle ":completion:*" completer _complete _ignored _approximate
zstyle ":completion:*" list-colors ""
zstyle ":completion:*" matcher-list ""
zstyle ":completion:*" menu select=1
zstyle ":completion:*" select-prompt %SScrolling active: current selection at %p%s
autoload -Uz compinit
autoload -U zutil
autoload -U complist
compinit

Antworten:

1 fĂĽr Antwort â„– 1

Standardmäßig füllt zsh seine hosts Abschlussliste aus dem Befehl getent hosts wenn es verfügbar ist oder aus bestimmten Dateien, einschließlich /ect/hosts.

Wenn wir wollen überspringe diesen TeilWir müssen unsere eigene Vervollständigungslogik bereitstellen. Sie können dies tun, indem Sie Folgendes zu Ihrer hinzufügen ~/.zshrc:

zstyle -e ":completion:*:hosts" hosts "reply=(
${=${${(f)"$(cat {/etc/ssh_,~/.ssh/known_}hosts(|2)(N) 2>/dev/null)"}%%[#| ]*}//,/ }
${=${${${${(@M)${(f)"$(cat ~/.ssh/config 2>/dev/null)"}:#Host *}#Host }:#***}:#*?*}}
)"

Inspiration: Vokus Lösung in ihren Punktedateiendurch Weglassen der /ect/hosts Teil.


Lies jetzt