我在 bash 中使用 iTerm2,输入 向上滚动历史缓冲区一行Shift+Up
。当我切换到 zsh shell 时,它只会输入2A
。如何只使用键盘在 zsh 中向上滚动一行,最好使用Shift+Up
?
答案1
我认为这取决于终端模拟器。
例如,嘚,在 konsole 中它可以工作Shift+ Up。
在 xterm 中不行,但它可以工作Shift+ PgUp。
看来 iTerm2 默认就可以工作了:
- ⌘ ↑上移一行
- ⌘ ↓向下移动一行
答案2
up-history
您正在寻找的功能由和up-line-or-history
小部件(down-history
和down-line-or-history
用于向下滚动)提供。
默认情况下up-line-or-history
应绑定到,Up但您可以使用 将其绑定到(几乎)任何其他按键序列bindkey
。在终端中,特殊键(不生成可打印字符的键)会生成一个按键序列,然后由 shell 解释该序列 - 或者不解释,如您的 + 示例2A
所示Shift。Up这些按键序列在终端仿真器之间也可能不同。为了获取适合您终端的正确按键序列,请打开它,然后按Ctrl+ v,接着按您想要的组合键(Shift+ Up)。在我的终端(rxvt-unicode)上我得到^[[a
。然后您可以将序列绑定到up-history
Widged:
bindkey <in-string> up-history
<in-string>
只需用找到的序列替换即可。在我的例子中
bindkey '^[[a' up-history
注1:您很可能需要将序列放在引号中,因为它可能包含将被zsh
其他方式解释的字符。
笔记2:某些组合键可能会生成相同的键序列。例如,与Ctrl+组合的字母Shift通常与仅与 组合的相同字母没有区别Ctrl。Ctrl+ Shift+a和Ctrl+a通常都生成^A
。在某些终端仿真器中,Ctrl+Shift组合甚至用于终端本身的快捷方式,并且在 shell 中不可用。