【问题标题】:Can't edit command in Zsh无法在 Zsh 中编辑命令
【发布时间】:2020-03-20 18:10:31
【问题描述】:

我在 Zsh 中有一个自定义提示。最后,我将最后一个字符涂成红色或绿色,具体取决于最后一个命令是成功还是失败。但是,当我这样做时,我无法返回并编辑以前的命令。

这是提示代码:

%{%F%(?.$fg[green].$fg[red])>%f%}

工作流程示例:

  1. 我输入一个换行的命令:

> 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."

  1. 运行后,我按向上箭头并通过删除并重新键入“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."

  1. 打印出来:

This is a very long printf. How long iis it It's so very very long that it wraps onto the next line.

我假设我没有以某种方式终止颜色代码,以便提示溢出到我尝试输入的实际命令中。只有当提示换行到新行时才会出现异常。谁能看到我的提示有什么问题?

我已经验证,如果没有这个 sn-p 代码,提示的其余部分都可以正常工作,并且可以按照您的预期运行。

【问题讨论】:

  • fg 数组中到底有什么?确切地知道你如何改变颜色会让我清理我的答案。

标签: zsh oh-my-zsh


【解决方案1】:

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 '

【讨论】:

  • 谢谢!正如你所指出的,问题最终是我使用了%{...%}
  • 我将删除颜色数组;不错的收获!
猜你喜欢
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-23
相关资源
最近更新 更多