关于 MS-VIM 颜色显示不正确的问题

很久没调整过家里的开发环境了。

最近尝试了一下 Hyper 和 Cmder,最根本的原因是 terminal vim 的 colorscheme 显示不正常,想找一个适配的终端。

经过排查发现有两个问题:

  1. Terminal Emulator 本身不支持 256 色/True color,Hyper, Cmd 有这样的问题。
  2. 所使用的 Vim 本身不支持 256 色,echo &t_Co 表现为 8/16,如 MS-VIM(MS-GVIM 是支持的),而 msys2 build 的 MS-VIM 是支持的,在 cmder 下显示正常。

由此,首先排除掉 Hyper,Cmder 整体表现不错,但是在 win11 环境下不能作为系统默认终端(微软又在搞什么幺蛾子)

Windows Terminal,之前一直不能正常显示,然后发现实际上并不是,Wt 是支持 True color 的,是 MS-VIM 的一个 bug(注意不是 MS-GVIM)。

具体参见:https://github.com/vim/vim/issues/3432,省流就是,对于 MS-VIM,实际支持 256 色时,&t_Co 会被错误的设置为 16。

而且这个 issue 看似 close 了,实际上问题还是存在并且没修复,所以在主题当中添加了:

1
2
3
4
5
6
7
8
9
if (has('termguicolors') || &termguicolors)
  if (has("win32") || has("win64"))
    let &t_Co = 256 " MS-VIM's bug, see: <https://github.com/vim/vim/issues/3432>
  endif
  let s:t_Co = &t_Co
endif
if has('gui_running') " do not use &t_Co when gui is running!
  let s:t_Co = 256
endif

(see Enonya/yuyuko.vim commit 8ff073a)。

然后问题就得到了解决,所以在家中仍会继续沿用 Windows Terminal,但是还有一个问题,终端中,如果启动 Bash/Zsh,因为安装在 Git Bash 目录下,它有自带的 vim8.2,这样调用仍然没用,解决方案是,将 MS-VIM 所在的目录加入 Path 当中,并删除 Git Bash 目录下的 vim,然后 Bash 就会自己调用 MS-VIM 了,不过还需要给 vi 的 alias 做一下修改。

不过一般我都是直接在 vim 里开终端,而且也就只是 cat, cp, mv, rm 之类的基本命令,也没有必要因此再次折腾 Linux 了。


最后更新: November 15, 2023