偶遇机器vim不能使用上下键和删除键问题
参考:https://segmentfault.com/a/1190000021029471
参考:https://www.cnblogs.com/luckystar-67/articles/3136840.html
一、问题描述
最近发现新的一批机器不能正常使用vim,具体表现为vim编辑文件时候使用上下键,删除键(退格键)会出现奇怪的字符,如下图所示:

二、问题解决过程
参考了网上一些资料,按照下面办法处理
1、看下该用户家目录下有没有.vimrc
文件,如果有该文件,可能是该文件修改了vim相关配置
我看了下,并没有这个文件
2、使用:set
命令查看vim的默认配置
该机器vim的默认配置如下所示

我特意挑了一台正常的机器看了下vim的默认配置

3、经过仔细对比和测试每个参数,我发现只需要设置两个关键选项就可以了,如下
#vim ~/vimrc
set nocompatible
set backspace=indent,eol,start
这两个选项是什么意思呢?
set nocompatible
设置vim为不兼容模式,使用vim时候不考虑是否和vi兼容
#当我们设置了这个选项之后,再使用:set查看vim配置会发现多了ambiwidth=double ttymouse=xterm2两个设置
#ambiwidth=double
防止特殊符号无法正常显示。在 Unicode 中,许多来自不同语言的字符,如果字型足够近似的话,会把它们放在同一个编码中。但在不同编码中,字符的宽度是不一样的。例如中文汉语拼音中的 ā 就很宽,而欧洲语言中同样的字符就很窄。当 VIM 工作在 Unicode 状态时,遇到这些宽度不明的字符时,默认使用窄字符,这会导致中文的破折号“——”非常短,五角星“★”等符号只能显示一半。因此,我们需要设置 ambiwidth=double 来解决这个问题。
说实话这个选项的解释和上下左右键不能使用问题有啥关系我还是不清楚
set backspace=indent,eol,start
设想这样一个情况:当前光标前面有若干字母,我们按下 i 键进入了 Insert 模式,然后输入了 3 个字母,再按 5 下删除(Backspace)。默认情况下,VIM 仅能删除我们新输入的 3 个字母,然后喇叭“嘟嘟”响两声。如果我们“set backspace=start”,则可以在删除了新输入的 3 个字母之后,继续向前删除原有的两个字符。
再设想一个情况:有若干行文字,我们把光标移到中间某一行的行首,按 i 键进入 Insert 模式,然后按一下 Backspace。默认情况下,喇叭会“嘟”一声,然后没有任何动静。如果我们“set backspace=eol”,则可以删除前一行行末的回车,也就是说将两行拼接起来。
当我们设置了自动缩进后,如果前一行缩进了一定距离,按下回车后,下一行也会保持相同的缩进。默认情况下,我们不能在 Insert 模式下直接按 Backspace 删除行首的缩进。如果我们“set backspace=indent”,则可以开启这一项功能。
上述三项功能,你可以根据自己的需要,选择其中一种或几种,用逗号分隔各个选项。建议把这三个选项都选上。
其他设置参考:https://www.cnblogs.com/luckystar-67/articles/3136840.html
参考:http://www.ruanyifeng.com/blog/2018/09/vimrc.html
三、总结
-
1、
~/.vimrc
是用户个人的vim配置文件,全局配置一般在/etc/vim/vimrc
或/etc/vimrc
,我们可以将vim的常用配置添加到里面让vim更好用 -
2、使用
:set
可以看到vim的默认配置,如果服务器的vim不正常,通过这个对比下正常的机器就可以了 -
3、关于上下左右按键,退格键不能使用的话就修改
~/.vimrc
文件,加上下面两行set ambiwidth=double set backspace=indent,eol,start
思考题?
为什么这个系统vim的默认配置和别的机器不一样?
额。我们的机器是infra那边优化过的,可能是这个原因,我这边实在是不想折腾了