在提示符 .zsh 中的路径后添加美元符号
Add Dollar Sign after path in prompt .zsh
我想在提示中的路径后添加美元符号。
当前提示为:
.oh-my-zsh git:(master)
想要的提示是:
.oh-my-zsh git:(master) $
我尝试在 ~/.zshrc
中修改 PROMPT
但没有成功。
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状态部分下。
我想在提示中的路径后添加美元符号。
当前提示为:
.oh-my-zsh git:(master)
想要的提示是:
.oh-my-zsh git:(master) $
我尝试在 ~/.zshrc
中修改 PROMPT
但没有成功。
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状态部分下。