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

在prompt.zsh中的路径后添加美元符号,zsh,prompt,Zsh,Prompt,我想在提示符中的路径后添加美元符号 当前提示为: .oh-my-zsh git:(master) .oh-my-zsh git:(master) $ 通缉令是: .oh-my-zsh git:(master) .oh-my-zsh git:(master) $ 我试图在~/.zshrc中修改提示符,但没有成功 提示符='%{$fg_粗体[红色]]}➜ %{$fg_bold[green]]]}%p%{$fg[cyan]]}%c%{$fg_bold[blue]]}$git_prompt_

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

当前提示为:

.oh-my-zsh git:(master) 
.oh-my-zsh git:(master) $
通缉令是:

.oh-my-zsh git:(master) 
.oh-my-zsh git:(master) $
我试图在~/.zshrc中修改提示符,但没有成功


提示符='%{$fg_粗体[红色]]}➜ %{$fg_bold[green]]]}%p%{$fg[cyan]]}%c%{$fg_bold[blue]]}$git_prompt_info%{$fg_bold[blue]]]}$%%{$reset_color%}

编辑提示变量很好,但您可能只想更改所有提示主题的zsh行为,而不必进入并修改每一个提示主题 %在你的主题中。 %在源代码中是硬编码的。但编辑起来很简单。 您可以在源代码中的prompt.c文件中找到有问题的行,特别是当前的734行。 有关守则是:

案例: addbufspc1; *bv->bp++=privassected?:“%”; 打破 您所要做的就是将%更改为您想要的任何字符,可能是$,构建程序并替换您的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    $0x25,%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显示一个$prompt! 这比下载zsh源代码并重新编译要容易,但我花了一段时间才找到正确的补丁指令。二进制文件中似乎没有很多privassected调用的实例,因此您可能可以逐个检查所有这些实例,看看哪一个适合


希望这是有帮助的!我是一个bash用户,这个%让我非常恼火,所以我拒绝尝试zsh。现在我可以试一试。

只需在提示符后追加$PROMPT=$what is?我想用git保持path。大概你会把整个旧提示符替换为