如果不存在文件名补全,则仅完成命令名称

如果不存在文件名补全,则仅完成命令名称

原因:我启用了 autocd,但我从未使用它,因为它使制表符补全变得非常麻烦,因为我的系统上的每个命令名都将与文件名补全一起完成。

期望行为:如果完成的字符串不是当前文件夹中任何文件的前缀,我希望 zsh 仅执行制表符完成命令。

期望行为的示例:

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

我想如果这不可能的话,至少将目录补全放在命令补全之前会更好。

答案1

我的文件中有以下三行~/.zshrc

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

这会绑定Ctrl-f到文件/文件夹完成,因此如果我知道我肯定想要使用制表符完成文件名,那么我会使用Ctrl-f而不是<tab>。显然,您可以通过更改为其他内容来使用不同的绑定^F。结果:

$ ls
  foo1
  foo2
$ f<tab>
  f2py
  factor
  faillog
  ...
$ f<Ctrl-f>
  foo1
  foo2

答案2

要获得这种精确的行为,请将其放入您的 .zshrc 中:

compdef '_autocd || _command_names' -command-

我找到了答案此主题

答案3

如果你这样做

. f<TAB>

那么只会列出文件名。我不知道 zsh 是否有相同的行为。一般来说,当您必须输入路径时,bash 只会使用文件名自动完成。

相关内容