Jump to content

Neovim/zh: Difference between revisions

From Official NixOS Wiki
Ardenet (talk | contribs)
No edit summary
Ardenet (talk | contribs)
mNo edit summary
Tags: Mobile edit Mobile web edit
 
(4 intermediate revisions by the same user not shown)
Line 196: Line 196:
如果您不想手动配置系统,NixOS 提供了多种预定义配置和社区支持的选项。以下列举其中一些:
如果您不想手动配置系统,NixOS 提供了多种预定义配置和社区支持的选项。以下列举其中一些:


<div lang="en" dir="ltr" class="mw-content-ltr">
* [https://www.lazyvim.org/ LazyVim]<ref>LazyVim 团队, "入门教程", LazyVim 官方网站, © 2025, 访问于 2025年6月。 https://www.lazyvim.org/</ref>
* [https://www.lazyvim.org/ LazyVim]<ref>LazyVim Team, "Getting Started", LazyVim Official Website, © 2025, Accessed June 2025. 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 Team, "AstroNvim", AstroNvim Official Website, N/A, Accessed June 2025. 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 Official Website, © 2025, Accessed June 2025. https://nvchad.com/</ref>
</div>


默认情况下,LazyVim 会阻止加载非 LazyVim 管理的插件。这包括所有通过 Nix 安装的插件。如果您想同时使用 Nix 和 LazyVim 安装插件,请将以下内容添加到您的 LazyVim 配置中:
默认情况下,LazyVim 会阻止加载非 LazyVim 管理的插件。这包括所有通过 Nix 安装的插件。如果您想同时使用 Nix 和 LazyVim 安装插件,请将以下内容添加到您的 LazyVim 配置中:
Line 237: Line 235:


<!--T:FHS_WRAPPER_SOURCE-->
<!--T:FHS_WRAPPER_SOURCE-->
<div lang="en" dir="ltr" class="mw-content-ltr">
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>
This FHS wrapper example is based on a contribution to nixpkgs<ref name="nixpkgs-pr-334032">NixOS, "Feature: Custom Neovim FHS Wrapper" (Pull Request #334032), GitHub, 2025, Accessed June 2025. https://github.com/NixOS/nixpkgs/pull/334032</ref>.
有关包含使用类似 FHS 环境设置 <code>mason.nvim</code> 的扩展配置,请参阅此 [https://github.com/NixOS/nixpkgs/issues/281219#issuecomment-2284713258 NixOS/nixpkgs 问题评论]
For an extended configuration that includes setting up <code>mason.nvim</code> with a similar FHS environment, see this [https://github.com/NixOS/nixpkgs/issues/281219#issuecomment-2284713258 NixOS/nixpkgs issue comment].
</div>


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


<!--T:LUA_LS_SO_REF-->
<!--T:LUA_LS_SO_REF-->
<div lang="en" dir="ltr" class="mw-content-ltr">
这个问题可以在 Stack Overflow 上找到解决方案<ref name="so-lua-ls-dynlink">Stack Overflow 贡献者,“对‘无法在 NixOS 上启动动态链接可执行文件...’的解答”,Stack Overflow,2025,访问于 2025 年 6 月。https://stackoverflow.com/a/78215911/27134695</ref>
A solution for this issue can be found on Stack Overflow<ref name="so-lua-ls-dynlink">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</ref>.
</div>


<span id="See_also"></span>
<span id="See_also"></span>

Latest revision as of 11:20, 8 March 2026

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