是否可以突出显示(设置背景颜色)中的整行提示zsh
?在我的 emacs 配置中,光标所在的行与窗口背景的颜色略有不同,这是一个很好的视觉辅助。我想知道是否可以在我的终端/zsh 提示符中执行相同的操作,以便它在已运行的所有内容下有效地“画一条线”。
我尝试过PROMPT='%{$bg[grey]%}# '
在 my 中进行设置.zshrc
,但突出显示仅延伸到我键入的范围,而不是延伸到终端的边缘。
我想要实现的目标可能吗?
答案1
尝试将 RPROMPT 设置为空格。空格数应为终端宽度(减去#
和其他字符。)
答案2
您可以使用提示行*做任何您想做的事情 - 有问题的方面是让它撤消之后。我假设您不希望曾经有过提示的每一行都以突出显示颜色显示。
之后删除该行几乎会更容易,但随后您就没有命令了。也许删除提示然后回显命令(使用类似的伪提示$
)。您可以让提示以 ANSI 光标保存序列开始ESC [s
,然后在precmd
恢复它ESC [u
并清除光标之后的所有内容ESC [0J
,然后回显该命令(我不记得如何从内部获取该命令precmd
)。
*这是一个不完整的答案,我不知道如何让它以不同的背景颜色突出显示命令。
答案3
如果我改为grey
,white
你的例子实际上对我有用。
您使用什么终端?也许它以不同的方式处理背景颜色擦除?
以下是一些可供尝试的替代方案:
将整个提示行设置为灰色背景:
setopt promptsubst
preexec() {
tput sgr0
}
PS1="$(tput setab 7)# "
(应该与您的示例相同,但编写方式不同。)
在提示符前打印一行:
precmd() {
tput smul
for ((n=0; n<COLUMNS; n++)) { printf " "; }
printf "\n"
}
preexec() {
tput sgr0
}
(如果您更改"\n"
为"\r"
,则应该下划线当前行,但这似乎不起作用。我猜 zsh 在打印提示时会删除当前行,这就是我找到第一个解决方案的原因。)
将命令(即您键入的所有内容)设置为粗体:
setopt promptsubst
preexec() {
tput sgr0
}
PS1="# $(tput bold)"