我希望有一个可读的彩色路径。例如,不是简单地使用 %~ 返回,~/path/to/foo我想将其格式化~$RED/$NOCOLORpath$RED/$NOCOLORto$RED/$NOCOLORfoo为突出显示路径分隔符。
我可以定义 PROMPT 的内容,以便在每个显示器上重新评估路径表达式吗?类似的东西${${(%):-%~}//\//_some_format_expression/}显然不起作用。
或者我应该进一步破解它,并在每次我们更改目录时强制重置 PROMPT 值?
欢迎任何实现路径格式化目标的解决方案。
谢谢 :)
Den*_*son 39
zsh
尝试这个:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|grep --color=always /)%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
Run Code Online (Sandbox Code Playgroud)
这是提示的细分:
%{...%} - 转义序列$(pwd|grep --color=always /)- 打印当前目录并突出显示/- 颜色将取决于 $GREP_COLORS 环境变量(或其默认值)- 粗体红色是默认值%${#PWD}G- 使用当前目录名称的字符长度作为故障值。这使得 shell 将其视为前一个字符序列(在 " %{" 之后)的长度,而不是包含 ANSI 转义序列的字符串的实际长度。这可以防止 shell 混淆光标相对于提示结尾的位置。%(!.%F{red}.%F{cyan}) - 如果这是一个特权 shell (root) 将前景色设置为红色,否则为青色%n - 输出用户名%f - 将前景色重置为默认值@ - 字面量 at 符号%F{yellow} - 使前景色变黄%m - 输出主机名%f - 将前景色重置为默认值%(!.%F{red}.) - 如果这是一个特权 shell (root) 将前景色设置为红色%#-输出#为特权shell或%用于非特权一个%f - 将前景色重置为默认值我在这个提示中将路径放在首位以示强调,因为问题与路径有关。

这是 zsh 的一个版本,它通过操作$GREP_COLORS变量来根据您是否是 root(特权)来更改斜杠颜色:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|([[ $EUID == 0 ]] && GREP_COLORS="mt=01;31" grep --color=always /|| GREP_COLORS="mt=01;34" grep --color=always /))%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
Run Code Online (Sandbox Code Playgroud)
重击
您可以在 Bash 中执行类似的提示。在这个例子中,我把用户名和主机名放在第一位,当 UID 为 0 时,斜线的颜色也会改变。警告:这会覆盖 Bash 的$PS1提示变量。这应该不是问题,除非您正在做一些特殊的事情,或者您希望在直接设置该变量时行为会发生变化并且这有效。此外,这使用了一个名为“ usercolor”的变量,它可能会与其他东西发生冲突,尽管这整个东西可以放在一个函数中并且变量声明为本地。
PROMPT_COMMAND='usercolor="\[\033[0;36m\]";[[ $EUID == 0 ]] && usercolor="\[\033[1;31m\]";PS1="$(pwd)";PS1="$usercolor\u\[\033[0m\]@\[\033[0;33m\]\h\[\033[0m\]:${PS1//\//$usercolor/\[\033[0m\]}$usercolor\\$\[\033[0m\] "'
Run Code Online (Sandbox Code Playgroud)

我利用 Bash 没有 zsh 的“故障”功能这一事实来使用参数扩展替换来有条件地为斜杠着色(而不是使用 grep)。
一个纯粹的 zsh 解决方案:
PROMPT='%n@%m: %{$PR_BOLD_RED%}${${(%):-%~}//\//${PR_BOLD_RED}/%f}%f '
Run Code Online (Sandbox Code Playgroud)
${(%):-%~}是当前路径。${xxxxx//\//${PR_BOLD_RED}/%f}将 xxxxx 中的每个 / 替换为粗体红色我在测试中使用了双引号,这不允许替换。单引号一切正常。
| 归档时间: |
|
| 查看次数: |
33488 次 |
| 最近记录: |