我的 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 加载函数的目录列表。
变量FPATH
和fpath
是相互关联的(如PATH
和path
):改变一个变量会影响另一个变量。大写字母FPATH
是一个字符串,其中包含以冒号分隔的目录列表。小写字母fpath
是目录数组。
检查启动脚本中是否存在可能使用这些名称作为变量的任何位置。检查变量名列表放或者用过的通过 zsh ( man zshparam
) 并确保您不会将任何内容用于不同目的。
完成函数是自动加载的,即在第一次使用时加载。例如,一旦您在 shell 实例中完成了任何完成操作,您就不应该再看到_main_complete: function definition file not found
— 如果_main_complete
有效但随后停止处理此消息,则发生了更奇怪的事情。