出自 Arch Linux 中文维基

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

參見