一段时间后,ZSH 自动补全会出现看似随机的错误

一段时间后,ZSH 自动补全会出现看似随机的错误

我的 zsh 自动补全功能以一种奇怪的方式被破坏了。对于干净的登录,一切正常,但一段时间后,对于不同“种类”的自动完成,我会收到看似随机的自动完成错误。有时ls foo<tab>有效但rm foo<tab>不会。我完全不知道如何调试这个。

我找不到导致它的特定命令的模式。我也看不到什么完成工作有效、什么无效的模式。在我的日常工作中,我使用 gnu 模块、运行 make、编译器、nano 等。

我在自动完成时遇到的错误如下所示:

/bin/zsh:4: _main_complete: function definition file not found

或者

(eval):1: _autocd: function definition file not found
(eval):1: _autocd: function definition file not found
(eval):1: _autocd: function definition file not found
_main_complete:173: _ignored: function definition file not found
_main_complete:173: _ignored: function definition file not found
_main_complete:173: _ignored: function definition file not found

或者

(eval):1: _rm: function definition file not found
(eval):1: _rm: function definition file not found
(eval):1: _rm: function definition file not found

我已经看到 _sudo 和 _module 的类似消息。

我在主文件系统位于 nfs 上的计算机上的多个屏幕会话中使用 zsh (5.0.2) 和 oh-my-zsh。我每次screen -xrR登录时都会自动附加到屏幕会话.zprofile

hostname每当我登录时,都会创建两个文件 $HOME/.zcompdump 和 $HOME/.zompdump- -5.0.2。删除它们没有什么区别。

答案1

这可能是运行一些破坏变量FPATH或 的代码的结果fpath。检查这些变量之一的值;它应该是 zsh 加载函数的目录列表。

变量FPATHfpath是相互关联的(如PATHpath):改变一个变量会影响另一个变量。大写字母FPATH是一个字符串,其中包含以冒号分隔的目录列表。小写字母fpath是目录数组。

检查启动脚本中是否存在可能使用这些名称作为变量的任何位置。检查变量名列表或者用过的通过 zsh ( man zshparam) 并确保您不会将任何内容用于不同目的。

完成函数是自动加载的,即在第一次使用时加载。例如,一旦您在 shell 实例中完成了任何完成操作,您就不应该再看到_main_complete: function definition file not found— 如果_main_complete有效但随后停止处理此消息,则发生了更奇怪的事情。

相关内容