修复在vi(而非vim)中显示A,B,C,D的箭头键


16

我知道在vim中我可以添加

set nocompatible

.vimrc以避免箭头键显示A,B,C,在插入模式d。

但是我正在使用vi 版本4.0(gritter)12/25/06

如何获得相同的行为?

==编辑==(1)

我正在使用Arch Linuxvi版本,版本是通过以下命令从此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.patchnavkeys.patchpreserve-dir.patch

==编辑(2)==

这些问题发生在LXTerminal 0.2.0白蚁10-1Tilda 1.2.4-1终结者0.98-1xterm 320-2中,但在urxvt v9.21和Linux虚拟控制台中都没有。

==编辑(3)==

根据单一Unix规格左箭头,向下箭头键,右箭头,向上箭头分别对应于以下capname: ,,kcub1 和。比较这些capterm中的terminfo条目,可以得出:kcud1kcuf1kcuu1xtermrxvt-unicode-256color

$ 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'.

通过substituing修改xterm的terminfo项'\EOD''\EOB''\EOC''\EOA''\E[D''\E[B''\E[C''\E[A'要解决这个问题,但它是一个好主意吗?也许会破坏其他程序的箭头键用法?


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

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

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

1
此版本的vi是使用ncurses构建的,然后应使用terminfo
Ortomala Lokni 2015年

2
您看到这些提示了吗?也许其中一些有用。
鲍里斯·塞列布罗夫'16

Answers:


2

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

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

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


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

1

有时,这种行为可能是由于您的键盘设置异常而导致的.vimrc-例如,如果您有一些可以映射两次ESC按键的东西:

nmap <Esc><Esc> some_command_sequence

然后,使用箭头键可能会导致vim出现故障。


OP所描述的配置非常具体,并且在没有这种映射的情况下显示了行为。(我已经对其进行了测试。)
Rich
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.