如何更改 bash 完成结果颜色

如何更改 bash 完成结果颜色

在 bash 中自动完成子命令时如何更改完成颜色?enter image description here

由于未知原因,bash 似乎将完成结果视为损坏的符号链接。看起来真的很令人不安。

系统信息:

  • Bash 版本:4.4.23(1)-发布
  • 操作系统:Manjaro Linux

编辑:据我所知,通过设置颜色colored-stats中的 GNU Readline 选项~/.inputrc将完全关闭:

set colored-stats off

但这也会在自动完成时禁用其他着色,例如目录着色。

我认为这很奇怪,因为类似损坏的符号链接的着色发生在我家里的 Manjaro Linux 机器上,但不是我工作的 Arch Linux 机器上。两者都应用相同的bashrcinputrc。但我暂时没有检查其他潜在的差异。


再次编辑:粘贴我的~/.inputrc供参考:

$include /etc/inputrc
$if mode=emacs
# cycle through possible completions
TAB: menu-complete
# complete until the end of common prefix before cycling through possible completions
set menu-complete-display-prefix on
# show possible completions if more than one completions are possible
set show-all-if-ambiguous on
set show-all-if-unmodified on
# do not duplicate characters after the cursor if they consist partially of possbile completion
set skip-completed-text on
# display colors when doing completion as `ls` does
set colored-stats on
# color tab-completion matched prefix part
set colored-completion-prefix on
# fuck off stty key bindings. (stty -a)
set bind-tty-special-chars off
"\C-w": unix-word-rubout
"\eh": kill-region
"\eH": copy-region-as-kill
"\C-x\'": "\'\'\C-b"
"\C-x`": "``\C-b"
"\C-x\"": "\"\"\C-b"
"\C-x{": "{}\C-b"
"\C-x[": "[]\C-b"
"\C-x(": "()\C-b"
"\C-x0": vi-eWord
"\eF": "\C-x0\C-f"
"\eB": vi-bWord
"\eD": "\e \eF\eh"
$endif 

答案1

正如您所提到的,GNU Readline 的完成着色是通过colored-statsin启用的.inputrc

颜色由 确定$LS_COLORS,可以用 生成dircolors

完成建议似乎从MISSING中的属性继承了它们的颜色~/.dircolors。将其注释掉(或更改为不那么令人不安的内容,例如删除05;以禁用闪烁)会以默认颜色打印建议。中的相应条目$LS_COLORS是(带有 ANSI 颜色和 的...:mi=03;31:...示例)。0331

类似的讨论:
https://bugzilla.redhat.com/show_bug.cgi?id=1648170

参考:
https://wiki.archlinux.org/index.php/Readline#Colorized_completion
https://wiki.archlinux.org/index.php/Color_output_in_console#ls
dircolors:全局修改颜色设置
https://askubuntu.com/questions/466198/how-do-i-change-the-color-for-directories-with-ls-in-the-console

相关内容