本篇文章介绍如何在 Windows 系统下安装并配置终端上的 Neovim。关于如何配置 Neovim 的 GUI 客户端 nvim-qt,可以参考 这篇博客

TL;DR: 长时间在 Windows 使用 Neovim 编程以后,我认为要在 Windows 上获得使用 Neovim 的最佳体验,必须使用 GUI 客户端(使用 GUI 客户端能避免很多小问题),而不是在终端命令行使用 Neovim。另外,Windows 系统下一些不错的 GUI 客户端有 Nvim-qtfvim(新出来的一个客户端,体验不错)。

开始之前

Windows 自带的 CMD 命令行非常糟糕,不仅颜色难看,而且缺乏许多常用的 Linux 命令。不建议使用 CMD 作为命令行终端,建议使用 Cmder。Cmder 安装的时候,也附带安装了 Git for Windows 和其他的一些工具,可以使用 Linux 下的常用命令,如 ls, find, pwd 等等。

如何安装 Neovim

Neovim 针对各个系统均有编译好的安装包,用户无需自己编译,省去了大量配置时间,安装非常方便。从 这里 可以下载到 Neovim win-64 位安装包,直接解压安装包即可完成安装。另外,需要把 Neovim 可执行程序所在的目录添加到系统的 PATH 中,确保在命令行可以使用 nvim 这个命令打开 Neovim。

当然也可以用 Chocolatey 或者 scoop 等包管理工具安装 Neovim,具体可以参考 这里 的说明。

配置

配置文件应该放在哪里?

Neovim 使用了和 Vim 不同的配置文件名称以及配置文件存放位置,根据 Neovim 官方文档,Neovim 的配置文件应该命名为 init.vim,并且应该放在 ~/AppData/Local/nvim 目录下1

安装插件管理器 vim-plug

Vim-plug 是一个不错的插件管理器,要安装 vim-plug,首先打开 PowerShell 窗口,然后执行以下的命令:

md ~\AppData\Local\nvim\autoload
$uri = 'https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
(New-Object Net.WebClient).DownloadFile(
  $uri,
  $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath(
    "~\AppData\Local\nvim\autoload\plug.vim"
  )
)

在 Neovim 的配置文件中,使用如下的 vim-plug 示例配置:

call plug#begin('~/AppData/Local/nvim/plugged')
" below are some vim plugin for demonstration purpose
Plug 'joshdick/onedark.vim'
Plug 'iCyMind/NeoSolarized'

Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
call plug#end()

打开 Neovim,然后运行 :PlugInstall 命令,所有要安装的插件都会被安装到目录 ~/AppData/Local/nvim/plugged 下. 当然,你可以根据自己的实际需求,更改插件安装的目录。

问题及解决方案

退出 Neovim 窗口的时候,buffer 里面的内容未清空

在命令行使用 Neovim 时,当退出 Neovim 窗口,原来的窗口里面的文字内容仍然显示在命令行,并未被清空,浪费了大量的空间。这和 Neovim 在 Linux 下的表现不相同,如何在退出 Neovim 以后自动清除这些文字内容呢?

经过一番搜索,我发现了一个对 Cmder 有效的解决方法。打开 Cmder 的配置,找到 Startup -> Environment,添加如下的配置:

set TERM=xterm-256color

重启 Cmder,以上的问题应该就消失了。更多讨论,参见这里.

当配置文件出错时,无法进入 Neovim 窗口

在命令使用 Neovim,如果配置文件某行设置有错,在打开 Neovim 时,我们会收到如下提示:

Press ENTER or type command to continue

然而,如果我们按下 Enter,Neovim 也不会启动。Neovim 程序会卡死在那里,除非你使用 Ctrl+ C 强行关闭这个进程。

为了避免这个问题,根据 这里 的回答,可以使用以下命令启动 Neovim:

nvim --cmd silent!

一些快捷键无法正常工作

Neovim 和 Cmder 的快捷键冲突

部分原因是 Neovim 和 Cmder 的某些快捷键有冲突,例如在 Cmder 中,Ctrl-W 用来关闭一个 console 窗口。但是 Ctrl-W 在 Neovim 被用于和窗口相关的操作。可能还存在其他有冲突的快捷键,例如 Ctrl-v 无法像 Linux 下那样工作

要禁止 Cmder 中和 Neovim 冲突的快捷键,可以在设置的 Keys & Macro 部分更改或者禁止那些冲突的快捷键,

<Ctrl-6> 无法工作?

在 Linux 或者 Mac 下,我们可以使用 Ctrl-^(实际上是Ctrl-6) 来切换 Neovim 的 buffer,但是在 Windows Cmder 命令行下面,我发现 <Ctrl-6> 不起作用,按下以后也无法切换 buffer。我试着把 Ctrl-6 映射为 Ctrl-^:

nnoremap <C-6> <C-^>

还是不起作用。目前暂时使用 Ctrl+shift+6 来切换 buffer。

我的完整 Neovim 配置可以在 这里 查看。关于如何配置 Neovim Python 开发环境,可以看 这篇文章

参考链接


  1. 打开 Neovim,使用 :echo stdpath('config') 可以查看该目录的具体位置。 ↩︎