跳到主要内容

第0章 请先阅读

为什么写这本教程

有很多途径可以学习Vim,vimtutor就是一个很好的途径,另外还有Vim自带的帮助手册(:help查看)包含了所有需要的参考信息。

但是在日常使用中,对于绝大部分用户的需求而言,vimtutor讲得太浅不能满足需要,而:help所提供的信息又有很多是用不上的。本指南尝试在两者之间搭一座桥,仅重点介绍关键功能,使您尽可能在最短的时间内掌握Vim中最有用的知识。

绝大部分情况下,您并不会使用到Vim100%的功能。您可能仅仅需要掌握其中20%就可以成为一名娴熟的Vim用户。本指南将为您展示Vim中最有用的功能。

本指南带有作者强烈的个人观点。它涵盖了作者在使用Vim的过程中经常用到的技巧。章节按照作者认为的,最适合初学者最符合逻辑的顺序排列。

本指南包含大量示例。当学习一个新技能时,示例是不可缺少的,大量的示例可以更有效的巩固所学概念。

部分读者可能好奇为什么要学习Vimscript?我刚使用Vim时,仅仅满足于知道如何使用Vim。随着时间推移,我越来越需要使用Vimscript去写一些自定义命令,以满足特殊的编辑需要。在您使用Vim的过程中,您早晚会接触Vimscript。所以为什么不早点学呢?Vimscript是一门小巧的脚本语言,仅需要本指南的四个章节,您就可以学到它的基础知识。

您当然可以继续使用Vim而不了解任何Vimscript知识,但了解它可以使您更加擅长Vim。

本指南同时为初学者和高级Vim用户撰写。它从宽泛而简单的概念开始讲,最后落在特殊的、进阶的技巧上。如果您已经是一名进阶用户,我还是鼓励您从头到尾阅读本指南,因为您将了解到一些新的东西。

如何从其他编辑器过渡到Vim

学习Vim的过程虽然很困难,但很具有成就感。有两种方法去学习Vim:

  1. 强制转换地使用Vim
  2. 循序渐进地使用Vim

强制转换为Vim意味着从现在开始只使用Vim,停止使用您以前使用的任何编辑器/IDE。本方法的缺点是在前一周或两周,您将面临编辑效率的严重下降。如果您是一名专职程序员,本方法可能不太行得通。这也是为什么对于大部分读者而言,我认为过渡到Vim最好是循序渐进地使用Vim。

想要循序渐进地使用Vim,应该在最开始的两个星期,每天花1个小时使用Vim作为您的编辑器,而剩下的时间您可以继续使用其他编辑器。许多现代编辑器都带有Vim插件。我刚开始时,每天花1个小时使用VSCode的Vim插件。逐渐地,我增加使用Vim插件的时间,直到最终完全使用Vim插件。记住,这些插件仅仅模拟了Vim中的一小部分功能。要想体验Vim中比如Vimscript、命令行命令(Ex模式)、以及外部集成命令的强大功能,您必须使用Vim自身。

有两个关键节点驱使我开始100%地使用Vim:一是当我理解到Vim命令的语法结构(看第4章)时。二是学会fzf.vim插件时(看第3章)。

第一个,当我了解了Vim命令的语法结构时。这是一个决定性时间节点,我终于理解了Vim用户以前讨论的是什么。我并不需要去学习上百个命令,而仅需要学习一小部分命令,然后就可以凭直觉将它们串起来去做很多事情。

第二个,fzf插件我经常使用,该插件具有类似IDE的模糊文件查找功能。当我学会在Vim中如何使用该功能时,我的编辑效率极大提升,从此再也回不去了。

尽管每一个程序都是不同的。但仔细一想,您会发现您所偏爱的编辑器/IDE总有1个或2个功能是您频繁使用的。也许是模糊查找,也许是跳转至定义,或是快速编译,但不管是什么,快速确认这些功能,然后学会如何在Vim中实现它们(一般情况下Vim都能办到)。您的编辑速度将会获得一个巨大的提高。

当您使用Vim可以达到您原来50%的效率时,就是时候完全使用Vim了。

如何阅读本指南

本指南注重实效性。为了更好地在Vim中工作,您需要锻炼您的肌肉记忆,而不是大脑理解。

想学会骑自行车,您并不需要首先阅读一本骑车教程。您需要做的是骑上一辆真正的自行车,然后在实践中探索。

您需要输入每一条本指南中提到的命令。不仅如此,您还需要不断地重复,然后尝试命令的不同联合方式。想了解您刚学到命令具有什么功能,:help命令和搜索引擎是您最好的帮手。但您的目标并不是去掌握关于一条命令的全部信息,而是能够本能地、自然地使用该命令。

我本想尽可能地使本指南的知识点呈线性化展示,但有些概念还是不得不违反顺序。比如在第1章,我就提到了替换命令(:s),这个知识点要到第12章才讲。作为补救,不管是什么概念,如果被提前讲到了,我将为它提供一个简短的说明,原谅我吧。

更多帮助

关于Vim帮助手册有一个额外的小技巧:假设您想了解关于Ctrl-p在插入模式时的功能。如果您仅仅查找:h CTRL-P,您将被导航到普通模式下关于Ctrl-P的介绍页面,这并不是您想要的信息。在这种情况下,改为查找:h i_CTRL-P。添加的i_表示插入模式。注意它属于哪个模式。

语法

大部分命令或涉及的代码片段都使用代码样式(like this)。

字符串使用双引号包括("like this")。

Vim命令可以使用简写。比如,:join可以简写为:j。本指南全文中,我将混合使用简写和全称。对于本指南不经常使用的命令,我将使用全称。而对于经常使用的命令,我将使用简写。我为这不一致性道歉。总之,不管什么时候当您看到一个新命令,记得使用:help查看它的简写。

Vimrc

在本指南的很多地方,我将提到vimrc选项。如果您是初学者,可以把vimrc看做一个配置文件。

Vimrc直到第21章才讲。为了保持清晰,我将在这里简要的介绍如何配置Vimrc。

假设您需要设置number选项,即显示行号(set number)。如果您还没有vimrc文件,就创建一个。它通常位于根目录,名字为.vimrc。根据您的操作系统,该位置可能不同。在macOS,我将它放在~/.vimrc。要查看您的vimrc文件应该放在哪里,查看:h vimrc

在vimrc文件内,添加一行set number。保存(:w),然后激活这一配置(:source %)。您将会在每一行的的左侧看到行号。

另外,如果您不想永久配置一个选项,您可以在Vim命令行使用set命令,输入:set number。这种方法的缺点是设置是临时的。当您关闭Vim,该配置选项将消失。

因为我们学的是Vim而不是Vi,有一个设置您必须启用,这就是nocompatible选项。在您的vimrc文件中添加set nocompatible。如果启用compatible选项,许多Vim特有的功能将会被禁止。

一般而言,不管什么时候只要有一段内容涉及vimrc选项,只需要将该选项添加到vimrc中就好了,然后保存并激活相关选项。

未来计划,错误,问题

期待未来有更多的更新。如果您发现任何错误或有什么疑问,请随意提交。

我计划近期再发布一些更新章节,敬请关注。

更多关于Vim的技巧

要了解Vim更多的信息,请关注我的推特(需墙)。@learnvim.

感谢

感谢Bram Moleenar编写了Vim,没有Vim就不会有本指南。感谢我的妻子当我编写本指南时表现的耐心和支持。感谢所有的贡献者contributors,感谢Vim社区,还有很多其他没有提及的人们。

谢谢,您们使得这件工作更加有趣。:)