oh-my-zsh cursor up before program has finished vs after, 如何使它们的行为一致
oh-my-zsh cursor up before program has finished vs after, how to make them behave consistently
我注意到,如果我在提示符下按向上箭头,那么我会得到上一个命令,然后再次向上得到之前的命令。
而如果我在上一个程序完成之前按向上箭头 ,那么我会显示上一个命令,光标位于行尾,但是天哪-zsh 现在处于 "search for lines that start with ... " 模式,这意味着我无法按向上键获取上一个命令。
我确信这种行为是众所周知的,也是意料之中的,但以防万一你不明白,你可以像这样回购它
- 输入
ls
return
- 类型
sleep 3
return
- 等待 3 秒提示出现
- 按⬆(应显示
sleep 3
)
- 再次按⬆(应显示
ls
)
- 按return(至运行
ls
)
- 键入
sleep 3
return ⬆(在 3 秒过去之前按向上箭头)
- 现在应该显示
sleep 3
- 按⬆
它仍将显示 sleep 3
,但它希望它显示 ls
。相反,它是在“搜索以 sleep 3
模式而不是 go to previous command
模式开头的命令。
要尝试在这两种情况下清除这些是步骤
- lsreturn
- 睡觉 3return
- ⬆
- ⬆
但是根据第 3 步是在第 2 步完成之前还是之后发生,他们最终会得到不同的结果。
但这似乎不是我要找的。我喜欢 oh-my-zsh 的部分行 + up = 搜索以部分开头的行。我要解决的问题是,如果我在上面的第 2 步按下向上键,它会神奇地插入一个部分,就像我等到第 2 步完成时一样。
如何让 oh-my-zsh 在这里保持一致,以便过早向上箭头的行为与正常向上箭头相同?
我很惊讶这个问题并不常见。让终端行为不一致是非常令人气愤的。除了大多数使用 oh-my-zsh to 运行 的开发人员,我一直都在解决这个问题并且非常沮丧。
上面带sleep 3
的例子只是为了方便说明问题。在实际使用中,即使使用短暂的命令,问题也经常发生。我输入 git status
return git commit somefile -m "short comment"
return ⬆⬆期待看到"git status"。 66% 的时间我得到 git status
而另外 34% 的时间我得到 `git commit somefile -m "short comment" 并再次按下 ⬆ 只是闪烁光标,我必须按 Ctrl-C 才能退出 zsh 的部分完整模式。
这似乎不是 oh-my-zsh 的常见抱怨,这让我想知道我是否设置有误。
为了更清楚 运行 zsh
没有 oh-my-zsh。
zsh -d -f
autoload -U up-line-or-beginning-search
zle -N up-line-or-beginning-search
bindkey "^[[A" up-line-or-beginning-search
现在尝试上述步骤。你会得到一致的行为。
这可能是一个矫枉过正的解决方案,但是按照 this 指南,您可以看到可以将新操作绑定到 up/down 箭头键。所以如果你添加:
bindkey "^[[A" up-line-or-beginning-search # Up
bindkey "^[[B" down-line-or-beginning-search # Down
您的 ~/.zshrc
,它应该删除您谈到的功能。我设法让它工作,同时仍然保持常规搜索功能,但这没有经过彻底测试,可能应该小心使用。
我注意到,如果我在提示符下按向上箭头,那么我会得到上一个命令,然后再次向上得到之前的命令。
而如果我在上一个程序完成之前按向上箭头 ,那么我会显示上一个命令,光标位于行尾,但是天哪-zsh 现在处于 "search for lines that start with ... " 模式,这意味着我无法按向上键获取上一个命令。
我确信这种行为是众所周知的,也是意料之中的,但以防万一你不明白,你可以像这样回购它
- 输入
ls
return - 类型
sleep 3
return - 等待 3 秒提示出现
- 按⬆(应显示
sleep 3
) - 再次按⬆(应显示
ls
) - 按return(至运行
ls
) - 键入
sleep 3
return ⬆(在 3 秒过去之前按向上箭头) - 现在应该显示
sleep 3
- 按⬆
它仍将显示sleep 3
,但它希望它显示ls
。相反,它是在“搜索以sleep 3
模式而不是go to previous command
模式开头的命令。
要尝试在这两种情况下清除这些是步骤
- lsreturn
- 睡觉 3return
- ⬆
- ⬆
但是根据第 3 步是在第 2 步完成之前还是之后发生,他们最终会得到不同的结果。
但这似乎不是我要找的。我喜欢 oh-my-zsh 的部分行 + up = 搜索以部分开头的行。我要解决的问题是,如果我在上面的第 2 步按下向上键,它会神奇地插入一个部分,就像我等到第 2 步完成时一样。
如何让 oh-my-zsh 在这里保持一致,以便过早向上箭头的行为与正常向上箭头相同?
我很惊讶这个问题并不常见。让终端行为不一致是非常令人气愤的。除了大多数使用 oh-my-zsh to 运行 的开发人员,我一直都在解决这个问题并且非常沮丧。
上面带sleep 3
的例子只是为了方便说明问题。在实际使用中,即使使用短暂的命令,问题也经常发生。我输入 git status
return git commit somefile -m "short comment"
return ⬆⬆期待看到"git status"。 66% 的时间我得到 git status
而另外 34% 的时间我得到 `git commit somefile -m "short comment" 并再次按下 ⬆ 只是闪烁光标,我必须按 Ctrl-C 才能退出 zsh 的部分完整模式。
这似乎不是 oh-my-zsh 的常见抱怨,这让我想知道我是否设置有误。
为了更清楚 运行 zsh
没有 oh-my-zsh。
zsh -d -f
autoload -U up-line-or-beginning-search
zle -N up-line-or-beginning-search
bindkey "^[[A" up-line-or-beginning-search
现在尝试上述步骤。你会得到一致的行为。
这可能是一个矫枉过正的解决方案,但是按照 this 指南,您可以看到可以将新操作绑定到 up/down 箭头键。所以如果你添加:
bindkey "^[[A" up-line-or-beginning-search # Up
bindkey "^[[B" down-line-or-beginning-search # Down
您的 ~/.zshrc
,它应该删除您谈到的功能。我设法让它工作,同时仍然保持常规搜索功能,但这没有经过彻底测试,可能应该小心使用。