在提示符 .zsh 中的路径后添加美元符号

Add Dollar Sign after path in prompt .zsh

我想在提示中的路径后添加美元符号。

当前提示为:

.oh-my-zsh git:(master) 

想要的提示是:

.oh-my-zsh git:(master) $

我尝试在 ~/.zshrc 中修改 PROMPT 但没有成功。

https://github.com/ohmyzsh/ohmyzsh/blob/c78277fd8bda5fec87504469afdf121355876006/themes/gozilla.zsh-theme#L1

PROMPT='%{$fg_bold[red]%}➜ %{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%}$ % %{$reset_color%}'

编辑你的 PROMPT 变量没问题,但也许你只是想改变 zsh 对所有提示主题的行为,而不是进入并修改每一个 %# 在您的主题中。 % 在源代码中被硬编码。但编辑起来非常简单。 您可以在源代码 (github) 的 prompt.c 文件中找到有问题的行,具体是当前第 734 行。 有问题的代码是:

        case '#': 
        addbufspc(1);
        *bv->bp++ = privasserted() ? '#' : '%';
        break;

您所要做的就是将 % 更改为您想要的任何字符,可能 $,构建程序并替换您的 zsh 安装。 那可能是一种痛苦。您还可以修补当前的二进制文件以替换您想要的任何字符。 您只需更改一个字节,从 0x25 (%) 到 0x24 ($)。 问题是,很难找到它在 zsh 二进制文件中的位置! 在我的例子中(Ubuntu 20.04,zsh 5.8)我发现了这个:

   $ objdump -D zsh  | less

   8af87:       e8 84 e4 01 00          callq  a9410 <privasserted@@Base>
   8af8c:       4c 8b 2d fd 49 05 00    mov    0x549fd(%rip),%r13        # df990 <keyboardhackchar@@Base+0x210>
   8af93:       0f b6 74 24 10          movzbl 0x10(%rsp),%esi
   8af98:       85 c0                   test   %eax,%eax
   8af9a:       b8 25 00 00 00          mov    [=11=]x25,%eax
   8af9f:       0f 44 f0                cmove  %eax,%esi
   8afa2:       49 8b 45 18             mov    0x18(%r13),%rax
   8afa6:       48 8d 50 01             lea    0x1(%rax),%rdx

坦率地说,我什至不确定这里的大部分指令是做什么的,但很容易看出 0x8af9a 处的指令是罪魁祸首。使用十六进制编辑器 (ghex),我用 0x24 替换了那里的 0x25,现在 zsh 显示 $ 提示符! 这比下载 zsh 源代码并重新编译它更容易,但我花了一段时间才找到正确的补丁指令。二进制文件中似乎没有很多 privasserted 调用的实例,因此您可以一一检查所有这些实例,看看哪个合适。

希望对您有所帮助!我是一个 bash 用户,那个 % 太烦我了,所以我拒绝尝试 zsh。现在我可以试试了。

根据手册,在提示中设置用户|超级用户字符的一种方法是添加此模式%(!.<superuser_char>.<ordinary_user_char>)。例如,当 joe 是 运行 时,shell 作为普通用户,joe@mypc:~ $,当 运行 作为超级用户时,root@mypc:~#在保持用户环境 的同时(即不是 root 环境,例如当使用 sudo -E tmux new -s admintasks 启动超级用户 tmux 会话时),这应该是 .zshrc.

`PS1='%n@%m:%~%(!.#.$) `

参见man zshmisc,在简单提示转义/Shell状态部分下。