所以我有一个自定义LS_COLORS
设置,其中我有以下内容:
mi=05;01;33:
or=05;01;33:
mi
是在 ls 列表视图中右列缺少文件的情况,or
是在正常 ls 模式下缺少文件的情况,或者在列表模式中左侧列缺少文件的情况。上面的设置使两者都闪烁亮黄色。我这样设置是因为我认为让它闪烁是提醒自己缺少链接的最明显方法,效果很好。
但问题是当我以交互模式运行 python 并要求制表符完成时,例如import re
then re.[tab key]
。而不是仅仅获得一个普通的列表,其中的任何内容mi
都会LS_COLORS
应用于建议。所以我最终看到的屏幕上充满了闪烁的文本,这使得它几乎不可能以任何合理的速度阅读。
当我在 postgresql 交互模式控制台中使用制表符补全时,也会发生同样的事情。和Python完全一样。大多数其他程序或类似程序都很好,并且 bash 完成也很好。
这些程序是否使用它们ls
来格式化其输出?我目前只是改回mi
其他东西来解决这个问题,这并不重要,因为我仍然可以通过or
.但我真的很想知道为什么会发生这种情况以及我是否可以阻止它。
答案1
$ python3
>>> import sys
>>> sys.modules.keys()
dict_keys([...,'readline', 'atexit', 'rlcompleter'])
Readline 则使用LS_COLORS
.从man 3 readline
,
彩色统计(关闭)
如果设置为开,readline 使用不同的颜色显示可能的完成,以指示其文件类型。颜色定义取自 LS_COLORS 环境变量的值。
如果您不相信,请返回交互式 python 会话并输入
>>> a<TAB><TAB>
abs( all( and any( as ascii( assert async await
>>> import readline
>>> readline.parse_and_bind("set colored-stats off")
>>> a<TAB><TAB>
abs( all( and any( as ascii( assert async await
禁用彩色统计后,建议的补全(bs(
、ll(
等)应为终端的正常颜色。前缀a
仍然继承颜色LS_COLORS
,您同样可以禁用它
readline.parse_and_bind("set colored-completion-prefix off")