什么会打乱 Tab 键补全的顺序

什么会打乱 Tab 键补全的顺序

我发现我以前的操作系统(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/  

相关内容