调用最后一个命令在开头插入虚假字符(在 Zsh 中)

调用最后一个命令在开头插入虚假字符(在 Zsh 中)

交互非常复杂,我不知道我到底在寻找什么,但也许你仍然可以提供帮助。

有时,通常在发生错误后(返回代码 > 0),当调用最后一个命令时,我在命令行前面插入了一个虚假字符。

> dls WEB-INF 
  ^ (d is inserted, but can be another letter)

我想知道是否是因为我的提示定义

autoload -Uz vcs_info
precmd_vcs_info() {
    vcs_info
}
precmd_functions+=( precmd_vcs_info )
setopt PROMPT_SUBST                     # Allow parameter expansion in prompt.
zstyle ':vcs_info:git:*' formats '%F{cyan}(%b)%f'
zstyle ':vcs_info:*' enable git

PROMPT="
%B%(?.%F{green}.%F{red}$(tput bel)"$'\u2718'" %? )%f%b%F{green}%n@%m%F{black}%B:%b%F{yellow}%~ %f\$vcs_info_msg_0_
%F{magenta}%(!.#.$)%f "
                                        # ? - Exit code of the previous command.
                                        # n - User name.
                                        # m - Machine name.
                                        # . - Abbreviated pwd.
                                        # ! - su?

… 或者是其他东西?

为了清楚起见,我的正常提示是:

(blank line)
user@host:/path/to/current/dir (Git info)
$

并且,如果最后一条命令出现错误,则:

(blank line)
x 127 user@host:/path/to/current/dir (Git info)
$

(其中127是最后一个命令的返回码。)

我无法轻易重现该问题,我仍然对触发条件(集)感到疑惑。

不过,我还注意到我的 Zsh 历史记录确实包含\n一些命令后的字符

 6848  2020-04-09 14:09  while true; do sleep 1; done
 6849  2020-04-09 14:10  dirax-flow-reverse ab-helpdesk-sla-create-priority-level-tab.js\n\n
                                                                                        ^^^^
 6850  2020-04-09 14:10  ls WEB-INF
 6851  2020-04-09 14:10  ls WEB-INF2

... 并回忆起那些(用Up钥匙)可以引发所描述的错误,但并非总是如此。

事实上,我在某些命令的末尾确实有一些换行符,这是需要解决的问题吗?或者是另一个不相关的问题?(可能来自从文本文件中复制/粘贴命令,我确实有一些要遵循的说明。)

如果您比我看得更清楚,我将非常感激您的任何帮助!

答案1

您可以在这里尝试检查几个选项。

  1. !!<Enter>是否涉及键绑定?尝试使用(您提到使用箭头)恢复最后一个命令Up。请参阅https://unix.stackexchange.com/questions/147563/how-do-i-repeat-the-last-command-without-using-the-arrow-keyshttps://stackoverflow.com/questions/25295186/access-to-last-command-in-zsh-not-previous-command-line

  2. 是否涉及提示?删除提示的所有设置。

此外,系统在任何时候都运行正常吗?你做过什么改动吗?

请发表反馈以帮助其他人帮助您。

相关内容