无法在ConEmu中启用256种颜色

23

我正在尝试在ConEmu-Maximus5控制台中获得256种颜色。

更新:现在只显示8种颜色。 我知道是因为“$ tput colors”的输出是“8”

我已经按照说明激活了以下功能:

  • TrueMod(24位颜色)支持
  • 注入ConEmuHk
  • ANSI x3.64 / xterm 256种颜色

我不明白如何处理'check off whether the buffer / slide.'

  • 我使用Windows 7。
  • 我使用自定义的快捷方式启动ConEmu,因此它加载cygwin bash文件。
"C:\Program Files\ConEmu\ConEmu64.exe" /cmd ""C:\cygwin\bin\bash.exe" --login -i"
  • 在我的bashrc配置文件中,我有->export TERM = cygwin
  • 这是我的自定义命令提示符:
    function prompt {
local RED="\[\033[0;31m\]" local GREEN="\[\033[0;32m\]" local COOLRED="\e[38;5;173m" local COOLGREEN="\e[38;5;113m" PS1="$COOLRED\u@\h $LIGHT_COOLGREEN\$PWD \[\e[0m\] > "
}
prompt
  • ConEmuANSI的值已经是ON了。

我有一些屏幕截图:

enter image description here

如您所见,命令提示符看起来非常夸张,因为它不喜欢256色设置。如果我用RED和GREEN代替COOLRED和COOLGREEN,那么它看起来还可以,但它不是256种颜色。

更多设置的截图:

输入图片说明输入图片说明

最后一个截屏是cygwin的mintty。一切都很好,完全支持256种颜色。可惜mintty没有选项卡。这就是我试图转移到ConEmu的主要原因。

输入图片说明

非常感谢您的帮助!!!


请解释一下,我应该在Bash中创建哪个文件来重新定义提示符? - Maximus
只需在您的主目录中创建一个名为 .bashrc 的文件。 - RafaelGP
奇怪,".bashrc" 不起作用,但 ".profile" 可以。 - Maximus
更奇怪的是,Bash不会将Esc发送到控制台,而是尝试自己处理它们。这里有8种颜色。 - Maximus
2
这个帖子解释了.bashrc、.bash_profile和.profile的区别。 - RafaelGP
ConEmu现在支持256种颜色吗? - qwertzguy
4个回答

13
Bash不会将ANSI序列发送到控制台,而是尝试自行处理它们。而*nix终端通常只有8种颜色(不考虑256种颜色模式),所以bash使用的是8种颜色调色板,而不是Windows终端普遍采用的16种颜色调色板。
我认为,在mintty中使用256种颜色是因为_isatty在该终端中返回零。但在ConEmu下返回非零值。也许在未来的版本中我会解决这个难题(如何为某些应用程序创建真正的带有PTY功能的终端)。
至于问题,
实际上你不需要256种颜色。要重新定义提示符调色板,可以使用"用背景扩展前景色"功能。简单来说-在ConEmu中设置颜色16、17等,在bash中将提示符背景设置为#5(可在ConEmu中配置),然后就可以了。
在ConEmu的“扩展…”处理中存在一个小错误。请使用121016版或更高版本。
PS1="\e[30;45m\u@\h \e[34;45m$PWD \[\e[0m\] > "

ConEmu 和实际的控制台窗口

ConEmu 设置

以下信息与问题不符,但可能会有用

当前版本不支持在“整个”控制台缓冲区中使用 256 色模式(是的,这是一种限制,计划中将其移除)。

因此,您可以采取两种方式:

  • 完全禁用滚动缓冲区(有很多方法,例如“cmd -cur_console:h0”)
  • 在滚动缓冲区底部工作。

感谢您的辛勤工作。事实上,我并不需要256种颜色。我只需要大约16种好看的颜色,我可以在颜色部分完成。干杯! - RafaelGP
7
@Maximus,我希望在ConEmu中能够看到256种颜色。比如说,我想要完全展示LS_COLORS的能力。 - antitoxic
2
Bash不会向控制台发送ANSI代码,您能详细说明一下吗?因为据我所知这是不正确的。 - Qix - MONICA WAS MISTREATED

2
我也无法让256色支持工作(颜色会显示出来,但它们看起来与16色调色板相同)。我切换到“xterm”颜色方案,现在它可以在本地的Windows可执行文件(如Python)中工作,但不能用于任何使用Cygwin的东西。Cygwin似乎有终端转义序列处理,您无法关闭,这使得 ConEmuHk 注入失效。

ConEmu wiki上有相关文档,在此处查看。


1
我遇到了一个奇怪的问题,采用了一种奇怪的解决方案,不知道是否适用于其他人,只是想分享一下这些信息以便有所帮助。我喜欢给我的控制台上色,并且喜欢使用真正的256位RGB颜色。在像conemu/CMDer(我使用的是forked版本)instruction中进行配置后,我的256位着色测试看起来像这样。enter image description here稍微试验了一下并测试了我的bash 256位能力,即运行此命令:
for i in {1..16384}; do echo -en "\e[38;5;${i}mTest";done

*注意应该是{1..256},但为了更长的颜色打印,我不得不强制使用更长的随机数.. 得到结果: 输入图像描述

但运行了2-3次后,我突然看到了这个干净的灰色阴影 输入图像描述

然后它就可以工作了.. 输入图像描述

奇怪的是,我让它工作了。CMDer是否因为优化原因而没有使用完整的256位,并在触发时被触发?

PS:我的CMDer控制台命令:

-cur_console:fp -cur_console:d:"C:\WS":P:"<Cobalt>":t:"test":C:"C:\Arbeit\tools\Iconka-Buddy-Ninja.ico" set "PATH=%ConEmuDrive%\Program Files\Git\usr\bin;%PATH%" & "%ConEmuDrive%\Program Files\Git\git-bash.exe" --no-cd --command=%ConEmuBaseDirShort%\conemu-msys2-64.exe /usr/bin/bash.exe -l -i

-1
local COOLRED="\e[38;5;173m"

local COOLGREEN="\e[38;5;113m"

这些\e可能来自于C语言的printf字符串。在shell脚本中不需要它们。坚持使用原始的\033符号。此外,您还缺少了闭合的\]。这些行现在应该是:

local COOLRED="\[\033[38;5;173m\]"

local COOLGREEN="\[\033[38;5;113m\]"

2
谢谢您的回复。我尝试了您给的变量,但还是没有成功。为了排除可能性,我已经删除了我的自定义颜色提示,当我打印 AnsiColors256.ans 时似乎只能显示8种颜色。 - RafaelGP
1
"\e" 通常类似于转义字符,确实是必需的。它们与 printf 没有任何关系。 - Qix - MONICA WAS MISTREATED

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接