我zsh
在运行 Fedora 13(是的,它很旧)的远程计算机上打开了一个。输入时backspace一切正常,但输入时什么也没有发生home(Ctrl+A可以按预期完成工作)。但是,当启动 python 2.7 子 shell 时,我的backspace打印^?
不是删除最新字符,而是home打印^[OH
,而Ctrl+A则打印^A
。
这不是我在本地机器上使用 Linux Mint 时看到的行为,一切都正常。有人知道为什么会发生这种情况吗?我该怎么做才能解决这个问题?谢谢
答案1
正如@BrandonInvergo 在评论中指出的那样,这是两个不同的问题。由于我不懂 Python,所以我只关注zsh
具体的问题。
Z shell 使用Z 线编辑器(zle)与用户交互。按键绑定由bindkey
内置命令配置(man zshzle
有关详细信息,请参阅)。有不同的按键映射,例如,当您在提示符下键入时,main
按键映射处于活动状态,如果您使用zed
(简单但通常非常方便的文件编辑器),按键映射zed
处于活动状态等。
您可以使用 显示当前的键绑定bindkey -M [keymap]
,main
键映射是默认的,因此在最多在这种情况下,您可以简单地省略该-M [keymap]
参数。
现在,让我们看一下您的具体问题:
CTRL+A
(由 表示^A
)跳转到行首,因此您可能bindkey -e
在 RC 文件中的某个地方(在您的个人中~/.zshrc
,但也可以在某些系统范围的配置中发出,如/etc/zshrc
)使用它来激活emacs
键绑定:
$ zsh -f
$ bindkey -e
$ bindkey | head -n 3
"^@" set-mark-command
"^A" beginning-of-line
"^B" backward-char
要使该键具有相同的行为HOME
,您需要识别生成的字符串(这取决于您使用的终端仿真器)。一个简单的技巧是启动并按下所需的键。这是使用和键的cat
输出:xterm
HOME
END
$ cat
^[[H^[[F
因此,长文本、短消息——你想把这些行放在你的~/.zshrc
文件中(但后命令bindkey -e
):
bindkey "^[[F" end-of-line
bindkey "^[[H" beginning-of-line
请不要忘记source ~/.zshrc
...然后这两个键应该可以正常工作。