我考虑切换到zsh和prezto已经有一段时间了,但是我想先解决一些讨厌的问题。
其中最大的一个事实是,“cd”的选项卡完成似乎有点混乱。例如,我的主目录中有一个名为" git“的目录,用于我的git项目,我经常希望从主目录移到它,也就是说,我编写如下:
~ >>> cd g[TAB]
~ >>> cd git因为"git“是唯一以"g”开头的文件夹,我显然希望这是选项卡完成的结果。但是,通过使用ZSH和prezto,它可以这样完成它:
~ >>> cd g[TAB]
~ >>> cd gnats再次使用选项卡也将尝试完成一个子文件夹的“蚊虫”,这两者都不存在!
到目前为止,我已经发现这很可能是由prezto引起的,因为禁用它会恢复到预期的行为。
有什么想法吗?我需要添加什么配置来修复这个问题?
发布于 2014-11-25 08:20:32
最有可能的罪魁祸首是shell选项CDABLE_VARS。您可以检查它是否使用setopt | grep cdablevars设置。由于它不是默认设置,所以您可以找到在prezto中设置它的位置,或者在prezto来源之后使用setopt nocdablevars显式地取消设置。
解释:
如果设置了CDABLE_VARS,zsh将处理非目录的cd参数,而不是以/开头的参数,就好像它们以~开头一样。这扩展到了cd的自动完成。
如果目录名以~开头(正如CDABLE_VARS所暗示的那样),zsh将检查到第一个/的元素是否可以以几种不同的方式进行替换。在您的示例中,~gnats被解释为静态命名目录,可以通过以下方式定义该目录:
~someone是用户的主目录某人。/开头的字符串值:
%某处=/若干/目录%打印~某处/部分/目录hash -d:hash -d SOMEWHERE=/some/directory我猜想,在这种情况下,它是用户蚊虫的主目录。据我所知,它至少是在Debian和Ubuntu上默认创建的。
https://stackoverflow.com/questions/27088092
复制相似问题