为什么在 LS_COLORS 中设置“mi”会影响 postgresql 和 python 制表符补全?

为什么在 LS_COLORS 中设置“mi”会影响 postgresql 和 python 制表符补全?

所以我有一个自定义LS_COLORS设置,其中我有以下内容:

mi=05;01;33:
or=05;01;33:

mi是在 ls 列表视图中右列缺少文件的情况,or是在正常 ls 模式下缺少文件的情况,或者在列表模式中左侧列缺少文件的情况。上面的设置使两者都闪烁亮黄色。我这样设置是因为我认为让它闪烁是提醒自己缺少链接的最明显方法,效果很好。

但问题是当我以交互模式运行 python 并要求制表符完成时,例如import rethen re.[tab key]。而不是仅仅获得一个普通的列表,其中的任何内容mi都会LS_COLORS应用于建议。所以我最终看到的屏幕上充满了闪烁的文本,这使得它几乎不可能以任何合理的速度阅读。

当我在 postgresql 交互模式控制台中使用制表符补全时,也会发生同样的事情。和Python完全一样。大多数其他程序或类似程序都很好,并且 bash 完成也很好。

这些程序是否使用它们ls来格式化其输出?我目前只是改回mi其他东西来解决这个问题,这并不重要,因为我仍然可以通过or.但我真的很想知道为什么会发生这种情况以及我是否可以阻止它。

答案1

GNU 阅读线正在使用,可以通过以下方式确认列出默认模块:

$ 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")

相关内容