Neovim
- 另見: Vim
Neovim[1] 是一款高度可擴展的開源文本編輯器,旨在改進和現代化流行的 Vim[2] 編輯器。它被設計為 Vim 的無縫銜接替代品,在保持與大多數 Vim 插件和配置的兼容性的同時,提供額外的功能和改進。Neovim 注重可擴展性、易用性和性能。
它引入了強大的插件架構,支持異步插件執行,這可以顯著提升某些操作的性能。它還內置了終端模擬器,允許用戶直接在編輯器中運行 shell 命令。該項目注重代碼質量和可維護性,擁有簡潔且文檔完善的代碼庫,方便開發者貢獻代碼。
安裝
Shell
要在不修改系統配置的情況下臨時在 shell 環境中使用 Neovim,您可以運行:
$ nix-shell -p neovim
這樣就能在當前 shell 中使用 Neovim 編輯器了。之後,您可以通過輸入 nvim 來啟動 Neovim。
系統設置
要在系統範圍內安裝 Neovim,使其可供所有用戶使用,請將以下內容添加到您的配置中:
# /etc/nixos/configuration.nix 示例
environment.systemPackages = [
pkgs.neovim
];
# 单用户安装(位于 ~/.config/nixpkgs/home.nix)
home.packages = [
pkgs.neovim
];
使用 nixos-rebuild switch 或 home-manager switch 重建系統後,Neovim 將被安裝且可使用。
配置
基礎
# 全局配置
programs.neovim = {
enable = true;
defaultEditor = true;
};
# 单用户配置
programs.neovim = {
enable = true;
extraConfig = ''
set number relativenumber
'';
};
進階
# 全局配置
programs.neovim = {
enable = true;
defaultEditor = true;
viAlias = true;
vimAlias = true;
configure = {
customRC = ''
set number
set cc=80
set list
set listchars=tab:→\ ,space:·,nbsp:␣,trail:•,eol:¶,precedes:«,extends:»
if &diff
colorscheme blue
endif
'';
packages.myVimPackage = with pkgs.vimPlugins; {
start = [ ctrlp ];
};
};
};
# 单用户配置
# 您需要添加以下代码行,将其设置为默认编辑器:
programs.neovim.defaultEditor = true;
小技巧
包的變體
請查看 Neovim Nightly Overlay[3] 以安裝最新的 Neovim nightly 版本。
您可以通過以下命令運行主版本:
$ nix run "github:nix-community/neovim-nightly-overlay"
插件管理
plugins = [
# 示例插件: nvim-tree-lua
pkgs.vimPlugins.nvim-tree-lua
# 示例插件: 配置后的vim-startify
{
plugin = pkgs.vimPlugins.vim-startify;
config = "let g:startify_change_to_vcs_root = 0";
}
# 示例插件: 带 Lua 配置的 nvim-colorizer-lua
# 由于 Lua 模块运行时路径的处理方式,您的配置可能需要
# packadd! plugin-name 以引入模块. 一个 home-manager 示例如下:
{
plugin = pkgs.vimPlugins.nvim-colorizer-lua;
config = ''
packadd! nvim-colorizer.lua
lua << END
require 'colorizer'.setup {
'*'; -- 高亮所有类型文件,但可自定义一些类型。
'!vim'; -- 排除 vim 类型文件高亮.
}
END
'';
}
# 示例插件: 带 Lua 配置的 nvim-treesitter
{
plugin = pkgs.vimPlugins.nvim-treesitter;
config = ''
packadd! nvim-treesitter
lua <<EOF
require'nvim-treesitter.configs'.setup {
highlight = {
enable = true, -- false 将禁用整个插件
disable = {}, -- 被禁用的语言列表
},
incremental_selection = {
enable = true,
keymaps = {
init_selection = "gnn",
node_incremental = "grn",
scope_incremental = "grc",
node_decremental = "grm",
},
},
textobjects = {
select = {
enable = true,
lookahead = true,
keymaps = {
["af"] = "@function.outer",
["if"] = "@function.inner",
["ac"] = "@class.outer",
["ic"] = "@class.inner",
},
},
},
}
EOF
'';
}
# 为 tree-sitter 安装语法
# 选项 1:安装所有语法包
pkgs.vimPlugins.nvim-treesitter.withAllGrammars
# 选项 2:安装特定语法包
# (pkgs.vimPlugins.nvim-treesitter.withPlugins (p: [ p.c p.java ]))
<div lang="en" dir="ltr" class="mw-content-ltr">
# Option 3: Installing grammars without Nix
# Installing grammar packages through the built-in command can lead to errors.
# The following Neovim command will install syntax highlighting for the C programming language: :TSInstall c
</div>
];
框架
如果您不想手動配置系統,NixOS 提供了多種預定義配置和社區支持的選項。以下列舉其中一些:
默認情況下,LazyVim 會阻止加載非 LazyVim 管理的插件。這包括所有通過 Nix 安裝的插件。如果您想同時使用 Nix 和 LazyVim 安裝插件,請將以下內容添加到您的 LazyVim 配置中:
require("lazy").setup(lazyPackages, {
performance = {
reset_packpath = false, -- so that plugins outside of lazy can be loaded
},
})
vim.cmd([[ packloadall]] ) -- load plugins outside of lazy
FHS 包裝
您可以創建自定義的 Neovim FHS 包裝器
{
buildFHSEnv,
writeShellScript,
neovim,
}:
buildFHSEnv {
name = "nvim-fhs";
targetPkgs = pkgs: [ neovim ];
runScript = writeShellScript "nvim-fhs.sh" ''
exec ${neovim}/bin/nvim "$@"
'';
}
This FHS wrapper example is based on a contribution to nixpkgs[7].
For an extended configuration that includes setting up mason.nvim with a similar FHS environment, see this NixOS/nixpkgs issue comment.
故障排除
lua-language-server: 動態連結可執行文件錯誤
在您的~/.local/state/nvim/lsp.log文件中,您會看到以下錯誤:
[ERROR][2025-06-07 23:13:15] ...p/_transport.lua:36 "rpc" "lua-language-server" "stderr" "Could not start dynamically linked executable: /home/incogshift/.local/share/nvim/mason/packages/lua-language-server/libexec/bin/lua-language-server\nNixOS cannot run dynamically linked executables intended for generic\nlinux environments out of the box. For more information, see:\nhttps://nix.dev/permalink/stub-ld\n"
A solution for this issue can be found on Stack Overflow[8].
另見
- Home Manager – For declarative Neovim configuration at the user level: Neovim module in Home Manager
- Official Documentation – Official Neovim documentation.
- NixOS options for Neovim – System-level Neovim configuration.
- Neovim discussions on NixOS Discourse – Community tips, troubleshooting, and use cases.
- Neovim Overlay on Nixpkgs – For nightly builds and additional Neovim packages.
參考
- ↑ Neovim Team, "Home - Neovim", Neovim Official Website, Last updated March 2025, Accessed June 2025. https://neovim.io/
- ↑ NixOS Wiki Community, "Vim", NixOS Wiki, Last edited 24 February 2025, Accessed June 2025. https://wiki.nixos.org/wiki/Vim
- ↑ Nix Community, "neovim-nightly-overlay", GitHub, Last updated June 2025, Accessed June 2025. https://github.com/nix-community/neovim-nightly-overlay
- ↑ LazyVim Team, "Getting Started", LazyVim Official Website, © 2025, Accessed June 2025. https://www.lazyvim.org/
- ↑ AstroNvim Team, "AstroNvim", AstroNvim Official Website, N/A, Accessed June 2025. https://astronvim.com/
- ↑ Siduck, "NvChad", NvChad Official Website, © 2025, Accessed June 2025. https://nvchad.com/
- ↑ NixOS, "Feature: Custom Neovim FHS Wrapper" (Pull Request #334032), GitHub, 2025, Accessed June 2025. https://github.com/NixOS/nixpkgs/pull/334032
- ↑ Stack Overflow Contributor, "Answer to 'Could not start dynamically linked executable... on NixOS'", Stack Overflow, 2025, Accessed June 2025. https://stackoverflow.com/a/78215911/27134695