第一章. 介绍与安装
约 1985 字大约 7 分钟
2025-01-27
如果你对模态编辑(modal editing)的强大功能感到好奇,同时又因为入门教程也有大量的配置而感到害怕或无聊,那么这本书将会非常适合你。
我猜你是一个 Visual Studio Code 用户(一个我用了几年的很棒的编辑器),也可能是从其他集成开发环境和代码编辑器转向模态编辑的。你可能之前已经听说过 Vim 了,而现在,你想尝试一下它。
1.1 为什么选择 vim
Vim 有一个非常悠久的历史。它是在 90 年代初期作为对 70 年代编写的(更)古老的 Vi 编辑器的改进而创建的。名称“Vim”实际上代表“Vi,improved”。它的前身 Vi 是“Visual”的缩写,因为它是对更早(1971 年)的非可视行编辑体验称为 ed 的迭代。
相关信息
有趣的是,ed
在现代 Unix 系统上仍然可用,如果您使用 MacOS 或 Linux 环境,您可能可以通过在任何终端中键入ed
来访问它。(如果您犯了尝试的错误,Control-D
将再次让您退出)。您现在对ed
的了解与我一样多,相信我,您不想知道更多。
您可能也熟悉另一个名为ed
的迭代版本,称为sed
,即流编辑器。直到今天,它仍然被用于在 shell 管道中修改文本。
ed
命令还被扩展为创建另一个行编辑器,称为 ex
,实际上已经不再被广泛使用,除了作为 Vim 的子模式。事实上,如果您安装 Neovim 并在命令行上键入 ex
,您将得到一个非常受限的 Neovim 实例,只支持 ex
命令。
所以这是一个相当庞大的家族谱,但仅凭血统本身并不能很好地说明质量,任何第四代的人都可以证明这一点。
使用任何一个编辑器都有很多原因,但是 Vim 突出的原因有:
有益健康
这对我来说很重要。在我早期的职业生涯中,我经常使用 Vim,但像许多开发人员一样,2015 年推出 VS Code 后我转而使用它。我在键盘前花了很多时间,到了 2020 年,我因 RSI 而无法工作,花了六个月完全靠语音编码(一篇关于这个主题的博客文章让我比预期更有名)。一个朋友建议我切换回模态编辑,对我来说产生了巨大影响。绝大多数 Vim 按键不需要你用同一只手按住多个键,这真的会加重腕管综合症
注
RSI大概是严重的腱鞘炎吧,译者换 vim 主要是为了少用方向键。
性能
大多数集成开发环境都有某种“vi 仿真”层或插件,允许您在不完全切换到新编辑器的情况下获得模态编辑的一些健康好处。但等待 VS Code 启动并加载您熟悉和喜爱的所有扩展已经成为许多人的冥想练习(或者是刷刷短视频的好机会)。相比之下,当我加载我的 LazyVim 配置时,它会友好地告诉我加载所需的时间:56.98 毫秒。对于我这双慢慢的人类眼睛来说,这是瞬间的。
注
vim 玩家最喜欢的优化启动时间和展示启动时间 想起在 reddit 看到的一个贴子。“哦,我的期末考一塌糊涂,但你猜怎么着,我 vim 启动只用 20 ms 了。
提高开发效率
这是有争议和主观的。任何工具的好坏取决于使用它的技术人员,我确实认识一些优秀的编码人员,他们可以在他们的 VS Code、Emacs 或 JetBrains 配置中游刃有余。不过,我相信,一个精心调整的 Vim
配置可以超越它们中的任何一个。
注
译者注:vim 并不能帮你,我还看到许多人入了 vim,学了一个月,vim配置了29天。 不过 vim 能让你享受编程这个过程, vim 的各种逻辑相当统一,熟悉了之后会相当舒适。
开放生态系统
自纳德拉掌舵以来,我对微软如何对待开源软件表示非常尊重,但 VS Code 显示出越来越多的专有锁定迹象(特别是其 ai 集成)。相比之下,Neovim 生态系统是一个充满活力的开放社区,每周都会出现创新插件,这些插件在 VS Code 中永远不会出现。
1.2. 为什么选择 Neovim
如果您决定使用 Vim,您很快会发现有两种现代变体:Vim 和 Neovim。两者都是那个原始开源的90 年代 Vim 代码的直接后代。Neovim 于 2014 年从 Vim 分叉出来,旨在重构和现代化代码库和功能集。
两者都在积极维护,并且都能让人感觉到精致和现代,尽管需要一些配置才能达到这种感觉。它们各自拥有非常强大的插件生态系统,但 Neovim 有一个杀手级的特性:它引入了 Lua 编程语言用于插件开发(和配置),也支持vim使用的本地 VimScript。
就 vim 而言,使用 Lua 并没有下 Neovim 比 Vim 更好。区别在于很多 Vim 的插件可以运行在 Neovim 上,但 Neovim 上用 Lua 写的一些插件并不能在 Vim 上运行。
本书所选的版本在标题已经为你揭示, LazyVim 是一个仅为 Neovim 分发的版本。
LazyVim 介绍
Vim 和 Neovim 的主要缺点是,虽然它们有能力提供与任何其他集成开发环境一样(甚至更好)的现代编辑体验,但你刚打开他们的时候并不是这样。Vim 有着长期与 vi 保持兼容的传统,Neovim 也只是在一定程度上偏离了这种传统。当你首次安装 Neovim 时,你只会得到相到一般的代码编写体验。
当我在2020年回到 Vim 后,之前已经习惯了VS Code为编辑器生态系统带来的出色功能,我花了两周的时间才将我的配置调整到我想要的状态,之后我不断地对其进行调整数月。我的Vimscript代码大约有300行,后来我将其转换为大约250行的Lua代码。公平地说,我通常是一个重度定制者,我的VS Code配置实际上比这两者中的任何一个都要长!但我很乐意承认,VS Code的开箱即用体验要好得多。
我找到了几个 Neovim 的分发版本(预设配置)。我不会进行详细的比较,但 Lazyvim 明显是最佳选择,主要是它在开箱即用的基础上,还相对方便的可以让你自定义配置。
明确来说, Lazyvim 是 Vim。俩者的编写体验是一样的。它并不像 Neovim 一样是一个 Vim 是迭代或新版本。Lazyvim 更像是一种思想;它始于对现代开发中最佳插件配置的共识,并通过配置使这些插件能够很好地协同工作(在手动管理编辑器配置时,避免不同插件的键位冲突是一个主要的难点之一)。”
如果你带着这种心态去使用 LazyVim,相信这种体验会比你之前使用的任何编辑体验都要好,如果你接受需要重新训练一些键盘肌肉记忆,你会发现它的设计非常周到。根据我的经验,这正是 2020 年的模态编辑体验所应有的样子。