0

一段时间以来,我一直在考虑切换到 zsh 和 prezto,但是我想先解决一些麻烦。

其中最大的一个事实是,“cd”的制表符完成似乎以某种方式搞砸了。例如,我的 git 项目的主目录中有一个名为“git”的目录,我经常想从主目录移动到它,也就是说,我这样写:

~ >>> cd g[TAB]
~ >>> cd git

由于“git”是唯一以“g”开头的文件夹,我显然希望这是选项卡完成的结果。但是,使用 ZSH 和 prezto,它会像这样完成它:

~ >>> cd g[TAB]
~ >>> cd gnats

再次使用 tab 也将尝试完成“gnats”的子文件夹,这两个都不存在!

到目前为止,我已经发现这很可能是由 prezto 引起的,因为禁用它会恢复到预期的行为。

任何想法我必须添加什么配置来解决这个问题?

4

1 回答 1

2

最可能的罪魁祸首是 shell 选项CDABLE_VARS。您可以检查它是否设置为setopt | grep cdablevars. 由于它不是默认设置,您可以在 prezto 中找到它的设置位置,或者在获取preztosetopt nocdablevars后明确取消设置。

解释:

如果CDABLE_VARS设置了,zsh处理的参数cd不是目录并且不以 开头,/就好像它们以~. 这延伸到cd.

如果目录名称以~(由 暗示CDABLE_VARS)开头,zsh会检查直到第一个的元素是否/可以用几种不同的方式替换。在您的情况下,~gnats被解释为静态命名目录,可以通过以下方式定义:

  1. 自动用于主目录:~someone是用户某人的主目录。
  2. 通过将 shell 参数设置为以 开头的字符串值/

    % SOMEWHERE=/some/directory
    % print ~SOMEWHERE
    /some/directory
    
  3. 通过使用hash -dhash -d SOMEWHERE=/some/directory

我猜在这种情况下,它是用户gnats的主目录。哪个 - 据我所知 - 似乎至少是在 Debian 和 Ubuntu 上默认创建的。

于 2014-11-25T08:20:32.960 回答