Jump to content

Neovim

From Official NixOS Wiki
Revision as of 10:59, 8 March 2026 by Ardenet (talk | contribs) (Created page with "# 为 tree-sitter 安装语法 # 选项 1:安装所有语法包 pkgs.vimPlugins.nvim-treesitter.withAllGrammars # 选项 2:安装特定语法包 # (pkgs.vimPlugins.nvim-treesitter.withPlugins (p: [ p.c p.java ]))")

Neovim

Text Editor Application

100%
Developer(s)Neovim Core Team & Community
Latest releaseNvim 0.11.2 (May 30, 2025)
StatusActive
Operating SystemCross-platform (Linux, macOS, Windows)
Platform(s)Desktop
Language(s)C, Lua, Vim Script
LicenseApache 2.0 (with parts under Vim license)
External links
Websiteneovim.io
GitHubneovim/neovim
Bug trackerGitHub Issues
DocumentationOfficial Documentation
另見: 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 switchhome-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;

小技巧

☶︎
This article or section needs to be expanded. Further information may be found in the related discussion page. Please consult the pedia article metapage for guidelines on contributing.

包的變體

請查看 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.

故障排除

☶︎
This article or section needs to be expanded. Further information may be found in the related discussion page. Please consult the pedia article metapage for guidelines on contributing.

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].

另見

參考

  1. Neovim Team, "Home - Neovim", Neovim Official Website, Last updated March 2025, Accessed June 2025. https://neovim.io/
  2. NixOS Wiki Community, "Vim", NixOS Wiki, Last edited 24 February 2025, Accessed June 2025. https://wiki.nixos.org/wiki/Vim
  3. Nix Community, "neovim-nightly-overlay", GitHub, Last updated June 2025, Accessed June 2025. https://github.com/nix-community/neovim-nightly-overlay
  4. LazyVim Team, "Getting Started", LazyVim Official Website, © 2025, Accessed June 2025. https://www.lazyvim.org/
  5. AstroNvim Team, "AstroNvim", AstroNvim Official Website, N/A, Accessed June 2025. https://astronvim.com/
  6. Siduck, "NvChad", NvChad Official Website, © 2025, Accessed June 2025. https://nvchad.com/
  7. NixOS, "Feature: Custom Neovim FHS Wrapper" (Pull Request #334032), GitHub, 2025, Accessed June 2025. https://github.com/NixOS/nixpkgs/pull/334032