虽然笔者也不是很清楚vi和vim到底有什么区别和关系,不过可以简单的概括为,vim是vi的一种升级版,vi本身没有颜色高亮的功能而vim有。
首先需要下载最新版的vim, apt-get install vim 或者centOS下的yum install vim 都可以将vim升级为最新版的,有些机器因为版本问题或者干脆没有vim导致没有高亮。
然后如果which vimwhich vi 发现都有且vi=/usr/bin/vi vim=/usr/bin/vim,则说明这两个程序已经没有问题,只是一般我们都将vi=vim了,这个过程在/etc/profile.d/vim.sh可以看到

1
2
3
4
5
6
7
8
if [ -n "$BASH_VERSION" -o -n "$KSH_VERSION" -o -n "$ZSH_VERSION" ]; then
[ -x /usr/bin/id ] || return
tmpid=$(/usr/bin/id -u)
[ "$tmpid" = "" ] && tmpid=0
[ $tmpid -le 100 ] && return
# for bash and zsh, only if no alias is already set
alias vi >/dev/null 2>&1 || alias vi=vim
fi

不同版本的脚本可能不一样,不过大同小异,仔细看这行:[ $tmpid -le 100 ] && return,这句话意味着如果用户的id号小于100,则不再执行下面的语句,而下面的语句正是alias vi=vim也就是将vi定义为vim。 所以可以理解普通用户的vi就是vim,而id号小于100的(比如root的id号是0)则不会受到影响。

由于一些原因可能我们更喜欢用root操作系统,比如笔者用的是aliyun服务器,平时主要练练代码写写博客,感觉被黑了或者把系统搞坏了也无所谓,所以懒得用别的用户登录。

懂得原理就好办了,如果我们仍然希望保留原来的脚本意图,100内的用户不做alias,那么只要在此行之前填写 [ $tmpid -eq 0 ] && alias vi=vim 即可。而如果像笔者这样只有一个用户,那么把这行删了就行,或者在root下的.bashrc中添加alias vi=vim也能得到同样的效果。
当然还有一种方法就是,索性不用vi命令,全用vim。