我最近切换到 oh-my-zsh,但我无法习惯向上箭头键的工作方式。例如,当我输入 ssh 并按向上键时,它只显示以 ssh 开头的命令,而我更希望它显示上一个命令。我怎样才能让它像 Bash 那样运行,这是我已经习惯的?
请注意,添加以下行答案到我的 zshrc 末尾没有帮助,升级后,从 bash 切换到 oh-my-zsh 后,也没有发生这种情况。
答案1
无解
讽刺的是,人们提出的问题的答案是重复的……
bindkey '\e[A' 历史开始向后搜索 bindkey '\e[B' 历史开始搜索向前… 是完全错误的答案。它确保您终端的箭头编辑键的控制序列由 ZLE 映射到扩展小部件
history-beginning-search-backward
,并且history-beginning-search-forward
由 Oh My ZSHhistory-substring-search
插件提供。
这正是你所想的不要想。
您正在尝试关闭此功能,因为您更喜欢另一种行为;不尝试修复它,因为它坏了。
解决方案
您想要的是那些映射到小部件的键,就像普通的 Z Shell 中一样,Oh My ZSH 是一些(但不是全部)人喜欢的 Z Shell 的扩展和自定义。 Vanilla Z Shell 的小部件大致具有您喜欢的旧 Bourne Again shell 行为。 (不过,与 Bourne Again shell 不同的是,如果您有一个多行编辑缓冲区,它们会在缓冲区的顶部和底部边缘在其中上下移动,并在历史记录中上下移动。)
这些小部件将是:
绑定键“$terminfo[kcuu1]”上线或历史记录 绑定键“$terminfo[kcud1]”下线或历史记录
注意一个人如何工作不硬连线一种特定的终端类型进入一个人的剧本。或者可以使用"$termcap[ku]"
和"$termcap[kd]"
。 Z Shell 假定您已加载适当的模块,并为两者维护一个映射。不过,一般来说,如果现在有 terminfo,世界会更喜欢它。为了严格防弹,在与异构系统一起使用或提供给其他人的东西中,您需要一个test -n
in 那里 - 就像您会发现 Oh My ZSH 扩展实际上所做的那样。
test -n "$terminfo[kcuu1]" && bindkey "$terminfo[kcuu1]" 上线或历史记录 test -n "$terminfo[kcud1]" && bindkey "$terminfo[kcud1]" 下线或历史记录
(在极端情况下,为了应对一些不太可能的可能性,您需要一些"${terminfo[x]-${termcap[y]}}"
变量扩展。Oh My ZSH 扩展不会为后者而烦恼,在实践中,您同样可以在很大程度上摆脱它。在实践中,几乎每个人都有termcap 和 terminfo 模块已加载,您只需担心当前终端类型的记录是否实际上定义了相关的控制序列,这就是它的用途test -n
。)
Bourne Again shell 行为的更精确近似是
绑定键“$terminfo[kcuu1]”向上历史记录 绑定键“$terminfo[kcud1]”历史记录这不是普通的 Z Shell 默认值,在编辑第一个多行命令行后,您可能会决定默认值是您喜欢的。 ☺