Neovim (简体中文) - ArchWiki

Jump to content
翻译状态：本文是 Neovim 的翻译。上次翻译日期：2022-06-18。如果英文版本有所更改，则您可以帮助同步翻译。

Neovim 是 Vim 的分支，旨在改进代码库，从而使得 API 更容易实现，并改善用户体验和插件实现。

## 安装

安装 neovim 或 neovim-gitAUR（开发版本）软件包，两者强烈建议使用 Lua 作为主要的配置语言。要使 Neovim 能够访问系统剪贴板，可能需要安装 xclip（X11）或 wl-clipboard（Wayland）。

注意： 在 Neovim 中，一些功能委托给外部“providers”（提供者）。对于 Python 提供者，使用 python-pynvim。 对于剪贴板提供者，参见 provider-clipboard 或 `:help provider-clipboard` Neovim 命令。

也可以安装 GUI 和其他相关项目，它们中的大多数都在官方软件仓库或 AUR 中：

- neovim-qt
- neovim-gtkAUR 或 neovim-gtk-gitAUR
- uivonim-gitAUR
- neovide 或 neovide-gitAUR
- neoray-gitAUR
- gnvimAUR
- fvimAUR

## 配置

Neovim 的用户配置位于 `$XDG_CONFIG_HOME/nvim/init.vim`（默认是 `~/.config/nvim/init.vim`）。对于全局配置文件，将会载入 `$XDG_CONFIG_DIRS/nvim/sysinit.vim`（默认是 `/etc/xdg/nvim/sysinit.vim`），如果不存在，则会载入 `/usr/share/nvim/sysinit.vim`，后者不应由用户编辑。[1] 默认情况下，前一个全局配置文件并不存在。如果你创建了前一个文件，那你可能也想在其中 source 后一个文件（如果你想获得它提供的功能：允许 Neovim 使用通过 pacman 安装的 Vim 包）。

Neovim 兼容 Vim 大多数的选项，不过有一些选项特定于 Neovim。完整的 Neovim 选项列表参见 Neovim 的帮助文件。

Neovim 的数据目录位于 `~/.local/share/nvim/`，包含打开文件的交换文件、ShaDa（共享数据）文件和插件的站点目录。

从 Neovim 0.5 版本开始，可以使用 Lua 设置 Neovim（默认是 `~/.config/nvim/init.lua`），API 仍然很年轻，不过常见的配置开箱即用，无需过多配置。关于转换现有的配置的建议，参见 [2]。当前，于 `init.vim` 相比，使用 `init.lua` 没有太多的优势，不过在使用得当时，Lua 可以小幅改善启动时间，并且由于配置简单，在使用以 Lua 编写的插件时会很有用。

### 从 Vim 迁移

要将现有的 Vim 配置迁移到 Neovim，只需将 `~/.vimrc` 复制到 `~/.config/nvim/init.vim`。如果需要的话，将 `~/.vim/autoload/` 的内容复制到 `~/.local/share/nvim/site/autoload/`。

### 在 Vim 和 Neovim 间共享配置

Neovim 将 `$XDG_CONFIG_HOME/nvim` 而不是 `~/.vim` 作为主要配置目录，并使用 `$XDG_CONFIG_HOME/nvim/init.vim` 而不是 `~/.vimrc` 作为主要配置文件。

如果要继续使用 Vim，又希望在 Neovim 中 source 现有的 Vim 配置，参见 nvim-from-vim 或 `:help nvim-from-vim` Neovim 命令。

#### 加载插件

`/etc/xdg/nvim/sysinit.vim` 会自动 source 从官方软件仓库或 AUR 中安装的 Vim 或 Neovim 插件，因此无需额外设置。大量的插件都可以在两个地方找到，但最好通过插件管理器添加插件，最常用的是 vim-plug（可用于 Vim 和 Neovim）和 packer（使用 Lua 编写，只能用于 Neovim 0.5 或更新的版本）。两者都允许深度的配置，从 GitHub 分支到运行时命令。

大多数为 Vim 编写的插件无需花费很多精力即可在 Neovim 上工作，不过不是每个为 Neovim 编写的插件都适用于 Vim，因此，如果你的目标是确保配置兼容两个版本，坚持使用 `init.vim` 或 `.vimrc`

## 提示与技巧

### 将 vi 和 vim 替换为 neovim

大部分情况下设置 `$VISUAL` 和 `$EDITOR` 环境变量应该就足够了。

一些应用程序可能硬编码 vi 或 vim 为默认编辑器，对于这种情况，安装 neovim-symlinksAUR 或 neovim-drop-inAUR。

### 将 init.vim 设置为指向 .vimrc 的符号连接

因为 Neovim 与标准 Vim 大部分兼容，可以将 `nvim/init.vim` 设置为指向原来 `.vimrc` 的符号连接，从而保留旧的配置选项：

    $ ln -s ~/.vimrc ~/.config/nvim/init.vim

如果想要某几行特定于每个版本，可以在 `.vimrc` 文件中使用 `if` 块：

    if has('nvim')
        " 特定于 Neovim 的命令
    else
        " 特定于标准 Vim 的命令
    endif

### 添加真彩色支持

这个项目的 `README` 文件解释了如何为语法高亮添加 24 位“真彩色”支持，以及如何使用取色器实时查看效果。包含作者为 C++ 提供的语法高亮（如果安装的话）。

### Language Server Protocol

Neovim 内置 Language Server Protocol 客户端，nvim-lspconfig 插件提供常见的配置。

语言服务器可通过以下软件包安装：

LSP 配置 | 语言 | LSP 服务器软件包
--- | --- | ---
als | Ada/SPARK | ada_language_serverAUR
angularls | Angular |
bashls | BASH | bash-language-server
ccls | C, C++, Objective-C | ccls ccls-gitAUR
clangd | C++ | clang
clojure_lsp | Clojure | clojure-lsp-binAUR
cmake | CMake | cmake-language-serverAUR
codeqlls | CodeQL | codeqlAUR
cssls | CSS, LESS, SASS | vscode-css-languageserver
dartls | Dart | dart
denols | JavaScript, TypeScript | deno
dhall_lsp_server | Dhall | dhall-lsp-server
diagnosticls | 通用 | diagnostic-languageserverAUR
dockerls | Dockerfile | dockerfile-language-serverAUR
efm | 通用 | efm-langserverAUR
elixirls | Elixir | elixir-lsAUR
elmls | Elm | elm-language-serverAUR
erlangls | Erlang | erlang_ls-gitAUR
flow | Flow | flowAUR
fortls | Fortran | fortran-language-serverAUR
fsautocomplete | F# |
gdscript | GDScript | godot
ghcide | Haskell | ghcideAUR
gopls | GOlang | gopls
graphql | GraphQL | graphql-lspAUR
groovyls | Groovy | groovy-language-server-gitAUR
haxe_language_server | Haxe |
hie | Haskell | haskell-ide-engineAUR
hls | Haskell | haskell-language-server
html | HTML | vscode-html-languageserver
intelephense | PHP | nodejs-intelephenseAUR
java_language_server | Java | java-language-serverAUR
jdtls | Java | jdtlsAUR
jedi_language_server | Python | jedi-language-server
jsonls | JSON | vscode-json-languageserver
julials | Julia |
kotlin_language_server | Kotlin | kotlin-language-serverAUR
leanls | Lean |
metals | Scala | metalsAUR
nimls | Nim |
ocamlls | OCaml, Reason |
ocamllsp | OCaml, Reason | ocaml-lsp-gitAUR
omnisharp | OmniSharp | omnisharp-roslynAUR
perlls | Perl | perl-perl-languageserverAUR
phpactor | PHP |
powershell_es | PowerShell |
purescriptls | PureScript | purescript-language-serverAUR
pylsp | Python | python-lsp-server
pyright | Python | pyright
r_language_server | R |
racket_langserver | Racket |
rescriptls | ReScript |
rls | Rust | rls-gitAUR
rnix | nix | rnix-lsp-gitAUR
rome | Rome |
rust_analyzer | Rust | rust-analyzer
scry | Crystal | scry-gitAUR
solargraph | Ruby | ruby-solargraphAUR
sorbet | Ruby |
sourcekit | C, C++, Objective-C | swift-languageAUR
sqlls | SQL | sql-language-serverAUR
sqls | SQL |
stylelint_lsp | stylelint |
sumneko_lua | Lua | lua-language-server
svelte | Svelte | nodejs-svelte-language-serverAUR
svls | SystemVerilog |
terraformls | Terraform | terraform-lsAUR
texlab | (La)TeX | texlab
tflint | Terraform | tflintAUR
tsserver | TypeScript |
vala_ls | Vala | vala-language-serverAUR
vimls | Vim | vim-language-serverAUR
vls | V |
volar | Vue 3 | volar-server-binAUR
vuels | Vue 2 | nodejs-vlsAUR
yamlls | YAML | yaml-language-server
zeta_note | Markdown |
zls | Zig | zls-binAUR

## 问题解决

### 退出后光标没有恢复到之前的状态

如果退出 Neovim 后光标仍闪烁，参见 Neovim FAQ 中的解决方案。

## 参见

- GitHub 仓库
- GitHub wiki

Categories:

- Text editors (简体中文)
- Console applications (简体中文)