阻止 zsh 完成父目录

tty*_*yS0 9 zsh autocomplete filenames

我使用 zsh 和 grml 的 zshrc 作为基础。作为我工作的一部分,我定期访问网络路径(例如 NFS。AFS。)

如果我写 /a/long/network/path/on/the/other/side/of/the/world 按 TAB 两次它会很慢,因为 zsh 开始在 /a/ 下搜索然后 /a/long /a/long/网络等...

同时运行 ls /a/long/network/path/on/the/other/side/of/the/world 会在一秒钟内返回。所以我想告诉 zsh 不要再猜我了。(如果我写 /usr/src/linuxx/ 然后按 Tab 它会发现我想要 /usr/src/linux/ 这很酷但是因为网络对我来说弊大于利)。我只想在最后一个斜杠后“最后”自动完成。

有时我使用一种解决方法 cd 进入目录,然后使用自动完成。当然必须有更好的方法。

我怎样才能做到这一点?

Gil*_*il' 7

这种行为是通过样式配置的(除了一些具有选项的基础)。你会想要关掉path-completion.

默认情况下,文件名完成检查路径的所有组件以查看是否有该组件的完成。例如,/u/b/z可以完成到/usr/bin/zsh. 将此样式显式设置为 false 会禁止/光标前的路径组件的此行为

zstyle ':completion:*' path-completion false
Run Code Online (Sandbox Code Playgroud)

您可能希望改为开启accept-exact-dirs。在path-completion打开并accept-exact-dirs打开left 的情况下,如果路径不存在,zsh 将仅尝试完成除最后一个之外的路径组件。

zstyle ':completion:*' accept-exact-dirs true
Run Code Online (Sandbox Code Playgroud)