终端上的退格行为

终端上的退格行为

zsh在运行 Fedora 13(是的,它很旧)的远程计算机上打开了一个。输入时backspace一切正常,但输入时什么也没有发生homeCtrl+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输出:xtermHOMEEND

$ cat
^[[H^[[F

因此,长文本、短消息——你想把这些行放在你的~/.zshrc文件中(但命令bindkey -e):

bindkey "^[[F" end-of-line
bindkey "^[[H" beginning-of-line

请不要忘记source ~/.zshrc...然后这两个键应该可以正常工作。

相关内容