我知道在vim中可以在.vimrc中添加

set nocompatible


,以避免箭头键在插入模式下显示A,B,C,D。

但是我使用的是vi 4.0版(gritter),2006年12月25日。

如何获得相同的行为?

==编辑==(1)

我正在使用Arch Linux的vi版本,该版本是从此CVS存储库(最后一次提交,2007年2月24日)构建的,以下命令:

make PREFIX=/usr LIBEXECDIR=/usr/lib/ex PRESERVEDIR=/var/lib/ex \
TERMLIB=ncurses FEATURES="-DCHDIR -DFASTTAG -DUCVISUAL -DMB -DBIT8"


并附有以下三个补丁:fix-tubesize-short-overflow.patch,navkeys.patch和preserve-dir.patch。

==编辑(2)==

问题发生在LXTerminal 0.2.0,Termite 10-1,Tilda 1.2.4-1,Terminator 0.98-1和xterm 320-2但不适用于urxvt v9.21和Linux虚拟控制台。

==编辑(3)==

根据单一Unix规范左箭头,向下箭头,右箭头,上箭头分别对应于以下名称:kcub1kcud1kcuf1kcuu1。比较这些capterm中来自xtermrxvt-unicode-256color的terminfo条目可以得到:

$ infocmp xterm rxvt-unicode-256color | grep -E 'kcuf1|kcub1|kcud1|kcuu1'

kcub1: '\EOD', '\E[D'.
kcud1: '\EOB', '\E[B'.
kcuf1: '\EOC', '\E[C'.
kcuu1: '\EOA', '\E[A'.


通过用'\EOD''\EOB''\EOC''\EOA'替换为'\E[D''\E[B''\E[C',来修改xterm terminfo条目'\E[A'应该可以解决问题,但这是个好主意吗?也许会破坏其他程序的箭头键用法?

评论

我认为这是由vi(m)<->终端交互引起的,因此您也可以尝试一些与终端相关的解决方法/配置。

上面@VanLaser所说的翻译:您在termcap或terminfo数据库中输入的当前TERM与键盘产生的代码不同步。解决方案不是更改TERM,而是查找vi是否与termcap或terminfo链接,找到键盘发出的键码,并相应地修复相应的数据库。也可以向sysadmin投诉。

我都说了吗有时我会给自己一个惊喜:)(当然,我所知道的只是与终端相关)。

此版本的vi是使用ncurses构建的,然后应使用terminfo。

您看到这些提示了吗?也许其中一些有用。

#1 楼

您可以创建一个别名来设置您的$TERM变量

alias vi='TERM=rxvt-unicode-256color vi'


将其添加到Shell的rc文件中,并且应该为您启动的每个终端定义它。

评论


在我的系统上,这只会使Vi离开插入模式(这可能比让它打印垃圾更好,但仍不能完全解决问题)。

–马丁·图尔诺伊(Martin Tournoij)
17年4月22日在8:13

#2 楼

有时,这种现象可能是由您的.vimrc中设置的异常按键映射引起的-例如,如果您有一些东西映射了两个ESC按键:

nmap <Esc><Esc> some_command_sequence


那么它可能会导致vim的箭头键故障。

评论


OP描述的配置非常具体,并且在没有这种映射的情况下显示了行为。 (我已经测试过了。)

–丰富
19-09-26在14:24