bash
系统升级后,我遇到完成问题。
$ mkdir abcde
$ cd abc[TAB]
不执行任何操作,而在旧bash
版本中它会扩展为$ cd abcde
。
一些较旧的论坛bash
建议设置该direxpand
选项,但似乎缺少该选项bash 4.2
:
$ shopt -s direxpand
bash: shopt: direxpand: invalid shell option name
(我已经从 Fedora 11 升级到 Fedora 17 bash-4.2.37
)
有办法解决这个问题吗?
答案1
bash 使用 readline 库进行输入,tab应该映射到 readlinecomplete
操作(这与同名的 bash 命令不同,尽管操作相关)。
可能的原因有多种,需要检查的事项包括:
- 测试其他补全是否有效:(
meta-?
可能是++ alt` )这应该列出所有匹配项(类似于按两次)shift?tab - 检查是否
ctrl-i
可以替代(输入标签的另一种方式) - 检查你的变量,以及(不应包含任何对标签的引用)
TERM
的输出stty
- 检查可以定义哪些 bash 补全功能,运行后
complete
不带参数列出它们 - 你的
readline
可能搞乱了,检查/etc/inputrc
和 你的~/.inputrc
(如果有的话),以及 的输出bind -q complete
。它至少应该包含“\C-i
” 含义ctrl- i(制表符) - 检查是否有任何内容破坏了 readline 的 tab 键序列:(
bind -S
不应包含“\C-i
”) - 如果你运行
bind '"\C-i": complete'
它是否会开始按预期工作?
答案2
显然 shopt -s direxpand 适用于一切除了内置的“cd”。所以我只需将“别名 xy=cd”添加到我的配置文件中,xy 的工作方式与 cd 相同,只是 direxpand 使用 TAB 工作。(谁会想到它会如此简单?)