我发现我以前的操作系统(Ubuntu Xenial)和当前的操作系统(Ubuntu Bionic)之间的行为存在差异。
简短的故事是这样的:
当使用 Tab 键补全时cd
,Tab 键补全的顺序已经改变。
为了演示这个问题,假设我有这个目录结构(所有目录):
/vagrant/hello
/vagrant/hello/web
/vagrant/hello/web/hello.com
我有CDPATH=.:/vagrant:/vagrant/hello/web
在过去,cd hel<TAB>
表现hello
第一和hello.com
第二:
$ cd hel<TAB>
hello/ hello.com/
但是现在,它以相反的顺序显示,这是不可取的:
$ cd hel<TAB>
hello.com/ hello/
在我控制范围内的事情在这两个版本之间没有任何变化。
更长的故事(仅供参考,我相信这无关紧要):
A) 我是的“重度用户” CDPATH
——这种顺序变化完全打乱了我的节奏。
B)实际上,我正在使用这个.inputrc
文件,在选项卡上实际执行menu-complete
(上面的输出来自 Shift+Tab,这是正常的complete
)。
TAB: menu-complete
"\e[Z": complete
C) 我曾尝试在干净的(Docker)环境中重现此问题,但无法重现“不良”行为。
D) 我尝试过一些menu-complete-backwards
类似的变化,但结果并不更好。
E) 我尝试了无数种不同的CDPATH
值,包括改变顺序和:.
在最后添加。
F)在执行时cd something<TAB>
,似乎补全会优先考虑不在当前目录中的目录,然后再选择当前目录中的目录 - 即使CDPATH
以点开头 -.:/other/paths
我不知道如何调试此问题,非常感谢任何帮助。
答案1
完成顺序似乎取决于当前的语言环境 - 特别是LC_COLLATE
前任。
$ LC_COLLATE="C.UTF-8"
$
$ cd helloTABTAB
hello.com/ hello/
$ LC_COLLATE="en_US.UTF-8"
$
$ cd helloTABTAB
hello/ hello.com/