Neovim (简体中文)

From ArchWiki
翻译状态:本文是 Neovim翻译。上次翻译日期:2022-06-18。如果英文版本有所更改,则您可以帮助同步翻译。

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

安装

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

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

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

配置

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-symlinksAURneovim-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 中的解决方案。

参见