第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:
- 强制转换地使用Vim
- 循序渐进地使用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社区,还有很多其他没有提及的人们。
谢谢,您们使得这件工作更加有趣。:)