无法在 Zsh 中编辑命令
Can't edit command in Zsh
我在 Zsh 中有一个自定义提示符。最后,我将最后一个字符涂成红色或绿色,具体取决于最后一条命令是成功还是失败。但是,当我这样做时,我无法返回并编辑以前的命令。
这是提示码:
%{%F%(?.$fg[green].$fg[red])>%f%}
示例工作流程:
- 我输入一个换行的命令:
> printf "%s\n" "This is a very long printf. How long is it? It's so very very long that it wraps onto the next line."
- 运行后,我点击向上箭头并通过删除并重新键入 "is it" 来修改命令。现在,命令行显示:
> printf "%s\n" "This is a very long printf. How long is it It's so very very long that it wraps onto the next line."
- 打印出来:
This is a very long printf. How long iis it It's so very very long that it wraps onto the next line.
我假设我不会以某种方式终止颜色代码,这样提示就会溢出到我尝试输入的实际命令中。它只会在提示换行时出现异常。谁能看出我的提示有什么问题?
我已经验证,如果没有这段代码,提示的其余部分没有问题,并且会按照您的预期运行。
zsh
对提示的实际长度感到困惑。 shell 已经知道它自己的 %F
转义符不会影响提示的屏幕长度;您不需要像在 bash
.
中那样将其包装在 %{...%}
中
PS1="%F%(?.$fg[green].$fg[red])>%f"
如果 fg
包含实际的特定于终端的转义序列,那么您将需要 %{...%}
,但您根本不会使用 %F
,因为这不是您使用的方式用它。所以你可能真的需要像
这样的东西
PS1="%(?.%{$fg[green]%}.%{$fg[red]}%})>%f"
但是,您不需要单独的颜色阵列; zsh
也内置了它们。
PS1='%(?.%F{green}.%F{red})>%f '
我在 Zsh 中有一个自定义提示符。最后,我将最后一个字符涂成红色或绿色,具体取决于最后一条命令是成功还是失败。但是,当我这样做时,我无法返回并编辑以前的命令。
这是提示码:
%{%F%(?.$fg[green].$fg[red])>%f%}
示例工作流程:
- 我输入一个换行的命令:
> printf "%s\n" "This is a very long printf. How long is it? It's so very very long that it wraps onto the next line."
- 运行后,我点击向上箭头并通过删除并重新键入 "is it" 来修改命令。现在,命令行显示:
> printf "%s\n" "This is a very long printf. How long is it It's so very very long that it wraps onto the next line."
- 打印出来:
This is a very long printf. How long iis it It's so very very long that it wraps onto the next line.
我假设我不会以某种方式终止颜色代码,这样提示就会溢出到我尝试输入的实际命令中。它只会在提示换行时出现异常。谁能看出我的提示有什么问题?
我已经验证,如果没有这段代码,提示的其余部分没有问题,并且会按照您的预期运行。
zsh
对提示的实际长度感到困惑。 shell 已经知道它自己的 %F
转义符不会影响提示的屏幕长度;您不需要像在 bash
.
%{...%}
中
PS1="%F%(?.$fg[green].$fg[red])>%f"
如果 fg
包含实际的特定于终端的转义序列,那么您将需要 %{...%}
,但您根本不会使用 %F
,因为这不是您使用的方式用它。所以你可能真的需要像
PS1="%(?.%{$fg[green]%}.%{$fg[red]}%})>%f"
但是,您不需要单独的颜色阵列; zsh
也内置了它们。
PS1='%(?.%F{green}.%F{red})>%f '