ConEmu是我目前正在使用的Windows下终端封装程序(实际用的是Cmder),配合minttyGit Bash等,无论是通过ssh远程登录到服务器还是使用本地cmd/bash终端都非常方便。但缺省情况下,Vim在ConEmu中能用,但颜色不是很好看,和Linux/MacOS下的Vim形象相去甚远,所以基本上很少在Windows的命令行下直接使用Vim,更多的是使用Gvim/Neovim。为了改进这点,特地搜索了正确的配置方法,让Vim在ConEmu下也能顺畅地使用,方便在ConEmu命令行下直接用Vim编辑文本而不用切换到独立的程序中。

根据ConEmu文档,需要满足以下条件:

  1. 只支持部分版本。如Vim官方发布的gvim##.exevim##w32.zip中的版本。Vim 7.x、8.x都可以;
  2. Vim的可执行程序必须名为vim.exe
  3. ConEmu配置中必须配置几个选项:
    • 选中Features配置页面中的Inject ConEmuHkANSI X3.64 / xterm 256 colors(在我用的版本中没找到后者);
    • 选中Colors配置页面中的TrueMod (24bit color) support
  4. 使用一个支持Xterm color的配色方案,如zenburn/onedark
  5. 配置Vim

    • 对于普通Vim配置,可以在Vim配置中加上:

      if &term=='win32' && !empty($ConEmuANSI)
          set termencoding=utf8
          set term=xterm
          set t_Co=256
          set notermguicolors
          let &t_AB="\e[48;5;%dm"
          let &t_AF="\e[38;5;%dm"
          colorscheme zenburn
      endif
      
    • 由于我使用的是SpaceVim,因此在自己的myspacevim##before()中加入:

      if &term=='win32' && !empty($ConEmuANSI)
          set termencoding=utf8
          set term=xterm
          set t_Co=256
          let &t_AB="\e[48;5;%dm"
          let &t_AF="\e[38;5;%dm"
          let g:spacevim_enable_guicolors=0
          let g:spacevim_colorscheme_default="zenburn"
      endif
      

      由于使用了SpaceVim,因此有两个配置改为修改SpaceVim配置变量而不是直接改动Vim的设置,避免被SpaceVim覆盖。

  6. 在运行Vim时,指定终端编码为UTF-8:

    chcp 65001
    vim
    

通过上述配置,实测zenburn/onedark/monokai/molokai等配色方案都能正常显示,但NeoSolarized显示不正常。

Comments