我可以在zsh中突出显示当前提示行吗?


8

是否可以在提示的整个行中突出显示(设置背景色)zsh?在我的emacs配置中,光标所在的行与窗口背景的颜色略有不同,这在视觉效果上很有帮助。我想知道是否有可能在我的终端机/ zsh提示符下做同样的事情,以便在所有运行的东西下有效地“画一条线”。

我尝试PROMPT='%{$bg[grey]%}# '在我的菜单中进行设置,.zshrc但是突出显示区域仅延伸到我键入的位置,而不延伸到终端的边缘。

我要实现的目标有可能吗?

Answers:



1

您可以使用提示行*做任何您想做的事-有问题的方面是使它事后撤消。我假设您不希望每行都以高亮颜色显示提示。

之后删除该行几乎会更容易,但随后您将没有命令。也许删除提示,然后回显命令(带有伪提示,如$)。您可能会提示提示符从ANSI光标保存序列开始ESC [s,然后进行precmd恢复ESC [u并清除光标之后的所有内容ESC [0J,然后回显命令(我不记得如何从内部获取命令了precmd)。

*这是一个不完整的答案,我不知道如何使它以其他背景色突出显示该命令。


1

如果我更改greywhite,您的示例实际上对我有用。

您正在使用哪个终端?也许它以不同的方式处理背景色?

这里有一些替代方法可以尝试:

将整个提示行设为灰色背景:

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)"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.