Jump to content

Neovim/zh: Difference between revisions

From Official NixOS Wiki
Ardenet (talk | contribs)
mNo edit summary
Tags: Mobile edit Mobile web edit
FuzzyBot (talk | contribs)
Updating to match new version of source page
Tags: Mobile edit Mobile web edit
 
Line 1: Line 1:
<languages/>
<languages/>
{{low quality|reason=<span lang="en" dir="ltr" class="mw-content-ltr">The provided nix code snippets in [[#Tips_and_tricks|Tips and tricks]] look out of context, lacking indication where the provided configuration belongs (e.g. home-manager, configuration.nix or elsewhere?); [[#Installation|Installation]] and [[#Configuration|Configuration]] mix home-manager and configuration.nix code in monolithic code blocks. [[#Beginning|Beginning]] is over too wordy.</span>}}
{{infobox application
{{infobox application
   |name=Neovim
   |name=Neovim
Line 6: Line 7:
   |developer=Neovim Core Team & Community
   |developer=Neovim Core Team & Community
   |firstRelease=November 1, 2015
   |firstRelease=November 1, 2015
   |latestRelease=Nvim 0.11.2 (May 30, 2025)
   |latestRelease=Nvim 0.12.2 (April 22, 2026)
   |status=Active
   |status=Active
   |license=[https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0] (with parts under Vim license)
   |license=[https://www.apache.org/licenses/LICENSE-2.0 Apache 2.0] (with parts under Vim license)
Line 20: Line 21:
:''另见: [[Special:MyLanguage/Vim|Vim]]''
:''另见: [[Special:MyLanguage/Vim|Vim]]''


<div class="mw-translate-fuzzy">
[https://neovim.io/ Neovim]<ref>Neovim 团队, "Home - Neovim", Neovim 官方网站, 最后更新日期:2025年3月;访问日期:2025年6月。 https://neovim.io/</ref> 是一款高度可扩展的开源文本编辑器,旨在改进和现代化流行的 [[Special:MyLanguage/Vim|Vim]]<ref>NixOS 维基社区, "Vim", NixOS 维基, 最后编辑于 2025 年 2 月 24 日,访问于 2025 年 6 月。 https://wiki.nixos.org/wiki/Vim</ref> 编辑器。它被设计为 Vim 的无缝衔接替代品,在保持与大多数 Vim 插件和配置的兼容性的同时,提供额外的功能和改进。Neovim 注重可扩展性、易用性和性能。
[https://neovim.io/ Neovim]<ref>Neovim 团队, "Home - Neovim", Neovim 官方网站, 最后更新日期:2025年3月;访问日期:2025年6月。 https://neovim.io/</ref> 是一款高度可扩展的开源文本编辑器,旨在改进和现代化流行的 [[Special:MyLanguage/Vim|Vim]]<ref>NixOS 维基社区, "Vim", NixOS 维基, 最后编辑于 2025 年 2 月 24 日,访问于 2025 年 6 月。 https://wiki.nixos.org/wiki/Vim</ref> 编辑器。它被设计为 Vim 的无缝衔接替代品,在保持与大多数 Vim 插件和配置的兼容性的同时,提供额外的功能和改进。Neovim 注重可扩展性、易用性和性能。
</div>


它引入了强大的插件架构,支持异步插件执行,这可以显著提升某些操作的性能。它还内置了终端模拟器,允许用户直接在编辑器中运行 shell 命令。该项目注重代码质量和可维护性,拥有简洁且文档完善的代码库,方便开发者贡献代码。
它引入了强大的插件架构,支持异步插件执行,这可以显著提升某些操作的性能。它还内置了终端模拟器,允许用户直接在编辑器中运行 shell 命令。该项目注重代码质量和可维护性,拥有简洁且文档完善的代码库,方便开发者贡献代码。
Line 31: Line 34:
要在不修改系统配置的情况下临时在 shell 环境中使用 Neovim,您可以运行:
要在不修改系统配置的情况下临时在 shell 环境中使用 Neovim,您可以运行:


{{code|lang=bash|line=no|1=$ nix-shell -p neovim}}
<syntaxhighlight lang="console">
$ nix-shell -p neovim
</syntaxhighlight>


这样就能在当前 shell 中使用 Neovim 编辑器了。之后,您可以通过输入 <code>nvim</code> 来启动 Neovim。
这样就能在当前 shell 中使用 Neovim 编辑器了。之后,您可以通过输入 <code>nvim</code> 来启动 Neovim。
Line 101: Line 106:
programs.neovim.defaultEditor = true;}}
programs.neovim.defaultEditor = true;}}


<div class="mw-translate-fuzzy">
== 小技巧 ==
== 小技巧 ==
{{expand}}
{{expand}}
</div>


<span id="Package_Variations"></span>
<div lang="en" dir="ltr" class="mw-content-ltr">
==== Nix configuration frameworks ====
</div>
 
<div lang="en" dir="ltr" class="mw-content-ltr">
[https://github.com/nix-community/nixvim Nixvim] and [https://github.com/NotAShelf/nvf nvf] provide a framework for declaratively configuring neovim with [[Nix (language)|Nix]]. They support, among the other things, plugin configuration, as well as mixing in plain Lua config snippets.
Linux and Darwin platforms are supported using standalone Nix, [[Special:MyLanguage/NixOS|NixOS]] or [[Special:MyLanguage/Home Manager|Home Manager]] modules.
</div>
 
<span id="Package_variations"></span>
<div class="mw-translate-fuzzy">
==== 包的变体 ====
==== 包的变体 ====
</div>


<div class="mw-translate-fuzzy">
请查看 [https://github.com/nix-community/neovim-nightly-overlay Neovim Nightly Overlay]<ref>Nix 社区, "neovim-nightly-overlay", GitHub, 最后更新于 2025 年 6 月,访问于 2025 年 6 月。https://github.com/nix-community/neovim-nightly-overlay</ref> 以安装最新的 Neovim nightly 版本。
请查看 [https://github.com/nix-community/neovim-nightly-overlay Neovim Nightly Overlay]<ref>Nix 社区, "neovim-nightly-overlay", GitHub, 最后更新于 2025 年 6 月,访问于 2025 年 6 月。https://github.com/nix-community/neovim-nightly-overlay</ref> 以安装最新的 Neovim nightly 版本。
</div>


您可以通过以下命令运行主版本:
您可以通过以下命令运行主版本:


{{code|lang=bash|line=no|1=$ nix run "github:nix-community/neovim-nightly-overlay"}}
<syntaxhighlight lang="console">
$ nix run "github:nix-community/neovim-nightly-overlay"
</syntaxhighlight>


<span id="Plugin_Management"></span>
<span id="Plugin_management"></span>
<div class="mw-translate-fuzzy">
==== 插件管理 ====
==== 插件管理 ====
</div>


{{code|lang=nix|line=no|1=plugins = [
{{code|lang=nix|line=no|1=plugins = [
Line 191: Line 215:
];}}
];}}


<span id="Frameworks"></span>
<span id="Pre-made_distributions"></span>
<div class="mw-translate-fuzzy">
==== 框架 ====
==== 框架 ====
</div>


如果您不想手动配置系统,NixOS 提供了多种预定义配置和社区支持的选项。以下列举其中一些:
如果您不想手动配置系统,NixOS 提供了多种预定义配置和社区支持的选项。以下列举其中一些:


<div class="mw-translate-fuzzy">
* [https://www.lazyvim.org/ LazyVim]<ref>LazyVim 团队, "入门教程", LazyVim 官方网站, © 2025, 访问于 2025年6月。 https://www.lazyvim.org/</ref>
* [https://www.lazyvim.org/ LazyVim]<ref>LazyVim 团队, "入门教程", LazyVim 官方网站, © 2025, 访问于 2025年6月。 https://www.lazyvim.org/</ref>
* [https://astronvim.com/ AstroNvim]<ref>AstroNvim 团队, "AstroNvim", AstroNvim 官方网站, N/A, 访问于 2025年6月。 https://astronvim.com/</ref>
* [https://astronvim.com/ AstroNvim]<ref>AstroNvim 团队, "AstroNvim", AstroNvim 官方网站, N/A, 访问于 2025年6月。 https://astronvim.com/</ref>
* [https://nvchad.com/ NVChad]<ref>Siduck, "NvChad", NvChad 官方网站, © 2025, 访问于 2025年6月。 https://nvchad.com/</ref>
* [https://nvchad.com/ NVChad]<ref>Siduck, "NvChad", NvChad 官方网站, © 2025, 访问于 2025年6月。 https://nvchad.com/</ref>
</div>


默认情况下,LazyVim 会阻止加载非 LazyVim 管理的插件。这包括所有通过 Nix 安装的插件。如果您想同时使用 Nix 和 LazyVim 安装插件,请将以下内容添加到您的 LazyVim 配置中:
默认情况下,LazyVim 会阻止加载非 LazyVim 管理的插件。这包括所有通过 Nix 安装的插件。如果您想同时使用 Nix 和 LazyVim 安装插件,请将以下内容添加到您的 LazyVim 配置中:
Line 208: Line 236:
   },
   },
  })
  })
  vim.cmd([[ packloadall]] ) -- load plugins outside of lazy
  vim.cmd("packloadall") -- load plugins outside of lazy
}}
}}


<div class="mw-translate-fuzzy">
[https://github.com/folke/lazy.nvim/issues/402#issuecomment-2084997594 源码]
[https://github.com/folke/lazy.nvim/issues/402#issuecomment-2084997594 源码]
</div>


<span id="FHS_wrapper"></span>
<span id="FHS_wrapper"></span>
Line 235: Line 265:


<!--T:FHS_WRAPPER_SOURCE-->
<!--T:FHS_WRAPPER_SOURCE-->
<div class="mw-translate-fuzzy">
该 FHS 封装示例基于 nixpkgs 中的一个贡献代码<ref name="nixpkgs-pr-334032">NixOS,“功能:自定义 Neovim FHS 封装”(Pull Request #334032),GitHub,2025 年,访问于 2025 年 6 月。https://github.com/NixOS/nixpkgs/pull/334032</ref>。
该 FHS 封装示例基于 nixpkgs 中的一个贡献代码<ref name="nixpkgs-pr-334032">NixOS,“功能:自定义 Neovim FHS 封装”(Pull Request #334032),GitHub,2025 年,访问于 2025 年 6 月。https://github.com/NixOS/nixpkgs/pull/334032</ref>。
有关包含使用类似 FHS 环境设置 <code>mason.nvim</code> 的扩展配置,请参阅此 [https://github.com/NixOS/nixpkgs/issues/281219#issuecomment-2284713258 NixOS/nixpkgs 问题评论]。
有关包含使用类似 FHS 环境设置 <code>mason.nvim</code> 的扩展配置,请参阅此 [https://github.com/NixOS/nixpkgs/issues/281219#issuecomment-2284713258 NixOS/nixpkgs 问题评论]。
</div>


== 故障排除 ==
== 故障排除 ==
Line 249: Line 281:


<!--T:LUA_LS_SO_REF-->
<!--T:LUA_LS_SO_REF-->
<div class="mw-translate-fuzzy">
这个问题可以在 Stack Overflow 上找到解决方案<ref name="so-lua-ls-dynlink">Stack Overflow 贡献者,“对‘无法在 NixOS 上启动动态链接可执行文件...’的解答”,Stack Overflow,2025,访问于 2025 年 6 月。https://stackoverflow.com/a/78215911/27134695</ref>。
这个问题可以在 Stack Overflow 上找到解决方案<ref name="so-lua-ls-dynlink">Stack Overflow 贡献者,“对‘无法在 NixOS 上启动动态链接可执行文件...’的解答”,Stack Overflow,2025,访问于 2025 年 6 月。https://stackoverflow.com/a/78215911/27134695</ref>。
</div>


<span id="See_also"></span>
<span id="See_also"></span>
Line 255: Line 289:


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
* [[Home Manager]] – For declarative Neovim configuration at the user level: [https://nix-community.github.io/home-manager/options.html#opt-programs.neovim.enable Neovim module in Home Manager]
* [[Special:MyLanguage/Home Manager|Home Manager]] – For declarative Neovim configuration at the user level: [https://nix-community.github.io/home-manager/options.html#opt-programs.neovim.enable Neovim module in Home Manager]
* [https://neovim.io/doc/ Official Documentation] – Official Neovim documentation.
* [https://neovim.io/doc/ Official Documentation] – Official Neovim documentation.
* [https://search.nixos.org/options?channel=unstable&query=programs.neovim NixOS options for Neovim] – System-level Neovim configuration.
* [https://search.nixos.org/options?channel=unstable&query=programs.neovim NixOS options for Neovim] – System-level Neovim configuration.
* [https://discourse.nixos.org/search?q=neovim Neovim discussions on NixOS Discourse] – Community tips, troubleshooting, and use cases.
* [https://discourse.nixos.org/search?q=neovim Neovim discussions on NixOS Discourse] – Community tips, troubleshooting, and use cases.
* [https://github.com/nix-community/neovim-overlay Neovim Overlay on Nixpkgs] – For nightly builds and additional Neovim packages.
</div>
</div>



Latest revision as of 17:09, 5 October 2026

⍼︎
This article or section is of low quality. The provided nix code snippets in Tips and tricks look out of context, lacking indication where the provided configuration belongs (e.g. home-manager, configuration.nix or elsewhere?); Installation and Configuration mix home-manager and configuration.nix code in monolithic code blocks. Beginning is over too wordy. Further information may be found in the related discussion page. Editors that are knowledgeable in this area are encouraged to expand it, otherwise this page could become a candidate for deletion.

Neovim

Text Editor Application

100%
Developer(s)Neovim Core Team & Community
Latest releaseNvim 0.12.2 (April 22, 2026)
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 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;

小技巧

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

Nix configuration frameworks

Nixvim and nvf provide a framework for declaratively configuring neovim with Nix. They support, among the other things, plugin configuration, as well as mixing in plain Lua config snippets. Linux and Darwin platforms are supported using standalone Nix, NixOS or Home Manager modules.

包的变体

请查看 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