为命令行提示符设置PS1变量时如何获取光标坐标?
how to get the coordinate of cursor when setting PS1 variable for command line prompt?
我正在使用 Mac。我想设置 PS1 变量以在命令行提示符的行尾获取当前时间。像这样:
或这个:
但是,不幸的是,我无法通过以下配置得到我想要的:
CYAN="\[$(tput setaf 6)\]"
GREEN="\[$(tput setaf 2)\]"
BLUE="\[$(tput setaf 4)\]"
YELLOW="\[$(tput setaf 3)\]"
export PS1="$GREEN\u$BLUE@$CYAN\h $YELLOW\w\[$(tput cuf $(($(tput cols)-33)))\]$CYAN\[$(date +%H:%M)\]\n\$ "
好像需要获取光标的当前位置,根据位置的坐标做一些计算,但不知道怎么获取。有人可以帮忙吗?
有几个问题。这个块
$(tput cuf $(($(tput cols)-33)))
似乎是您要问的问题。如果您想将日期放在行尾,您可以尝试使用 hpa
(绝对水平位置)功能,例如,
$(tput hpa $(($(tput cols)-5)))
这样,您可以将光标移动到行中给定的 绝对 位置,而不是将 相对 移动到当前位置。
给定的提示占两行。如果您在写入日期的部分前后使用 sc
和 rc
功能(save/restore 光标),则可以将其缩减为一行。这可能 运行 会导致行编辑清除日期的问题,但这是需要考虑的事情。
感谢@Thomas 的好回答,它可以真正解决我提出的问题作为解决方案。但它并不完美,这意味着它仍然无法获得我想要的命令提示符。
我发现bash中我想要的提示应该无解。但是,正如@chepner 所说,确实存在在 zsh.
中获取提示的方法
如何在zsh中得到提示:
zsh 是一个非常强大的 shell,内置于 mac,但对于新手来说有点复杂。所以有一个很好的工具来解决它,名为“oh-my-zsh”,这使得 zsh 的使用更加容易。
"oh-my-zsh" 包括许多 zsh 主题。而且,幸运的是,我想要的提示与其中一个非常相似(在这里查看主题),它名为 blink。所以我只需要修改一点位于 ~/.oh-my-zsh/themes/blinks.zsh-theme
的主题文件,需要做的更改是:
将文件的最后一行更改为:
RPROMPT='%{%B%F{cyan}%}%!%{%f%k%b%}
到
RPROMPT='%{%B%F{cyan}%}%@%{%f%k%b%}
我正在使用 Mac。我想设置 PS1 变量以在命令行提示符的行尾获取当前时间。像这样:
但是,不幸的是,我无法通过以下配置得到我想要的:
CYAN="\[$(tput setaf 6)\]"
GREEN="\[$(tput setaf 2)\]"
BLUE="\[$(tput setaf 4)\]"
YELLOW="\[$(tput setaf 3)\]"
export PS1="$GREEN\u$BLUE@$CYAN\h $YELLOW\w\[$(tput cuf $(($(tput cols)-33)))\]$CYAN\[$(date +%H:%M)\]\n\$ "
好像需要获取光标的当前位置,根据位置的坐标做一些计算,但不知道怎么获取。有人可以帮忙吗?
有几个问题。这个块
$(tput cuf $(($(tput cols)-33)))
似乎是您要问的问题。如果您想将日期放在行尾,您可以尝试使用 hpa
(绝对水平位置)功能,例如,
$(tput hpa $(($(tput cols)-5)))
这样,您可以将光标移动到行中给定的 绝对 位置,而不是将 相对 移动到当前位置。
给定的提示占两行。如果您在写入日期的部分前后使用 sc
和 rc
功能(save/restore 光标),则可以将其缩减为一行。这可能 运行 会导致行编辑清除日期的问题,但这是需要考虑的事情。
感谢@Thomas 的好回答,它可以真正解决我提出的问题作为解决方案。但它并不完美,这意味着它仍然无法获得我想要的命令提示符。
我发现bash中我想要的提示应该无解。但是,正如@chepner 所说,确实存在在 zsh.
中获取提示的方法如何在zsh中得到提示:
zsh 是一个非常强大的 shell,内置于 mac,但对于新手来说有点复杂。所以有一个很好的工具来解决它,名为“oh-my-zsh”,这使得 zsh 的使用更加容易。
"oh-my-zsh" 包括许多 zsh 主题。而且,幸运的是,我想要的提示与其中一个非常相似(在这里查看主题),它名为 blink。所以我只需要修改一点位于 ~/.oh-my-zsh/themes/blinks.zsh-theme
的主题文件,需要做的更改是:
将文件的最后一行更改为:
RPROMPT='%{%B%F{cyan}%}%!%{%f%k%b%}
到
RPROMPT='%{%B%F{cyan}%}%@%{%f%k%b%}