.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规范左箭头,向下箭头,右箭头,上箭头分别对应于以下名称:
kcub1
,kcud1
,kcuf1
和kcuu1
。比较这些capterm中来自xterm
和rxvt-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'
应该可以解决问题,但这是个好主意吗?也许会破坏其他程序的箭头键用法?#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
评论
我认为这是由vi(m)<->终端交互引起的,因此您也可以尝试一些与终端相关的解决方法/配置。上面@VanLaser所说的翻译:您在termcap或terminfo数据库中输入的当前TERM与键盘产生的代码不同步。解决方案不是更改TERM,而是查找vi是否与termcap或terminfo链接,找到键盘发出的键码,并相应地修复相应的数据库。也可以向sysadmin投诉。
我都说了吗有时我会给自己一个惊喜:)(当然,我所知道的只是与终端相关)。
此版本的vi是使用ncurses构建的,然后应使用terminfo。
您看到这些提示了吗?也许其中一些有用。