01-引言与安装
第 1 章 引言与安装
这本书是为所有对模式编辑的强大功能感到好奇,但又被相关入门教程中繁琐的配置要求吓到或感到厌烦的开发者们准备的。
译者注: 模式编辑 (Modal Editing) 是一种文本编辑范式,与我们常见的大多数编辑器(如 Word、VS Code )不同。在模式编辑器(如 Vim)中,键盘敲击的含义取决于编辑器当前所处的“模式”。最常见的模式是“普通模式”(Normal Mode,用于导航和操作文本)和“插入模式”(Insert Mode,用于输入文本)。非模式编辑器大部分时间都处于类似“插入模式”的状态。
举个例子:当你按下 dd 的时候,普通编辑器(word)会在屏幕上出现 dd 的字符。但是Vim的普通模式会删除光标所在行,插入模式才会正常出现 dd 的字符,可视模式(Visual Mode)则会删除选中的文本并复制到寄存器。
我猜你可能是一位 Visual Studio Code 用户(这是一个很棒的编辑器,我也用了好几年),但也可能来自许多其他集成开发环境和代码编辑器,想要接触模式编辑。你可能听说过 Vim,现在想亲自尝试一下。
译者注:对于运维和服务器开发来说,vim可是刚需技能。
服务器环境没图形界面 → 只有终端,vim是最稳定、通用的选择。
紧急修复与运维 → 快速定位问题并修改,比下载文件到本地编辑再上传回去快太多。
1.1. 为何选择 Vim
Vim 有着非常悠久的历史。它诞生于 90 年代初,是对更古老的 Vi 编辑器(写于 70 年代)的改进。“Vim”这个名字实际上代表“Vi, improved”(Vi 的改进版)。它的前身 Vi 是“Visual”的缩写,因为它又是对一个更早期(1971 年)名为 ed
的非可视化行编辑器的迭代。
译者注:
- Vi: 70 年代 Bill Joy 开发的经典 Unix 文本编辑器。
ed
: Unix 上最早期的行编辑器之一,非可视化,一次处理一行,异常难用。- 行编辑器: 与屏幕编辑器(如 Vi, Vim, Emacs, VS Code)相对,行编辑器通常不显示文件的全貌,而是通过命令操作特定行,极其难用。
作者注:
有趣的是,
ed
在现代 Unix 系统上仍然可用。如果你使用 MacOS 或 Linux 环境,很可能在任何终端输入ed
就能访问它。(如果你不小心尝试了,按Control-D
可以退出)。现在你对ed
的了解和我一样多了,相信我,你不会想了解更多。
你可能还熟悉 ed
的另一个迭代版本,叫做 sed
,即流编辑器。直到今天,它仍然被用于在 shell 管道中修改文本。
译者注:
sed
(Stream Editor): 主要用于基于预设规则自动编辑文本流(通常是文件或管道输出),是非交互式的。Shell 管道 (Pipeline): 在 Unix/Linux 命令行中,用
|
符号将一个命令的输出连接到另一个命令的输入。
ed
命令也被扩展(extended)创建了另一个行编辑器叫做 ex
,现在基本不再使用了,除非作为 Vim 的一个(被广泛使用的)子模式。事实上,如果你安装 Neovim 并在命令行输入 ex
,你会得到一个功能 severely 残缺的 Neovim 实例,它只支持 ex
命令。
译者注: Vim 中的很多以冒号
:
开头的命令(例如:w
保存,:q
退出)实际上就是ex
命令。在普通模式下按:
就进入了ex
命令模式。
所以,这真是一个庞大的家族树,但正如任何“富四代”可以证明的那样,仅凭祖先并不能很好地预测质量。
选择任何编辑器都有很多理由,但对于 Vim 来说,突出的优点有:
-
身体健康
这对我来说是最重要的一点。我职业生涯早期大量使用 Vim,但像许多开发者一样,当 VS Code 在 2015 年问世时,我转向了它。我长时间待在键盘前,到 2020 年,我因 RSI(重复性劳损)严重到有六个月完全通过语音编程(关于这个话题的一篇博客文章让我意外地小有名气)。一位朋友建议我切换回模式编辑,这对我产生了巨大的影响。绝大多数 Vim 击键不需要用同一只手按住多个键,这种操作是加剧腕管综合征的主要原因。
译者注: RSI (Repetitive Strain Injury) 即重复性劳损,指因长时间重复执行某些动作而导致的肌肉、神经、肌腱等组织的损伤,常见于长期使用键盘鼠标的人群。腕管综合征是其中一种。模式编辑通过减少组合键和鼠标使用,有助于缓解 RSI。我个人则通过人体工学键盘和Dvorak键盘配列来缓解职业病。
-
性能
大多数 IDE 都有某种“vi 模拟”层或插件,让你无需完全切换到新编辑器就能获得模式编辑的部分好处。但是,等待 VS Code 启动并加载所有你熟悉和喜爱的扩展,对许多人来说已经变成了一种冥想练习(或者一个重拾摸鱼刷手机的机会)。相比之下,当我加载我的 LazyVim 配置时,它会贴心地告诉我加载耗时:56.98 毫秒。对我这迟钝的人类眼睛来说,这是瞬时的。
-
开发效率
这一点有争议且主观。任何工具的好坏取决于使用它的工匠,我当然认识一些使用 VS Code、Emacs 或 JetBrains 配置就能飞速编码的优秀开发者。尽管如此,我仍然坚信一个精心调整的 Vim 配置可以超越它们中的任何一个。
-
开放生态
自从纳德拉(Nadella)掌舵以来,我对微软对待开源软件的方式表示敬意,但 VS Code 正显示出越来越多的专有锁定迹象(尤其是在其 AI 集成方面)。相比之下,Neovim 生态系统是一个充满活力的开放社区,每周都有创新插件涌现,这些插件在 VS Code 中是绝不会有人尝试去做的。
译者注: 专有锁定 (Proprietary Lock-in) 指供应商使用技术或策略,使得客户难以更换到其他供应商的产品或服务。用习惯IOS的用户会不习惯Android系统手机。
我本人不喜欢高度定制的ide产品,因为我经常出差和经手别人的代码,所以我会直接重置所有设置,熟练使用所有IDE的原厂模式。
1.2. 为何特别选择 Neovim
如果你决定使用 Vim,你会很快发现有两个现代变种:Vim 和 Neovim。两者都是那个 90 年代原始开源 Vim 代码的直系后代。Neovim 是在 2014 年从 Vim fork 出来的,旨在重构和现代化代码库及功能集。
译者注: Fork 指的是从一个现有的软件项目(源项目)创建一个独立的副本,新的开发可以在这个副本上进行,而不会影响源项目。
两者都在积极维护中,都有潜力变得精致和现代化,尽管需要一些配置才能达到这种潜力。它们各自拥有极其强大的插件生态系统,但 Neovim 有一个杀手级特性:它引入了 Lua 编程语言用于插件开发(和配置),这是对其兄弟 Vim 使用的原生 VimScript 的补充。
译者注:
VimScript (或 Vim script, VimL): Vim 内建的脚本语言,用于编写插件和配置 Vim。
Lua: 一种轻量级、可嵌入的脚本语言,以其简洁、高效和易于集成而闻名。Neovim 选择 Lua 旨在提供比 VimScript 更现代、性能更好的脚本选项。
Lua 是“能做大事的小语言”,设计哲学就是:不给程序员增加额外思考负担,只关注要做的事本身。
具体可以看文章 -> 为什么Lua如此简单
单凭 Lua 本身并不能使 Neovim 内在地优于 Vim。然而,虽然大多数 Vim 插件也能在 Neovim 上运行,反之则不总是成立,并且存在一些只适用于 Neovim 的顶级的 Lua 插件。
你都打开这本书了,说明你已经做好了决定:本书所介绍的 LazyVim 发行版只适用于 Neovim。
译者注: 发行版 (Distribution) 在这里指一个预先配置好的 Neovim 环境,它打包了一系列插件、设置和快捷键,旨在提供开箱即用的现代化编辑体验。跟我重复一篇:开箱即用!
1.3. LazyVim 介绍
Vim 和 Neovim 的主要缺点是,虽然它们有能力提供与其他任何 IDE 相同(甚至更好)的现代编辑体验,但它们并非一开始就是这样。Vim 有着长期保持与过时的 vi
工具兼容的传统,而 Neovim 仅略微偏离了这一传统。当你初次安装 Neovim 时,得到的是一个相当平淡无奇的代码编辑体验。
当我在 2020 年切换回 Vim 时,我已经习惯了 VS Code 带给编辑器生态系统的强大功能,我花了整整两周时间才把我的配置调整到我想要的样子,并且在之后的几个月里不断地进行微调。我的配置大约有 300 行 VimScript,后来我将其移植到了大约 250 行 Lua 代码。公平地说,我本身就是一个重度定制者,我的 VS Code 配置实际上比这两个都长!但我很乐意承认 VS Code 的开箱即用体验要好得多。
我研究了几款所谓的 Neovim“发行版”(预配置的设置)。我不会详细比较,但 LazyVim 显然是遥遥领先的赢家,主要是因为它在提供极其简单的开箱即用体验与相对容易的定制和配置之间取得了平衡。
译者注: 在Neovim的基础上再打包了很多插件,更好的“开箱即用!”
需要明确的是,LazyVim 就是 Vim。编辑体验是完全相同的。它不像 Neovim 那样是 Vim 的新迭代或版本。相反,LazyVim 是一种思维模式;它始于对构成现代开发最佳插件配置的共识,以及一个使它们协同工作的配置(管理编辑器配置时,让不同插件的快捷键不相互冲突是主要痛点之一)。
但如果你抱着“这种体验将优于我以前使用过的任何其他编辑体验”的心态去使用 LazyVim,并接受你需要重新训练一些键盘肌肉记忆,你会发现它考虑得极为周到。以我的经验来看,它正是 2020 年代模式编辑体验应有的样子。
1.4. 选择终端
如果你读到了这里,你可能认为已经准备好安装 Neovim 了。实际上,你还有一个决定要做。
Neovim 可以在很多不同的环境中运行(你甚至可以在 Visual Studio Code 内部运行它!)。默认情况下,它是一个终端程序,但也有大量的 GUI 可用。我几乎尝试了所有这些 GUI,老实说,我认为它们相比直接在终端中运行 Neovim 并没有任何内在优势。
本书后面会简要讨论将 Neovim 连接到几个 GUI,但对于入门,我建议在终端中运行 Neovim。具体来说,是一个非常好的终端。
为了获得最佳的 Vim 编辑体验,你需要一个 GPU 加速的终端。这是什么意思?基本上就是用被设计出来渲染照片级逼真视频的芯片来去渲染源代码。听起来和用它搞人工智能差不多吧?
译者注: GPU 加速终端利用图形处理单元 (GPU)(显卡) 来渲染文本和界面元素,而不是完全依赖中央处理器 (CPU)。这可以使得滚动、重绘和处理大量文本输出时更加流畅、响应更快,尤其是在显示复杂图形(如图标字体、连字)或高分辨率屏幕上。
终端是linux系统最重要的软件,而不同的终端性能不太一样,选择可以调用显卡的会流畅一点。
你需要自行研究以下选项,可以问问你最喜欢的搜索引擎或当下的 AI 聊天机器人来帮你决定:
-
是我的个人偏好。我发现它文档齐全、易于配置且功能完备。
-
可能是原始速度上的赢家,但配置比较笨拙,功能也较少。
-
有一些非常酷的功能,但我发现文档有所欠缺,并且在让某些方面工作时遇到了麻烦。
-
如果你是 Windows 用户,它确实声称是 GPU 加速的,尽管我发现在其中 Neovim 偶尔会无响应。
-
如果你已经是 Warp 的用户并且离不开它,Neovim 确实可以在里面工作。我发现体验有点卡顿,而且我不喜欢 Warp 的外观和感觉(以及需要登录才能使用它的事实)。
所以,安装并尝试其中的一个或多个,直到找到你喜欢的那一个。你可以使用其他终端模拟器,如果你愿意的话。你可能甚至不会注意到体验稍差,但我可以保证,如果你以后切换到 GPU 加速的体验,你会注意到改进。
译者注:用系统默认的就好了,我用的是Debian12系统,KDE Plasma 桌面**,默认终端是 **Konsole。
1.5. 设置终端字体
LazyVim 及其插件在终端中看起来很漂亮,你几乎不会相信它们不是 GUI 应用程序。为了做到这一点,它们依赖于包含大量与编码相关的字形的特殊字体。最显著的是,这让你能够看到代表你打开文件类型的图标,同时也在终端中提供了漂亮的边框和类似窗口的行为。
译者注: 字形 (Glyph) 指的是字符的可视化表示。在 Nerd Fonts 的语境下,这通常指代那些被添加到标准字体中的额外图标,如文件类型图标、Git 状态图标、UI 元素等。带各种符号的字体。
为了获得最佳的 LazyVim 体验,你需要安装这些特殊字体中的一种,并配置你的终端使用它。实际上,即使你不是 Neovim 的重度用户,也应该在终端中使用这些字体之一。许多现代终端应用程序(这说法,嗯?)如果安装了这些字体,看起来会更好。
请访问 Nerd Fonts 获取更多信息。如果你使用 Kitty,你只需要安装 NerdFontsSymbolsOnly
字体,如果 Kitty 在你配置的等宽字体中找不到某个符号,它会自动从这个字体中提取。对于其他终端,你可能需要按照 Nerd Fonts 网站上的讨论,安装并配置一个“打过补丁”的字体。有很多字体可供选择。
译者注: Nerd Fonts 是一个项目,它获取流行的编程字体,并向其中添加大量的字形(图标)。“打过补丁 (Patched)”的字体是指已经将这些额外图标合并进去的字体文件。
NerdFontsSymbolsOnly
是一个特殊的字体,只包含这些图标,某些终端(如 Kitty)可以将其作为备用字体,动态地从中提取图标。
你可以从许多最流行的编程字体中选择。下载和安装它们非常依赖于操作系统,所以自己看 Nerd Fonts 网站上的指南吧。
1.6. 安装 Neovim
Neovim 几乎可以在任何可以安装软件的地方运行,并且它只依赖于标准的系统依赖项。主要问题在于,无论你使用哪个操作系统,你的选择都多得让人眼花缭乱!
你可以访问 Neovim 主页 并点击“Install Now”按钮,从 Neovim 开发者那里获取适用于你选择的操作系统的最新版。
译者注:大部分人都是Linux x86_64版本。
1.6.1. 我应该安装哪个版本?
与它们的发布周期相比,Neovim 的开发速度非常快,所以人们运行最新的 nightly build(每日构建版)并不罕见。我很少在从 Github 的 master 分支构建的版本中遇到 bug,所以通常是安全的。我通常在最新的稳定版本发布时使用它,然后当某个新的插件更新说“如果你使用 Neovim nightly,这里有个很酷的功能”时,我就会转而安装最新的 Neovim 构建版。
译者注: Nightly Build (每日构建版) 是指软件开发过程中每天自动从最新代码库编译生成的版本。它包含最新的功能和修复,但也可能不稳定。Stable Release (稳定版) 是指经过更充分测试、被认为足够可靠可供广泛使用的版本。
我建议现在从 Neovim 的最新稳定版本开始,在撰写本文时是 0.10.0。尽可能避免使用旧版本。LazyVim 确实倾向于添加来自 nightly 版本的功能,所以如果你开始像我一样对这个发行版感到兴奋,那么切换到预发布版本将是一个非常自然的进展。
1.6.2. Windows
在 Windows 上,我建议使用 WSL(适用于 Linux 的 Windows 子系统)并在其中进行所有开发。WSL 远远超出了本书的范围,但微软和许多在线教程都有很好的文档记录。一旦你选择了一个与 WSL 兼容的 Linux 发行版,设置好它,并在你选择的终端中运行它,你就可以按照下面的 Linux 说明来安装 Neovim。
译者注: WSL (Windows Subsystem for Linux) 允许开发者在 Windows 上直接运行 GNU/Linux 环境(包括大多数命令行工具、实用程序和应用程序),而无需传统虚拟机或双启动设置的开销。
WSL教程 -> 如何启动wsl,我建议还是Vmbox启动个Debian的虚拟机。虚拟机教程->快速启动Debian虚拟机
如果你有理由或偏好在原生 Windows 上开发,最简单的方法是从 GitHub 上的 neovim/neovim 仓库的 Releases 部分获取 MSI 安装程序。
如果你已经在 Windows 机器上使用 Winget、Chocolatey 或 Scoop 来管理软件包,它们各自都有 Neovim 包。
译者注: Winget, Chocolatey, Scoop 都是 Windows 上的包管理器,类似于 Linux 上的
apt
或dnf
,或 MacOS 上的brew
,可以简化软件的安装、更新和卸载。
请注意,如果你在没有 WSL 的情况下使用 Windows,你还需要安装一个 C 编译器才能获得 treesitter 支持(这基本上意味着更好的语法高亮和代码导航支持)。遗憾的是,这不是一项简单的任务。这在 nvim-treesitter/nvim-treesitter GitHub 仓库中有文档记录,所以我不会在这里详述。
译者注: Treesitter 是一个解析器生成器工具和增量解析库。在 Neovim 中,它用于提供更快速、更准确的语法高亮、代码折叠、导航、重构等功能。它通常需要一个 C 编译器来构建特定语言的解析器(语法文件)。
1.6.3. MacOS
MacOS 上的大多数开发者都使用 Homebrew,所以如果你还没有安装它,我建议按照 brew.sh 上的说明进行安装。
译者注: Homebrew 是 MacOS(和 Linux)上一个非常流行的开源包管理器。
一旦你让 brew 运行起来,命令 brew install neovim
将会安装 Neovim。
如果你想走在前沿,brew install --HEAD neovim
将安装 Neovim 的最新 nightly 版本,这个版本很可能(但不保证)是稳定的。
我发现 brew 的体验比 MacOS 上其他 Neovim 安装选项要友好得多,所以如果你还不是 Homebrew 用户,我强烈建议设置它。随着我们深入 LazyVim 之旅,你还会想要安装其他一些开源工具,而 brew 将是获取它们最简单的方式。
如果你不想使用 Homebrew,事情会有点麻烦。Neovim 开发团队不维护 MacOS 安装程序,所以你必须下载一个 tarball(压缩包)并解压它,然后从你系统路径(PATH)中的某个位置链接到该二进制文件。如果你不知道这些是什么意思,老实说,用 Homebrew 吧,它更容易!
1.6.4. Linux
如果 Neovim 在你的发行版的默认包管理器中不可用,那么你的 Linux 发行版确实非常奇怪!
译者注:不是哥们,你都用这种逆天Linux发行版了,为什么还要用Vim,Vi不香吗?
所以只需运行 sudo pacman -S neovim
、sudo apt install neovim
、sudo dnf install neovim
,或者你偏好的任何更小众的包管理器的相应命令。
译者注:
pacman
: Arch Linux 及其衍生版的包管理器。
apt
: Debian, Ubuntu 及其衍生版的包管理器。
dnf
: Fedora 及其衍生版的包管理器(是yum
的后继者)。Debian12使用apt安装的Neovim版本低于最新版Lazyvim需求的0.9.0,所以自己在官网安装新版Neovim。
不过,有些发行版自带的 Neovim 版本可能极其过时。如果你想要 nightly 版本,你可能需要在 neovim/neovim
GitHub Releases 页面上查找说明,或者需要深入研究你的发行版的文档。
你还需要安装一个 C 编译器,以防你的 Linux 发行版万一没有自带。对于大多数发行版,只需安装 gcc
包应该就可以了。
译者注:我推荐用以下命令一步到位安装完整开发环境,当然只安装gcc也行。
Debian/Ubuntu 系列:
sudo apt install build-essential
Arch Linux/Manjaro 系列:
sudo pacman -S base-devel
RHEL/CentOS/Fedora 系列:
sudo dnf install gcc
openSUSE 系列好像是
sudo zypper install -t pattern devel_basis
,小蜥蜴需要自己找饭吃。
1.7. 试用一下原生 Neovim (如果你想的话)
一旦你安装了 Neovim,你可以通过在你几节前安装的终端中简单地输入 nvim
(或 nvim <文件名>
来打开特定文件)来试用它。如果 Neovim 安装正确并且在你的路径(PATH)中,你会得到一个视觉上毫无吸引力的编辑器,看起来像是从 90 年代写的东西 fork 出来的。
所以,至少它很直观?
不幸的是,你现在被困住了。为了帮你省去疯狂 Google 搜索“如何退出 Vim”的麻烦,退出的命令是先按 Escape
键,然后输入三个字符 :q!
,最后按 Enter
键。整个序列因此是 <Escape>
<冒号>
q
<感叹号>
<Enter>
。
译者注: 解释一下这个命令:
<Escape>
: 确保你处于普通模式 (Normal Mode)。Esc键盘左上角那个按键。:
: 进入命令行模式 (Command-line Mode),允许你输入 Ex 命令。q
: 是quit
命令,意为退出。!
: 是一个强制修饰符。q!
的意思是“强制退出,即使有未保存的更改也退出”。如果你没有做任何修改,单独使用:q
也可以退出。
说真的,“如何退出 Vim”是 Google 搜索“How do I exit…”的前三大自动补全之一。显然,只有退出三星电视的 plus 模式和 MacOS 的全屏模式比退出 Vim 更不直观!在我们深入了解 vim 的心智模型和命令模式之后,我们就会明白为什么这个咒语能起作用。
作者注:如果你愿意,可以运行命令
<Escape>:Tutor<Enter>
来打开一个交互式文本文件,你可以在阅读和编辑的同时学习 Neovim 的基础知识。我确实建议在某个时候这样做,但现在可能不是合适的时机。Vim tutor 中的很多“常规”操作在使用 LazyVim 时是不同的(并且更好!)。本书的其余部分不假定你已经完成了 tutor 教程。
1.8. 安装 LazyVim
现在你已经让 Neovim 启动并运行了,让我们把它配置得看起来像是本世纪开发的。
安装 LazyVim 需要一些 git
操作。既然你在读这本书,我假设你是一名软件开发者,因此对 git
有一定程度的熟悉。
译者注:巧了,我这里也有一简单的Git教程 -> Git快速入门
安装 LazyVim 的 git 命令对于各种操作系统或多或少是相同的,尽管路径和环境变量略有不同。
1.8.1. 从干净的状态开始
如果你已经有 Neovim 配置,并且想在不丢失现有配置的情况下尝试 LazyVim,请设置 NVIM_APPNAME=lazyvim
环境变量。然后跳到下面的 克隆入门模板
部分,并将模板克隆到 ~/.config/lazyvim
而不是 ~/.config/nvim
。如果你想让这些更改永久生效,要么在你的 shell 启动文件中设置 NVIM_APPNAME
,要么将那个 lazyvim
配置文件夹重命名为 nvim
。
译者注:
NVIM_APPNAME
是一个环境变量,Neovim 会用它来决定配置、数据和状态文件的子目录名称。默认情况下,这个名字是nvim
,所以文件通常在~/.config/nvim
,~/.local/share/nvim
等位置。设置NVIM_APPNAME=lazyvim
会让 Neovim 去寻找~/.config/lazyvim
,~/.local/share/lazyvim
等目录,这样就可以同时保留多套 Neovim 配置。
首先,移除或备份所有现有的 Neovim 状态。如果你以前从未使用过 Neovim,这一步基本上是可选的,但我建议确保以下目录已被移除或移动:
清理:Windows (使用 WSL)、MacOS 和 Linux
移除或备份(使用 mv
代替 rm
进行备份)以下目录:
列表 1. Unix 清理命令
$ rm -rf ~/.config/nvim
$ rm -rf ~/.local/share/nvim
$ rm -rf ~/.local/state/nvim
$ rm -rf ~/.cache/nvim
译者注:
~/.config/nvim
: 主要存放用户配置文件(例如init.lua
或init.vim
以及其他lua/
或plugin/
目录下的配置)。~/.local/share/nvim
: 通常存放站点数据,例如插件、文档、undo 历史等。~/.local/state/nvim
: 通常存放会话信息、shada(共享数据)文件(包含寄存器、标记、历史记录等)。~/.cache/nvim
: 存放缓存文件,例如交换文件(swap files)、备份文件等。rm -rf
: 强制递归删除目录及其内容。mv <源> <目标>
: 移动或重命名文件/目录。例如mv ~/.config/nvim ~/.config/nvim.bak
可以将现有配置备份到nvim.bak
目录。
清理:Windows (不使用 WSL)
在 Windows 上,配置和数据文件夹的位置略有不同,但思路与 Unix 系统相同。只需使用 Powershell 命令代替 Unix 核心工具:
列表 2. Powershell 清理命令
# 将现有配置移动到 nvim.bak (备份)
$ Move-Item $env:LOCALAPPDATA\nvim $env:LOCALAPPDATA\nvim.bak -ErrorAction SilentlyContinue
# 将现有数据移动到 nvim-data.bak (备份)
$ Move-Item $env:LOCALAPPDATA\nvim-data $env:LOCALAPPDATA\nvim-data.bak -ErrorAction SilentlyContinue
译者注:
$env:LOCALAPPDATA
: Powershell 中引用LOCALAPPDATA
环境变量的方式,通常指向C:\Users\<用户名>\AppData\Local
。nvim
: 在 Windows 上,Neovim 的配置通常在此目录下。nvim-data
: 在 Windows 上,Neovim 的共享数据、状态和缓存通常在此目录下。Move-Item
: Powershell 中用于移动文件或目录的命令,这里用作备份。添加了-ErrorAction SilentlyContinue
以避免在目录不存在时报错。
1.8.2. 安装其他推荐的依赖项
我强烈建议安装 fzf
、lazygit
、ripgrep
和 fd
,LazyVim 使用它们来提供增强的 git、字符串搜索和文件搜索行为。大多数操作系统的包管理器都应该可以轻松安装这些工具。你可以在它们各自的 GitHub 仓库中找到更具体的安装说明:
译者注:
fzf
: 一个通用的命令行模糊查找器,非常快,可以用来交互式地搜索文件、历史记录、Git 提交等。lazygit
: 一个基于终端的 Git 图形化界面,可以让你更直观地执行常见的 Git 操作。ripgrep
(rg
): 一个非常快速的文本内容搜索工具,类似于grep
但通常更快,并且默认会尊重.gitignore
文件。fd
: 一个简单、快速且用户友好的find
命令替代品,用于查找文件和目录。
1.8.3. 克隆 LazyVim 入门模板
你将使用 git clone
命令下载入门模板并将其复制到 Neovim 的用户配置目录中,然后移除 .git
文件夹。
这个 starter 只是一个起点。所以你永远不需要从这个仓库拉取更改。相反,LazyVim 会为你管理自身的更新及其所有插件。这个 starter 是一个 git 仓库的唯一原因是方便 LazyVim 维护者维护。从你的角度来看,你只是下载了仓库的当前状态,不需要关心过去或未来的状态。
克隆 Starter 仓库:WSL、MacOS 和 Linux
在类 Unix 系统上,使用这些命令:
列表 3. Unix 克隆 Starter
$ git clone https://github.com/LazyVim/starter ~/.config/nvim
$ rm -rf ~/.config/nvim/.git
克隆 Starter 仓库:Windows (不使用 WSL)
在原生 Windows 上,使用这些命令(在 Powershell 中):
列表 4. Powershell 克隆 Starter
$ git clone https://github.com/LazyVim/starter $env:LOCALAPPDATA\nvim
$ Remove-Item $env:LOCALAPPDATA\nvim\.git -Recurse -Force
1.9. 启动面板 (Dashboard)
好了,你已经完成了本书最困难的部分,终于可以启动 LazyVim 了!使用和之前一样的终端命令:nvim
。
你会看到一阵忙碌的活动,因为 LazyVim 正在设置一切并下载它认为必不可少的插件。你可能会看到它编译并安装一堆 treesitter 语法文件;如果看到提示 “Show More”,使用 G
(即 Shift+g
)跳到末尾。
译者注: Treesitter 语法文件(Grammars)是针对特定编程语言的解析规则,需要编译成本地代码才能被 Treesitter 使用以提供精确的语法分析。
一切安装完毕后,你会看到一个窗口,里面总结了已安装的插件,这个窗口由一个名为 Lazy.nvim 的插件管理,我们稍后会讨论它。现在,当你看到 Lazy.nvim 屏幕时,可以按 q
键。该插件会将其解释为“退出 Lazy.nvim”,然后窗口会关闭。
现在你可以看到 LazyVim 的启动面板了,这是你每次启动 LazyVim 时首先看到的东西。它比原生 Neovim 的体验要友好一些:
图 1. LazyVim 启动面板
如你所见,有几个命令允许你通过单击单个按键与启动面板交互。当然,最重要的是退出键 q
!
这些选项大多不言自明,但我们将在后续章节中更深入地讨论其中一些。
1.10. Lazy.nvim 插件管理器
当你第一次打开 LazyVim 时,它会检查是否有可更新的插件,并在一个消息通知中给你一个概览,看起来像这样:
图 2. 插件更新通知
因为 Neovim 默认相当简陋,LazyVim 自带了大量有用的插件,开箱即用。而且它们很可能已经过时了,因为 Neovim 世界的插件开发速度快得惊人。
在很久很久以前,插件管理完全是手动过程。在不那么久远但仍属过去的时代,它由各种插件管理,这些插件能完成任务,但总感觉缺点什么。
然后出现了名为 Lazy.nvim 的插件管理器,由后来创建 LazyVim 的同一个人创建。不应将 Lazy.nvim 插件管理器与 LazyVim 本身混淆,尽管两者都由同一个人维护。Lazy.nvim 严格来说是一个插件管理器,而 LazyVim 是一个打包在一起的插件和配置的集合。其中一个插件就是 Lazy.nvim。
译者注: 再次强调:
- Lazy.nvim: 一个 Neovim 插件管理器,负责安装、加载、更新插件。
- LazyVim: 一个基于 Neovim 的预配置发行版,它 使用 Lazy.nvim 作为其插件管理器,并提供了一套精选的插件和优化配置。
Lazy.nvim 有大量炫酷的功能,最显著的是仅在需要时才加载插件(因此得名“Lazy”),这样你的编辑器启动速度就快如闪电。它还有一个漂亮的 UI 用于管理插件安装和更新。
你可以从启动面板直接按 l
键访问这个 UI,该按键在启动面板上标记为 Lazy
。这个标签也许应该叫 Lazy 插件管理器
会更清晰一点,但现在你知道 Lazy
是什么意思了,就不会忘记了。
如果你当前没有显示启动面板,你可以通过进入 Space 模式随时显示插件管理器。我们将在下一章详细介绍 Space 模式,但现在:首先确保你处于普通模式(Normal mode),检查活动窗口的左下角。如果不是,按 Esc
进入普通模式。然后按 Space
进入 Space 模式,接着按 l
调出 Lazy.nvim 插件管理器。
(别担心,这些快捷键在一周内都会成为你的习惯。)
Lazy.nvim 插件管理器界面看起来像这样:
图 3. Lazy.nvim 插件管理器
弹出的窗口叫做浮动窗口。你会在几种不同的情况下看到它们,通常是在需要处理交互式数据时。这个特定的浮动窗口有它自己的一套快捷键。这些快捷键列在顶部,注意它们都是大写的,所以调用它们时需要使用 Shift
键。
通常,我唯一使用的 Lazy.nvim 快捷键是 S
,代表 Sync
(同步)。这相当于在一个动作中运行安装、清理和更新。它确保实际安装的插件版本与 LazyVim 配置中指定的版本完全一致。
所以当“插件更新”通知弹出时,只需按 Space-l
然后按 S
,等待同步完成。然后按 q
关闭 Lazy.nvim 插件模式和浮动窗口,返回你之前正在做的事情。
1.11. 关于管理点文件的一点说明
如果你在多台不同的计算机上工作,你会很快发现你不想在所有计算机上都单独设置你的 LazyVim 配置。LazyVim 没有像 VS Code 的“设置同步”那样的等效功能,尽管存在这样的插件。
我推荐的替代方法是将你的配置文件存储在一个 git 仓库中。你可能会发现还有其他一些文件你也想放在里面,比如你的终端配置文件、你的 .gitconfig
以及 .zshrc
/ .bashrc
/ .config/fish/config.fish
(取决于你使用的 shell)。
译者注: 点文件 (Dot Files) 是 Unix-like 系统中文件名以点
.
开头的文件或目录。它们通常用于存储用户配置,默认情况下被ls
等命令隐藏。常见的例子有.bashrc
,.zshrc
,.vimrc
,.gitconfig
等。使用 Git 管理这些文件可以方便地在不同机器间同步你的开发环境设置。
如果你使用 GitHub Codespaces,你可能已经在使用 git 管理一些点文件了。如果没有,我个人的建议是遵循 Atlassian 博客上那篇优秀的博文 Dotfiles: Best way to store in a bare git repository 中的建议。
译者注: 使用裸仓库 (bare git repository) 管理点文件是一种流行的技术,它允许你直接在你的主目录 (
~
) 下跟踪配置文件,而不需要将所有配置文件移动到一个单独的目录中。
在像 LazyVim 这样的发行版出现之前,人们通常会将他们的 Vim 配置存储在公共仓库中,并互相借鉴想法。这种做法并未完全消亡,你可以在 GitHub 的 dusty-phillips/dotfiles 仓库中找到我自己的点文件。
1.12. 总结
在本章中,我们简要讨论了 Vim、Neovim 和 LazyVim 的历史,以及它们在今天仍然具有重要意义的原因。然后我们介绍了 GPU 加速终端和 Nerd Fonts 的重要性。
我们弄清楚了如何在你的操作系统下安装 Neovim 及其依赖项,最后,从它的 starter 模板安装了 LazyVim。
在下一章中,我们将讨论 Vim 的核心特性:模式编辑,并深入探讨你可以用键盘在 LazyVim 中做的许多事情。