【问题标题】:Add Dollar Sign after path in prompt .zsh在提示 .zsh 中的路径后添加美元符号
【发布时间】:2020-01-13 09:28:09
【问题描述】:

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

当前提示是:

.oh-my-zsh git:(master) 

想要的提示是:

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

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

【问题讨论】:

  • 只需将$ 附加到PROMPTPROMPT="<whatever> $"
  • 什么是 ?我想用 git 保持路径。
  • 大概你会用旧的提示符代替<whatever>

标签: zsh prompt


【解决方案1】:

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%}'

【讨论】:

    【解决方案2】:

    编辑您的 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    $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 显示 $ 提示! 这比下载 zsh 源代码并重新编译要容易,但我花了一段时间才找到正确的修补指令。二进制文件中似乎没有很多 privasserted 调用实例,因此您可能可以一一检查所有这些实例,看看哪一个适合。

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

    【讨论】:

    • % 也让我很烦。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-25
      • 2022-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 2020-04-12
      相关资源
      最近更新 更多