2010-04-17 2 views
5

Manchmal möchte ich einen Dateinamen anstelle von dem, was zsh für mich schätzt. Zum Beispiel habe ich eine PNG-Datei ohne ein richtiges .png Suffix, die zsh denkt, dass es kein Bild ist und es nicht auflisten, wenn ich Tab schreibe, um Argumente von display abzuschließen.Bindeschlüssel, um Dateinamen überall dort zu vervollständigen, wo der Kontext in Zsh ist

Ich frage mich, ob es eine Tastenfolge gibt, die für einen Dateinamen überall dort, wo der Kontext ist, wie ^XC für _correct_filename, oder wie zsh, um das Ding zu tun?

Antwort

7

Sie können einen Schlüssel hinzufügen Bindung zu tun, was Sie wollen:

zle -C complete complete-word complete-files 
bindkey '^X\t' complete 
complete-files() { compadd - $PREFIX* } 

Edit: Added $PREFIX

Sie diese Zeilen zu Ihrer ~/.zshrc Datei hinzufügen können.

, dass die Fertigstellung Liste aller Dateien macht, wenn Sie Strg drücken - xTab bei jedem Schritt statt Tab. Sie können eine andere Tastenkombination wählen, die zu Ihnen passt.

Oder machen ImageMagick Vervollständigungen immer alle Dateien, versuchen Sie die Bearbeitung der Datei /usr/share/zsh/functions/Completion/Unix/_imagemagick (oder ähnlich) (ein Backup zuerst machen), und dies zu ändern, um die bestehende Zeile, die mit _files beginnt zu kommentieren und fügen Sie den neuen gezeigt:

if (($#)); then 
    # _files "[email protected]" -g "*.(#i)(${~formats//:/|})(-.)" 
    _files "[email protected]" 
    return 
fi 
+0

Nützlich, aber nicht sehr ideal. Die 'complete-files'-Funktion kann nur Dateien im aktuellen Verzeichnis vervollständigen. Ich habe '_files' anstelle davon versucht, aber einen '(eval): 1: keine Übereinstimmungen gefunden: *: alle-Dateien' Fehler bekommen. Gibt es eine Möglichkeit, es so zu verhalten, wie wenn man nach "Katze" fertig ist? Ich möchte, dass es nicht nur für 'display' vervollständigt wird, also passt das letztere nicht zu meiner Situation. – lilydjwg

+0

@lilydjwg: Ich verstehe nicht. Für mich funktioniert complete-files mit completing für die Anzeige genauso wie die reguläre Vervollständigung für cat (außer die Dateityp-Suffixe wie "@" und "*" werden nicht hinzugefügt. Wenn ich die Tab-Vervollständigung für cat Ich bekomme nur Dateien im aktuellen Verzeichnis –

+0

Ich meine, wenn ich einen Pfad eingeben (zB ./ oder ../ oder abc /, mit '/' in dem, was ich eingegeben habe) und dann die Funktion auslösen, wird nichts sein – lilydjwg

Verwandte Themen