Jump to content

Neovim

From Official NixOS Wiki
Revision as of 11:20, 8 March 2026 by Ardenet (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

  # 选项 3:不使用 Nix 安装语法
# 通过内置命令安装语法包可能会导致错误。
# 以下 Neovim 命令将为 C 编程语言安装语法高亮::TSInstall c
];

框架

如果您不想手動配置系統,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 "$@"
  '';
}

該 FHS 封裝示例基於 nixpkgs 中的一個貢獻代碼[7]。 有關包含使用類似 FHS 環境設置 mason.nvim 的擴展配置,請參閱此 NixOS/nixpkgs 問題評論

故障排除

☶︎
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"

這個問題可以在 Stack Overflow 上找到解決方案[8]

另見

參考

  1. Neovim 團隊, "Home - Neovim", Neovim 官方網站, 最後更新日期:2025年3月;訪問日期:2025年6月。 https://neovim.io/
  2. NixOS 維基社區, "Vim", NixOS 維基, 最後編輯於 2025 年 2 月 24 日,訪問於 2025 年 6 月。 https://wiki.nixos.org/wiki/Vim
  3. Nix 社區, "neovim-nightly-overlay", GitHub, 最後更新於 2025 年 6 月,訪問於 2025 年 6 月。https://github.com/nix-community/neovim-nightly-overlay
  4. LazyVim 團隊, "入門教程", LazyVim 官方網站, © 2025, 訪問於 2025年6月。 https://www.lazyvim.org/
  5. AstroNvim 團隊, "AstroNvim", AstroNvim 官方網站, N/A, 訪問於 2025年6月。 https://astronvim.com/
  6. Siduck, "NvChad", NvChad 官方網站, © 2025, 訪問於 2025年6月。 https://nvchad.com/
  7. NixOS,「功能:自定義 Neovim FHS 封裝」(Pull Request #334032),GitHub,2025 年,訪問於 2025 年 6 月。https://github.com/NixOS/nixpkgs/pull/334032