如何在bash shell中设置光标颜色[重复]
Posted
技术标签:
【中文标题】如何在bash shell中设置光标颜色[重复]【英文标题】:How to set cursor color in bash shell [duplicate] 【发布时间】:2016-09-30 03:38:04 【问题描述】:我发现我可以通过在我的 .bashrc 文件中包含以下指令来让光标闪烁:
echo -ne "\x1b[1 q"
但我也想更改闪烁光标的颜色。我知道我的终端支持颜色,因为我可以设置提示颜色并以颜色打印文本,但我无法更改光标颜色。有什么建议吗?
我正在添加以下评论,我知道如何更改终端上显示的文本颜色,但这与更改光标颜色不同。所以that other question 没有解决我的问题。
但我确实在我的终端仿真器软件中找到了一种解决方法,如下所示。 感谢您的反馈,尤其是关于选择正确的转义码可在终端类型之间移植的部分。
【问题讨论】:
旁白:echo -ne
是错误的形式;请考虑printf
。请参阅pubs.opengroup.org/onlinepubs/009604599/utilities/echo.html 处的echo
的POSIX 规范——-n
是允许的,但行为未定义,除了在输出上打印文字文本-e
之外,-e
的任何行为都是完全不允许的。虽然 bash 的 echo 默认情况下是不合规的,但它并非总是不合规;例如,设置了xpg_echo
和posix
选项后,它变得合规,因此不应依赖它偏离的地方。
...不过,更大的问题是转义码是特定于终端的。您不应该在您的软件或配置中硬编码它们 - 获取它们的正确方法是通过为您当前的 TERM 环境变量查找正确值的代码。
查看echo -e "\e]12;red\a"
同样,您的终端是否支持更改光标颜色是也终端特定的,查找特定代码需要知道TERM
的实际值。跨度>
@MohamedSlama, printf %b '\e]12;red\a'
,如果你希望它可以移植到不同的 shell。 (它已经不能移植到不同的终端,但是如果不进行 termcap/terminfo 查找,这种便携性是不可能的)。
【参考方案1】:
后来我发现我可以更改光标颜色,不是在 bash 中,而是在终端仿真器程序中。就我而言,该程序是 MobaXTerm。我发现了以下顺序:设置 - 终端 - 光标。此时,选择光标颜色会导致 bash shell 中的光标以所需的颜色显示。所以现在在我在 xterm 窗口的 bash 环境中使用 vim 编辑的文件中,我看到一个闪烁的绿色块光标,这正是我所需要的。
请查看以下演示短片:Blinking Green Block Cursor in bash and vim
实现这一点是我的问题,而不是关于如何在屏幕上显示彩色文本,正如所指出的那样,这已经在其他地方得到了回答。所以我的问题不是重复的。无论如何,事实证明我的 xterm 仿真软件 Mobaxterm 允许我设置光标颜色,而我的 .bashrc 文件中的转义序列允许我让它闪烁。
【讨论】:
有用的链接,以防将来有人需要它:ascii-table.com/ansi-escape-sequences-vt-100.php 粗体序列:freebsd.org/cgi/…bold=`tput smso` offbold=`tput rmso`
【参考方案2】:
不要使用回显转义字符。像这样使用 printf:
printf '%b' '\e]12;red\a'
【讨论】:
这条线对我不起作用。它什么也不打印。以上是关于如何在bash shell中设置光标颜色[重复]的主要内容,如果未能解决你的问题,请参考以下文章
iOS开发中设置UITextField的占位文字的颜色,和光标的颜色