Ls

為什麼在 LS_COLORS 中設置“mi”會影響 postgresql 和 python 選項卡完成?

  • August 18, 2020

所以我有一個自定義LS_COLORS設置,其中我有以下內容:

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

mi用於在 ls 的列表視圖中右側列中or失去的文件,在正常 ls 模式下用於失去文件,或在列表模式下位於左側。上面的設置使兩者都以亮黃色閃爍。我這樣設置它是因為我認為讓它閃爍是提醒自己注意失去鍊接的最明顯方法,效果很好。

但問題是當我在互動模式下執行 python 並要求 tab 完成時,例如import rethen re.[tab key]. 而不是僅僅獲得一個普通列表,其中的任何內容都mi應用於LS_COLORS建議。所以我最終得到了一個充滿閃爍文本的螢幕,這使得它無法以任何合理的速度閱讀。

當我在 postgresql 互動模式控制台中使用製表符完成時,也會發生同樣的事情。和python完全一樣。大多數其他程序或類似程序都很好,而且 bash 完成也很好。

這些程序是否ls用於格式化其輸出?我目前剛剛改mi回其他東西來解決這個問題,這並不重要,因為我仍然可以通過or. 但是我真的很想知道為什麼會發生這種情況以及我是否可以阻止它。

正在使用**GNU readline** ,這可以通過列出預設模組來確認:

$ python3
>>> import sys
>>> sys.modules.keys()
dict_keys([...,'readline', 'atexit', 'rlcompleter'])

反過來,Readline 使用LS_COLORS. 從man 3 readline,

coloured-stats (Off)

如果設置為 On,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")

引用自:https://unix.stackexchange.com/questions/605166