1. :help vimtutor
2.:help usr_toc
术语约定:如果没有特殊说明,本文中提到的 VIM 指的是图形界面的 gvim 与字符界面的 vim 的统称,gvim 专指图形界面,vim 专指字符界面。
1 让 gvim 正常工作
VIM 是一个非常强大的编辑器,可惜的是,无论是 Windows 还是 Linux,gvim 都存在一些小故障,令第一眼看到它的初学者感到非常不愉快。为了不让更多的初学者在第一次接触 gvim 时被它吓跑,我在这份教程中首先解决 gvim 令人感到不快的一些小问题,希望能让更多的用户平滑地过渡到 gvim 的环境中来。
VIM 的安装很简单,Windows 下只要双击安装程序,一路 next 下去就可以了(注意到选择安装组件的时候请选择全部组件,默认安装方式下会少装几个有用的小东西)。Linux 下各个发行版安装方式都不一样,但总体来说都不难装。因此,本文假设你已经成功地安装了一份 VIM,不再介绍 VIM 的安装步骤。如果你用的是 Ubuntu Precise 并且搭配了 IBus 输入法的话,可能会遇到些不愉快的事情,可以参考这篇文章。
1.1 屏蔽系统自带的 .vimrc
VIM 是一个高度可定制的编辑器,它通过配置文件 .vimrc (Windows 下是 _vimrc)来定制程序的各种行为。如果你没有编写 .vimrc 的话,它会使用系统自带的一份默认配置文件。可惜的是,系统默认的配置文件存在种种很令人不快的问题。例如 Windows 下加载 mswin.vim 带来的困惑,和 Linux 下无法处理中文等等故障。因此,我们在安装了 VIM 之后,第一件要做的事情就是创建自己的 .vimrc。只要编写一份你自己的配置文件,VIM 便不会再加载系统自带的配置文件。
如果你是 Linux 用户,请在你的 $HOME
目录下放置一个空文件,文件名叫 .vimrc
,方法如下:
$ touch .vimrc # 使用 touch 命令创建一个空白文件
如果你是 Windows 用户,请在你的 %HOME% 目录下放置一个空文件,文件名叫 _vimrc
。步骤如下:
现在,我们已经创建了一份自己的 .vimrc。在之后的部分里,我们将逐渐往 .vimrc 里添加一些属于我们自己的内容,得到一份真正属于自己的配置。
1.2 该节已删除 (原“Linux 下的中文处理”)
之前在默认 zh_CN.GB18030 的 Linux 发行版下,旧版本的 GVim 有 bug,无法正常处理中文,需要进行一些配置。而现在绝大部分 Linux 发行版都默认 UTF-8,而 GVim 的 bug 也修复了,因此这一节不再有存在的必要了。如果你的 Linux 是 zh_CN.GB18030 且你的 Vim 有那个 bug,你应该考虑的是升级系统,而不是解决这个问题。
1.3 选择自己喜欢的字体
如果觉得 gvim 的字体显示效果不好的话,不妨重新选择一个你喜欢的字体。点“编辑”→“选择字体”,然后在字体列表中选择一个你最中意的字体和字号,确认后就可以了。由于 gvim 只能使用等宽字体,因此对话框中列出的字体可能比你系统里安装的字体要少得多,请慢慢选择,耐心选,直到选出最满意的字体为止。选择完毕后,先按几下 ESC 确认处在 Normal 模式下,然后输入这条命令:“:set guifont?”(这里的问号代表询问,不要漏写),回车后 gvim 屏幕最下方会显示出你当前所用的字体的名称,例如在滇狐这里输入这条命令后出来的结果如下:
请记住这里输出的字体名称,如果必要的话请先暂时把它写下来备用,之后我们需要将它写入配置文件。
1.4 设置多语言编码自动识别
完成上述配置之后,VIM 应该已经很适合“人类使用”了。试着通过菜单或工具栏打开几个文本文件试验一下,如果不出什么意外的话,你也许会发现,打开的绝大部分文本文件中,中文都是乱码。是的,我们还没有配置多语言编码的自动识别。确认当前输入法处于英文输入状态,按若干下 ESC 以确保 VIM 处在 Normal 状态,接着输入以下命令:
回车后再打开几个文本文件试试,应该已经没有乱码出现了。关于这句命令的详细原理,可以参考这篇文章。
1.5 将配置写入 .vimrc
之前我们通过一系列命令,将 gvim 调整为一个比较适合我们使用的编辑环境。然而,gvim 是不会自动记住我们这次所做的调整的。下次再打开 gvim 时,它又变回了原先的模样。如果我们能够把刚才所输入的命令记录下来,下次再打开 gvim 的时候把那些命令再执行一遍,不就可以让 gvim 每次都保持我们调整过的最佳工作状态了么?对,这就是配置文件 .vimrc 的作用。
刚才我们已经创建了一个全空的配置文件 .vimrc,现在我们往配置文件中写下我们的自己的配置代码。.vimrc 的格式很简单,只要将刚才输入的所有冒号开头的命令,依次写入 .vimrc 即可,写到配置文件里的时候就不要写冒号了。VIM 启动的时候会依次执行这些命令。另外,配置文件中双引号开头的行表示注释,在 VIM 读入 .vimrc 的时候,这些行不会被执行。因此你可以使用注释在 .vimrc 中写上一些说明文字,为自己将来阅读配置文件提供方便。再次复习一下前几节的内容,然后写下自己的 .vimrc,你现在的 .vimrc 可能是这个样子的:
" 设置字体。
" 字体名称可以通过前一节介绍的语句获得,
" 如果字体名称中含有空格,
" 需要在空格前面加上一个反斜杠,如下:
" 这是 Linux 风格的字体设置语法
set guifont=Bitstream Vera Sans Mono 9
" 这是 Windows 风格的字体设置语法
set guifont=Bitstream_Vera_Sans_Mono:h9:cANSI
提示:如果对 VIM 的基本操作一无所知的话,现在你可以不妨先使用其它文本编辑器编写 .vimrc,如记事本等。当然,如果你愿意现在就尝试着使用 gvim 编辑这个文件的话,也是非常值得鼓励的。
2 入门学习
2.1 vimtutor
vimtutor 是一个非常适合初学者学习 VIM 的简易教程。教程中说阅读一遍这个教程需要 25 到 30 分钟,其实很少有人需要这么长时间。一般情况下,如果精力集中的话,15 到 20 分钟足以将这份教程从头到尾阅读一遍。每天花 15 分钟时间将这份教程从头到尾看一遍,平时进行纯文本编辑的时候,尽量“逼迫”自己多使用 gvim,花一周时间,就可以比较熟悉 gvim,能够用它完成普通的编辑工作了。
Linux 下的 vimtutor 是在终端中打开的,如果终端字体配置正常,一般情况下不会出现什么太大问题。Windows 下的 vimtutor 会弹出一个 gvim 窗口,大部分情况下也没有什么大问题,在少部分机器上汉字会出现乱码。如果 vimtutor 在你机器上显示不正常的话,请先输入“:set encoding=cp936”,回车,然后再点击“编辑”→“选择字体”,选择一个支持中文的字体,如“新宋体”等,确认后,教程的显示应该就恢复正常了。
如果你以前从来没有使用过 VIM 的话,请先花 15 分钟时间阅读一遍 vimtutor,然后再继续往后阅读滇狐教程。之后的部分再出现 vimtutor 里介绍过的术语时,滇狐将不再作解释。
注意:为了保证 vimtutor 在任何机器上运行效果都相同,不会被本地设置的键绑定所干扰,vimtutor 运行时不会读取任何用户自定义的配置文件 .vimrc。因此如果你之前做的设置在 vimtutor 里没有效果的话,请不要太过于惊慌。
2.2 VIM 快速编辑示例
学习 VIM 其实是一件比较辛苦的事情,刚开始的时候可能比用记事本还慢。因此,在学会 VIM 之前,我们有必要先通过一些例子坚定一下信心。
VIM 的一大特点就是“快”。这里列举了一些使用 VIM 能够快速完成,而一些其它编辑器难以胜任的功能,体现 VIM 的优越性。
3 编写自己的 .vimrc
作为一个高度可定制的编辑器,为 VIM 编写适合自己使用的 .vimrc 是有必要的。这里给出了一个适合初学者使用的 .vimrc 框架,以及每一项设置的详细解释,希望能给大家带来一些帮助。
这里是滇狐自己的 .vimrc,里面有很多根据滇狐自己的习惯所做的设置。如果你希望在自己机器上使用的话,需要根据你的习惯做一些修改。
3.1 滇狐的 VIM 入门教程
vimtutor 虽然非常简单,但涵盖的内容太过于有限;用户手册虽然内容非常全面,但如此巨大的一个大部头,任何一个刚接触 VIM 的人都会被它吓到。针对这个问题,滇狐编写了一份 VIM 入门教程,希望能给大家带来一些入门上的便利。
4 VIM 进阶
通过一个星期的努力,把 vimtutor 中的基本命令都熟练掌握后,使用 VIM 进行简单快速的编辑应该已经没有什么问题了。接下来,可以每天抽出半个小时时间,在半个月左右内把 VIM 用户手册大概阅读一遍。在 VIM 中 Normal 模式下输入“:help usr_toc”即可看到用户手册,如果更习惯看中文版的话,可以到这里下载。
记住,没有必要记住手册中的所有命令,只要大概知道有哪些命令,需要用的之后知道到哪一章去查就可以了。常用的命令查过几次之后自然而然就能够记住,不常用的命令记下来也没有什么意义。
另外,可以根据自己的需要,下载一些常用的 VIM 插件,方便自己的日常生活与工作。这里有滇狐整理的 VIM 常用插件推荐,感兴趣的话可以看看。
如果对 VIM 还有更加浓厚的兴趣的话,可以试着自己编写 VIM 插件,不过那些内容就不是这篇文章能够涉及的了。祝大家好运!Happy VIMming~