NixVim 是一个基于 Nix 模块构建的 Neovim 发行版。它以 Nix flake 的形式发布,通过 Nix 进行配置,同时为您的插件和 vimrc 留有空间。
这里有一个简单的配置,使用gruvbox作为配色方案,并使用lightline插件:
{ programs.nixvim = { enable = true; colorschemes.gruvbox.enable = true; plugins.lightline.enable = true; }; }
当我们这样做时,lightline将被设置为一个合理的默认值,并使用gruvbox作为配色方案,无需额外配置!
当你构建模块(可能使用home-manager)时,它会 安装所有你的插件,并为NeoVim生成一个包含所有指定选项的lua配置。由于它使用lua,这确保了你的配置将以尽可能快的速度加载。 由于默认情况下一切都是禁用的,它将会像你希望的那样快速响应。
大多数插件都有一个settings
选项,它接受任何nix属性集并将其转换为lua表。然后这个表会被传递给插件的setup
函数。实际上,这意味着如果一个插件有settings
选项,任何插件选项都可以被配置,即使我们没有明确对应的nix选项。
如果你只是想在init.lua
中添加额外的lua代码行,你可以使用extraConfigLua
、extraConfigLuaPre
和extraConfigLuaPost
。
如果你想将lua代码赋值给一个通常接受其他类型(字符串、整数等)的选项,你可以使用nixvim的"原始类型",{ __raw = "lua代码"; }
。
NixVim 现在附带 flake-compat
,使其可以在任何系统上使用。
要安装它,请编辑您的 home-manager(或 NixOS)配置:
</details> <details> <summary><strong>使用 flakes</strong></summary>{ pkgs, lib, ... }: let nixvim = import (builtins.fetchGit { url = "https://github.com/nix-community/nixvim"; # 如果您没有运行 nixpkgs 的不稳定版本,请选择对应的 nixvim 分支。 # ref = "nixos-24.05"; }); in { imports = [ # 对于 home-manager nixvim.homeManagerModules.nixvim # 对于 NixOS nixvim.nixosModules.nixvim # 对于 nix-darwin nixvim.nixDarwinModules.nixvim ]; programs.nixvim.enable = true; }
如果您已经在使用 flakes 管理系统,这是推荐的方法。要启用 flakes,请在 /etc/nixos/configuration.nix
中添加以下内容:
{ pkgs, lib, ... }: { nix = { settings.experimental-features = [ "nix-command" "flakes" ]; }; }
现在,您需要导入模块。如果您的系统已经使用 flakes 配置,只需添加 nixvim 输入:
{ # ... inputs.nixvim = { url = "github:nix-community/nixvim"; # 如果您没有运行 nixpkgs 的不稳定版本,请选择对应的 nixvim 分支。 # url = "github:nix-community/nixvim/nixos-24.05"; inputs.nixpkgs.follows = "nixpkgs"; }; }
现在您可以使用 inputs.nixvim.homeManagerModules.nixvim
访问 home-manager 安装的模块,使用 inputs.nixvim.nixosModules.nixvim
访问 NixOS 的模块,以及使用 inputs.nixvim.nixDarwinModules.nixvim
访问 nix-darwin 的模块。
更多详细信息,请参阅我们文档中的使用方法部分。
如果你想独立使用,可以使用 makeNixvim
函数:
{ pkgs, nixvim, ... }: { environment.systemPackages = [ (nixvim.legacyPackages."${pkgs.stdenv.hostPlatform.system}".makeNixvim { colorschemes.gruvbox.enable = true; }) ]; }
要开始使用独立配置,你可以在一个空目录中运行以下命令使用模板(推荐):
nix flake init --template github:nix-community/nixvim
或者,如果你想要一个最小的 flake 来构建自定义的 neovim,可以使用以下配置:
<details> <summary>最小 flake 配置</summary></details>{ description = "一个非常基础的 flake"; inputs.nixvim.url = "github:nix-community/nixvim"; outputs = { self, nixvim, flake-parts, } @ inputs: let config = { colorschemes.gruvbox.enable = true; }; in flake-parts.lib.mkFlake {inherit inputs;} { systems = [ "aarch64-darwin" "aarch64-linux" "x86_64-darwin" "x86_64-linux" ]; perSystem = { pkgs, system, ... }: let nixvim' = nixvim.legacyPackages."${system}"; nvim = nixvim'.makeNixvim config; in { packages = { inherit nvim; default = nvim; }; }; }; }
然后你可以使用 nix run .# -- <file>
运行 neovim。这对于轻松测试配置更改很有用。
你可能想要对 nixvim 模块有更多控制,比如:
在这种情况下,你可以使用 makeNixvimWithModule
函数。
它接受一个包含以下键的集合:
pkgs
:要使用的 nixpkgs(默认为 nixvim flake 指向的 nixpkgs)module
:用于扩展 nixvim 的 nix 模块定义。这对于传递额外的模块机制(如 options
或 imports
)很有用。extraSpecialArgs
:使用函数时传递给模块的额外参数。例如,在 flake 中可以是 self
。更多详细信息,请参阅我们文档中的独立使用部分。
devShell
一起使用你还可以使用 nixvim 定义一个只在 Nix devShell
内可用的实例:
</details> # 文档 本项目的文档可在 GitHub Pages 上找到: [https://nix-community.github.io/nixvim](https://nix-community.github.io/nixvim) 稳定版文档也可以在 [https://nix-community.github.io/nixvim/stable](https://nix-community.github.io/nixvim/stable) 查看。 如果 `enableMan` 选项设置为 `true`(默认为 true),包含相同信息的 man 页面也会被安装,可以通过 `man nixvim` 查看。let nvim = nixvim.legacyPackages.x86_64-linux.makeNixvim { plugins.lsp.enable = true; }; in pkgs.mkShell { buildInputs = [nvim]; };
安装 NixVim 后,您无疑会想要启用一些插件。插件基于模块系统,类似于 NixOS 和 Home Manager。
因此,要启用受支持的插件,您只需启用其模块:
{ programs.nixvim = { plugins.lightline.enable = true; }; }
当然,如果仅此而已,NixVim 就没什么意义了,您可以直接使用常规的插件管理器。所有受支持插件的选项都作为该模块的选项公开。目前还没有文档,但源代码中有详细的解释。计划为每个模块提供详细文档。
并非所有插件都有模块,所以您可能仍然想要获取一些插件。这不是问题,只需使用 extraPlugins
选项:
{ programs.nixvim = { extraPlugins = with pkgs.vimPlugins; [ vim-nix ]; }; }
但是,如果您发现自己经常这样做,请考虑贡献或请求一个模块!
配色方案在不同的范围内提供:
{ programs.nixvim = { # 启用 gruvbox colorschemes.gruvbox.enable = true; }; }
就像普通插件一样,额外的配色方案选项作为其模块的一部分提供。
如果您的配色方案不是作为模块提供的,请使用 extraPlugins
安装它,并使用 colorscheme
选项设置:
{ programs.nixvim = { extraPlugins = [ pkgs.vimPlugins.gruvbox ]; colorscheme = "gruvbox"; }; }
默认情况下,所有 NixVim 支持的插件都会使用您设置的主要配色方案,但可以在每个插件的基础上覆盖。
NeoVim 有很多配置选项。您可以在 NeoVim 中通过 :h option-list
找到它们的列表。
所有这些都可以在 NixVim 中配置。您只需要设置 opts
属性:
{ programs.nixvim = { opts = { number = true; # 显示行号 relativenumber = true; # 显示相对行号 shiftwidth = 2; # Tab 宽度应为 2 }; }; }
请注意,例如,要禁用行号,您不应将 opts.nonumber
设置为 true,而应将 opts.number
设置为 false。
完全可以在 NixVim 中定义键位映射。这是通过 keymaps
属性完成的:
{ programs.nixvim = { keymaps = [ { key = ";"; action = ":"; } { mode = "n"; key = "<leader>m"; options.silent = true; action = "<cmd>!make<CR>"; } ]; }; }
这相当于以下 vimscript:
noremap ; : nnoremap <leader>m <silent> <cmd>make<CR>
这个表格描述了 keymaps
选项的所有模式。
您可以通过使用字符串列表为单个映射提供多个模式。
简写 | 描述 |
---|---|
"n" | 普通模式 |
"i" | 插入模式 |
"v" | 可视和选择模式 |
"s" | 选择模式 |
"t" | 终端模式 |
"" | 普通、可视、选择和操作符待定模式 |
"x" | 仅可视模式,不包括选择 |
"o" | 操作符待定模式 |
"!" | 插入和命令行模式 |
"l" | 插入、命令行和语言参数模式 |
"c" | 命令行模式 |
每个键位映射可以在 options
属性中指定以下设置。
NixVim | 默认值 | VimScript |
---|---|---|
silent | false | <silent> |
nowait | false | <nowait> |
script | false | <script> |
expr | false | <expr> |
unique | false | <unique> |
noremap | true | 使用映射的 'noremap' 变体 |
remap | false | 使映射递归(与 noremap 相反) |
desc | "" | 此键位映射的描述 |
有时您可能想定义一个全局变量,例如设置 leader 键。这可以通过 globals
属性轻松实现:
{ programs.nixvim = { globals.mapleader = ","; # 将 leader 键设置为逗号 }; }
有时 NixVim 可能无法满足您所有的自定义需求。在这些情况下,提供了 extraConfigVim
和 extraConfigLua
选项:
{ programs.nixvim = { extraConfigLua = '' -- 在 nvim 打开时打印一条小欢迎消息! print("Hello world!") ''; }; }
如果您觉得您手动做的事情应该在 NixVim 中得到支持,请开一个 issue。
AI数字人视频创作平台
Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。
一站式AI创作平台
提供 AI 驱动的图片、视频生成及数字人等功能,助 力创意创作
AI办公助手,复杂任务高效处理
AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!
AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号