Vervollständigen Sie Befehlsnamen nur, wenn keine Dateinamen-Vervollständigungen vorhanden sind

4

Begründung: Ich habe Autocd aktiviert, benutze es aber nie, weil das Ausfüllen von Tabulatoren sehr mühsam ist, da jeder einzelne Befehlsname auf meinem System zusammen mit den Dateinamen vervollständigt wird.

Gewünschtes Verhalten: Ich möchte, dass zsh NUR Befehle zum Vervollständigen von Tabulatoren verwendet, wenn die vervollständigte Zeichenfolge kein Präfix für eine der Dateien im aktuellen Ordner ist.

Beispiel für das gewünschte Verhalten:

$ ls
foo1
foo2
$f<TAB>
foo1
foo2
$fi<TAB>
find
... (other commands that start with fi)

Ich denke, wenn dies nicht möglich ist, wäre es zumindest schön, Verzeichnisergänzungen vor Befehlsergänzungen zu setzen.

user223814
quelle

Antworten:

2

Ich habe die folgenden drei Zeilen in meiner ~/.zshrcDatei:

zle -C complete-files complete-word _generic
zstyle ':completion:complete-files:*' completer _files
bindkey "^F" complete-files

Dies ist an Ctrl-fdie Vervollständigung von Dateien / Ordnern gebunden. Wenn ich also weiß, dass ich auf jeden Fall einen Dateinamen vervollständigen möchte, verwende ich Ctrl-fstatt <tab>. Natürlich können Sie eine andere Bindung verwenden, indem Sie ^Fzu etwas anderem wechseln . Das Ergebnis:

$ ls
  foo1
  foo2
$ f<tab>
  f2py
  factor
  faillog
  ...
$ f<Ctrl-f>
  foo1
  foo2
simonb
quelle
Mir war bewusst, dass Sie dies tun können, aber dies erfordert, dass ich überlege, welche Art von Tab-Vervollständigung ich möchte, bevor ich Tab-Vervollständigung vornehme, was für mich ein großes Nein-Nein ist.
user223814
1

Um genau dieses Verhalten zu erhalten, geben Sie Folgendes in Ihre .zshrc ein:

compdef '_autocd || _command_names' -command-

Ich habe die Antwort in diesem Thread gefunden .

ajsalminen
quelle
0

Auf Bash, wenn Sie das tun

. f<TAB>

dann werden nur die Dateinamen aufgelistet. Ich weiß nicht, ob zsh dasselbe Verhalten haben. Im Allgemeinen wird die Bash-Autovervollständigung nur unter Verwendung von Dateinamen durchgeführt, wenn Sie einen Pfad eingeben müssen.

Marco Sulla
quelle