如何修复urxvt + zsh的奇怪退格行为?

我在使用urxvt和zsh的组合。然而,自从我重新安装了Ubuntu 10.04之后,我遇到了以下问题。如果我按下退格键,光标会向右移动(而不是删除左边的字符)。
假设我已经输入了n个字符,按下退格键n次会将光标向左移动n个位置,如果我再按一次退格键,光标就不再移动了。
如果我按下左箭头,什么都不会发生,如果我在此之后按下右箭头,会出现一个字符。
mv .zshrc .zshrc.bak
mv .Xdefaults .Xdefaults.bak

没有帮助。

urxvt + bash 也正常工作,xterm + zsh 也可以。

zsh 版本:4.3.11-4ubuntu2.is.3ubuntu1 rxvt-unicode 版本:9.09-3

有什么办法可以修复这个问题吗?

4个回答

尝试将以下内容添加到您的.zshrc文件中:
TERM=xterm

这对我来说解决了问题,顺便说一句。 - seth
6最好使用 TERM=xterm-256color 来支持 256 色。 - xuhdev
1你只是在回避问题,用xterm代替urxvt而已吧? - villasv
1是的,这对我也起作用。我使用Windows子系统Linux(WSL)与Ubuntu和ZSH,这一直困扰着我很久了。谢谢你。 - Dave Reid

在zsh中,bindkey | grep delete是什么意思?这些是我得到的行:
"^D" delete-char-or-list
"^H" backward-delete-char
"^[3;5~" delete-char
"^[[3~" delete-char
"^?" backward-delete-char

你应该使用"^?"来表示退格键。如果没有的话...你可以在zsh提示符下调用bindkey "^?" backward-delete-char来设置它。
这样解决问题了吗?

1bindkey | grep delete "^D" 删除字符或列出 "^?" 向后删除字符 - student

你还可以通过设置 stty erase '^?' 来解决这个问题。
以下是关于某些终端模拟器的异常行为的详细信息(这也是为什么某些模拟器会出现这个问题的原因):Linux Backspace/Delete mini-HOWTO

这是一个旧的帖子,也许没有人会看到,但对我来说问题出在.Xresources文件中。我误解了URxvt*termName参数,以为它是成为urxvt窗口标题的字符串。实际上,它是成为$TERM环境变量的内容,除非shell覆盖它(bash会)。
我的解决方案是在~/.Xresources文件中添加URxvt*termName: xterm-256color。像对该文件的任何更改一样,您需要运行xrdb -merge ~/.Xresources,并完全重新启动urxvt(包括urxvtd守护进程),才能看到更改生效。