Linux探索之旅 |Vim岂是池中物,宝剑锋从磨砺出

作者 谢恩铭
公众号「程序员联盟」(微信号:ProgrammerLeague )

原文:http://www.jianshu.com/p/2f9ab65776d4

《Linux探索之旅》全系列

内容简介


  1. 前言
  2. 安装Vim
  3. Vim的各种编辑模式
  4. 基本操作(移动,写入,保存,等等)
  5. 标准操作(复制,粘贴,撤销,等等)
  6. 高级操作(分屏,合并,查找,等等)
  7. 配置Vim
  8. 总结
  9. 第五部分第二课预告

1. 前言


上一课是 Linux探索之旅 | 第四部分测试题

终于来到【Linux探索之旅】的第五部分了。
在这个部分里,我们要把前面四部分所学的知识总结起来,并学习新的知识:Shell脚本。

Shell脚本是一个整合在Linux系统里的“小”编程语言。它是系统的重要元素,我们不得不学习。

然而,要编写程序,我们需要使用一个更配得上“编程”这个名词的文本编辑器。

虽然我们已经学习了Nano这个文本编辑器(Linux探索之旅 | 第二部分第六课:Nano文本编辑器和终端配置),但是我们也说过,Nano比较基础,要“傍大腿”就要傍肥美多汁的。

因此,这一课我们先来学习一个编辑器中的神器:Vim。

在Linux文本编辑器的江湖中,有两件上古流传的“神器”:

  • Vim : Vi文本编辑器的进阶版,是Vi iMproved的缩写,表示“改进了的Vi”。Vi非常流行,在大多数基于Unix演进的操作系统中一般是默认安装的,Linux便是其中之一。Vim从名字即可知道比Vi编辑器更加先进。

  • Emacs : 著名的开源先驱Richard Stallman(Linux探索之旅 | 开宗明义+第一部分第一课:什么是Linux?中介绍过这位大牛,是GNU项目的奠基人)所开发的文本编辑器(后来有很多人参与改进)。一般没有默认安装在Linux系统中,但是可以用apt等包管理软件轻松安装。Emacs可以安装很多插件,做很多事情,比如浏览网页。听音乐,看视频,等等。基本你想得到的都可以做,除了不能当你女朋友…

这两件“神器”也引发了追随者的派别之争,经常可以看到这两个门派的粉丝(咦,我们这是古装剧啊,怎么出现粉丝了。好吧,穿越回现代)“掐架”,硬要说明自己拥护的编辑器比另一个好。搞得选择文本编辑器像选择信仰一般(是的,我知道,这些crazy coders(疯狂的程序员),小编可是很理智的程序员好嘛~ ... 真的吗?)。

但不可讳言,选择一个自己惯用的文本编辑器确实很重要,因为你需要不断用这个神器打怪练级才能提高。一开始要是选错就不好了,万一不小心练了“辟邪剑谱”…

一般我们很少看到有人两种神器都练的。不过小编练了两种(闲得发慌型),不过说实话更偏爱Emacs。

小编已经写过一篇文章专门介绍Emacs了:程序员小助手 | Emacs,最强编辑器,没有之一
我知道这个题目有点撼人,不过只是为了娱乐效果,不必在意这些细节... 没有最强编辑器,只有最适合你的编辑器。
但你也不要拿记事本这样的低效率软件出来跟我说好嘛,谢谢~

所以在【Linux探索之旅】里我们就只介绍Vim了。 下一课我们才开始Shell之旅。

2. 安装Vim


Vim还是Emacs?Emacs还是Vim?宝宝好纠结…

但是你会说:小编你说了上面这些,对我选择Vim还是Emacs的决定并没有什么用啊。

好吧,那我就给一个比较实际的建议:
[尽量用你身边的Linux高手或同事或同学朋友用得最多的那个文本编辑器。
因为你们经常要交流,而且身边的朋友可以给你使用的更好建议,或者推荐一些技巧和插件什么的。]

在小编的情况,我在法国,任职过的几个公司的大部分同事都是用Vim的,小编也一直用Vim。但之前在法国Kuantic公司工作时,技术老总“强制”每个人用Emacs(我晕… 法国不是崇尚“自由,平等,博爱”吗…),然后小编只好去学了Emacs,并且竟然喜欢上了Emacs... 所以现在Vim和Emacs都用。

安装并启动Vim


在大部分Linux发行版中,Vim是默认安装的。但是不保证有个别Linux发行版没有默认安装Vim(比如Ubuntu中没有默认安装Vim)。因此我们还是说一下Vim如何安装。

安装Vim,只需要在终端中输入以下命令:

sudo apt install vim

或者

sudo apt-get install vim

顺便提一下apt和apt-get的区别:
这个页面有以下陈述:
"APT is a vast project, whose original plans included a graphical interface. It is based on a library which contains the core application, and apt-get is the first front end — command-line based — which was developed within the project. apt is a second command-line based front end provided by APT which overcomes some design mistakes of apt-get."
翻译成中文大致意思是:
“APT是一个大型项目,最初的计划包含了开发一个图形界面。它是基于一个库,这个库包含了核心应用,apt-get是第一个基于命令行的前端(apt-get是在APT这个项目中被开发的)。apt是第二个基于命令行的前端,也是在APT项目中被开发的,它修正了apt-get的一些设计错误。”

说实话,上面这段英文看得我云里雾里。不过简而言之,apt和apt-get大致来说很相似,许多命令也是相同的,不过apt比apt-get更优一些。

安装完Vim之后,我们只需要运行以下命令就可以启动Vim了:

vim

当然了,如果你输入vi,那么运行的会是vi编辑器。但是我们肯定更推荐vim啦。

vimtutor : Vim的教程程序


对于新手,Vim的开发者们也很贴心,它们在Vim中内嵌了一个教程小程序。

这个程序只需要输入以下命令就可以执行:

vimtutor

vimtutor是vim和tutorial的缩写,tutorial是英语“教程”的意思,因此,vimtutor就是“Vim教程”的意思。

如果你输入vimtutor显示没有此命令,那么你可以安装vim-common这个包。不过一般vimtutor都已经随Linux发行版安装了。运行后如下:

如果你英语好,其实基本的Vim操作通过这个vimtutor的程序已经可以练习并掌握,因为它其实就是运行vim程序,然后打开了一个预先定义好的帮助文档。你可以在里面“打怪升级”。

一般跟着这个vimtutor练手,大概30分钟就可以完成了。完成后你对Vim的操作就有了基本认识。当然了,这个教程只是入门,不可能介绍Vim的所有元素和可能性。

要退出这个Vim教程,只需要输入:

:q

也就是“冒号+小写的q”(q是quit的首字母,是英语“退出”的意思),再按回车,就退出了。

3. Vim的各种编辑模式


首先我们运行Vim。之前我们已经演示过了,只需要在命令行输入以下命令:

vim

Vim就会乖乖地运行起来,如下图所示:

Vim说到底是一个程序,或者说是一个软件。但是Vim不像一般我们熟悉的文本编辑器那么容易上手。例如Windows中的记事本,一打开即可以编辑文字,点击保存即可保存。

当时我入门Vim花了点时间,相信对于大家来说,也需要一点“磨合期”。

刚开始接触Vim,如果我们不解释什么的话,你也许会迷失方向。甚至,你可能连怎么退出Vim都不清楚(别笑,我第一次也碰到这个情况)。

要知道,Vim有三种不同的工作模式:

  1. 交互模式:Interactif Mode。也有称之为命令模式(Command mode)的。这是Vim的默认模式,每次我们运行Vim程序的时候,就会进入这个模式。在这个模式中,你不能输入文本(是的,我知道,这有点不符合文本编辑器的“一贯作风”)。因此,别乱按键盘上的字母,你也许会把情况搞得一团糟。交互模式是很强大的,它可以让我们在文本间移动,删除一行文本,复制粘贴文本,跳转到指定行,撤销操作,等等。你在键盘上按键也许会触发特定操作(按下u这个字母键,就是撤销最近的一次操作。因为u是undo的首字母,是英语“撤销”的意思)。

  2. 插入模式:Insert Mode。这就是我们熟悉的文本编辑器的“一贯作风”。我们输入文本,文本就被插入到光标所在之处。为了进入这个模式,有几种方法,最常用的的方法是按字母键i(i是insert的首字母,是英语“插入”的意思)。为了退出这种模式,只需要按下Esc键(一般在键盘左上角)。Esc是escape的缩写,是英语“脱离,逃脱”的意思。

  3. 命令模式:Command Mode。也有称之为底线命令模式(Last line mode)的。这个模式下,我们可以运行一些命令,例如“退出”,“保存”,等等。也可以用这个模式来激活一些Vim的配置(例如语法高亮,显示行号,等等)。甚至我们还可以发送一些命令给终端命令行,例如 ls,locate,cp,等等。为了进入这个模式,需要首先处于交互模式(Interactif Mode)下,然后按下冒号键(在一般的键盘上是要按下Shift键+分号键)。输入命令后,再按回车,就会执行此命令。执行命令后,就又回到交互模式了。

小结一下:
Vim拥有三种模式:交互模式,插入模式,命令模式。一开始启动Vim的时候,默认是进入交互模式的。这三种模式中,我们最熟悉的肯定是插入模式,这也是一般文本编辑器的模式,比如Windows系统的记事本。其他两种模式(交互模式和命令模式),是让我们一下子有点难以接受。可以用下图来概括:

Vim模式

但是,聪明如你也许要发问:“为什么要在一个文本编辑器里插入如此多的模式呢?为什么没有菜单呢?为什么不用一个图形界面的文本编辑器呢?用一个鼠标不是更方便吗?”

以上都是好问题。但我只能先尝试着回答你,当然你也要对我够信任:如果Vim的开发者创建了这么多看似复杂的模式,那肯定是有其用意的。

实际上,正是有了这三个模式,Vim才会如此强大。在下面的课中,我们会慢慢展示。

你会发现Vim可以实现一般的文本编辑器所不能做的操作,例如:删除当前字符,从光标开始处剪切文本直到行末,将剪贴板中的文本粘贴四次,跳转到第100行,跳转到最后一行,等等。

以上所列举的所有操作,都只需要键盘就可以,完全不需要鼠标。因此,你也许有一天会感叹:“一入Vim深似海,从此鼠标是路人”。但是,一开始并不轻松,因为大部分按键都是需要记住的。

这和学习“盲打”有点像。好多年前,我在电脑上打字都是用一根指头并且眼睛要看着键盘,后来学习了编程,感觉用一根指头打字实在是太没效率了。因此,我从网上搜了“盲打”的示意图,逼着自己把十根手指放在键盘的特定位置。一开始练习“盲打”的时候,输入速度比我用“一阳指”时还慢,但是渐渐地,就“健指如飞”了,打字效率绝对提高一个数量级。

盲打示意图

入门Vim也是如此。一开始不轻松,但是渐渐地,它会成为你编程的生产力工具,大大提高效率。

当然了,有些人还是偏爱图形界面。Vim也有一个图形界面的版本,称为gVim(Gnome Vim的缩写)。你可以安装gVim(即使你是在KDE桌面系统下)。gVim的功能和Vim是基本一样的。gVim也有Windows版本,如下图所示:

Windows版gVim

可以看到gVim有菜单和工具栏,和一般的文本编辑器类似。但我更偏爱命令行形式的Vim。

4. 基本操作(移动,写入,保存,等等)


我们会通过几个步骤来一点点认识Vim。这些步骤会从简单到复杂,但是小编我还是很厚道的(真的吗?... ),会慢慢来,不会一下子把你塞成一个“胖子”。

打开Vim


如果你在终端命令行中输入vim,不加任何参数,回车后Vim就会被运行起来,我们之前也见过其庐山真面目了。

vim

你也可以用Vim来打开一个文件,只需要在vim后面再加文件名,如下:

vim 文件名

如果文件不存在,那么会被创建。

i :插入文本


我们从一个空白文件开始。首先按下键盘上的字母键i(小写的i),这样我们就从初始的交互模式进入了插入模式,就可以开始键入文本了。

Vim插入模式

注意看:左下角有一个“-- INSERT --”,说明我们就处在Insert Mode(插入模式)中。

你可以在里面输入几行文本,就像我一样,然后按Esc键,回到交互模式。你会看到左下角的“-- INSERT --”消失了,我们就重新回到了交互模式。

移动 :h, j, k, l (上下左右移动)


在Vim的交互模式下,我们可以在文本中移动光标。我们可以用四个键来实现上,下,左,右的移动。如下表所示:

按键 作用
h 向左移动一个字符
j 向下移动一个字符
k 向上移动一个字符
l 向右移动一个字符

当然了,除了这四个键,我们也可以用键盘上的四个方向键来移动,效果是一样的。而且,在插入模式下,要上下左右移动也只能用方向键了。

0和$ :移动到行首和行末


在交互模式下:

  • 为了将光标定位到一行的开始位置,我们只需要按下数字键0即可。当然了,键盘上的“Home”键也有相同效果。但是我们还是建议用0键,毕竟不用隔那么老远去按Home键。

  • 为了将光标定位到一行的末尾,我们只需要按下美元符号键$即可。当然了,键盘上的“End”键也有相同效果。但是我们还是建议用$键,毕竟不用隔那么老远去按End键。

w :一个单词一个单词地移动


在交互模式下,按字母键w(w是word的首字母,是英语“单词”的意思),我们可以一个单词一个单词地移动,有时候比一个字符一个字符地移动可高效多了。

:w :保存文件


为了保存文件,我们首先要进入交互模式。

按下冒号键(:),以进入命令模式,然后按下w(w是write的首字母,是英语“写入”的意思)键,再输入你要保存的文件名字,因为目前我们还没有创建文件,只是从Vim的交互模式进入插入模式后直接写入的上面那些文本,如下图所示:

可以看到,我给文件起名叫myFile,是my和file的缩合,my是英语“我的”的意思,file是英语“文件”的意思,因此myFile是英语“我的文件”的意思。

然后再回车。如下图所示:

可以看到,左下角显示了“myFile 5L, 149C written”。

这句话是什么意思呢?一一来分析:

  • myFile:刚才用w命令来保存的文件名。表示“我的文件”。
  • 5L:L是line的首字母,是英语“行”的意思,因此5L表示文件中有5行。
  • 149C:C是character的首字母,是英语“字符”的意思,因此149C表示文件中有149个字符。
  • written:英语“已经写入”的意思。

因此,上面这一行文字就表示“写入了5行文本,一共是149个字符,文件名是myFile”。

:q :退出


现在,我们已经编辑并且保存了文件,我们就可以退出Vim了,只需要先按下冒号键,以进入命令模式,再按下q键,再回车。

如果在退出之前又修改了文件,那么Vim会显示一个红字标明的错误信息,如下图所示:

错误信息是“E37:No write since last change (add ! to override)”,意思是:“37号错误:最近一次修改没有被写入(添加 ! 来无视,也就是不保存修改)”

Vim会阻止我们在没保存更改的情况下退出。当然,你也可以强制Vim退出,而不保存刚做的修改,只需要在 :q 后面加一个感叹号,表示“强制执行”,:q!

:wq :保存然后退出


相信机智如你应该猜到了,这是两个命令的组合:w和q。w用于保存刚做的修改,q用于退出。因此,即使你刚做了修改,Vim也不会出错了。

5. 标准操作(复制,粘贴,撤销,等等)


我们已经了解了Vim的基本操作。虽说基本操作不是很难,但是对用惯了一般文本编辑器的朋友来说也是会有点不适应。所以花时间来练习是必要的。

现在,我们继续深入。你将会发现Vim非常方便快捷,甚至部分吃瓜群众可能会吃惊到连瓜皮都掉了。

我们会在交互模式下做大部分操作,因此如果你还不是在交互模式下,请按Esc键。

x :删除字符


在交互模式下,将光标定位到一个你想删除的字符上,按下字母键x(小写的x),你会发现这个字符被删除了。效果和在插入模式下用BackSpace键(退格键)来删除字符一样。

我们也可以一次性删除多个字符,只需要在按x键之前输入数字即可。比如我要删除从光标处字符开始到后面的4个字符,我可以先按下键盘上的数字键4,然后再按x,你会发现,4个字符被删除了。如果输入12,再按下x,那么从光标处开始往后的12个字符都会被删除。

d :删除单词,行,等等


我们用字母键d(d是delete的首字母,是英语“删除”的意思)来删除单词或者行。其实被删除的内容会被暂存在内存里,就好像“剪切”。被剪切的内容之后是可以被粘贴的,我们之后会学到,要使用字母键p。

先从删除行开始:

dd :删除行

连按两次d来删除光标所在的那一行。

dd也可以和数字配合,以实现一次性删除多行。例如,先输入2,再按下dd,就会删除从光标所在行开始的2行。

dw :删除一个单词

将光标置于一个单词的首字母处,然后按下dw(delete word的缩写,是英语“删除单词”的意思),整个单词就会被删除了。如果光标置于单词中的某个字符上,那么只会删除从当前字符开始到下一个空格前的所有字符。当然,你也可以一次性删除3个单词,只需要依次按下 3dw。而且如果你把数字放在d和w之间也是可以的,例如 d3w。

d0和d$ :删除行首或行末

还记得0键和$键吗?之前我们请大家在Vim中尽量用这两个键,而不要用Home和End键,来实现跳转到行首和行末。

  • 按下d键,再加0键,就会删除从光标处到行首的所有字符。
  • 按下d键,再加$键,就会删除从光标处到行末的所有字符。

yy :复制行到内存中


按两次y会把光标所在行复制到内存中。和dd类似,dd用于“剪切”光标所在行到内存中,而yy是“复制”。yw则会复制一个单词,y$则是复制从光标所在处到行末的所有字符,y0是复制从光标所在处到行首的所有字符。

y是yank的首字母,是英语“拔出,抽出”的意思。在Vim中,yank就是复制(copy)的意思。就好像把文本拔(yank)起来,之后要粘贴就是放(put)上去。

p :粘贴


如果你之前用dd来剪切过一行,或者用yy来复制过一行,或者是同类操作(比如y$, dw, y0, d0,等等),那么可以使用p键来粘贴这些内容。

p是英语paste的首字母,表示“粘贴”。

注意:用p来粘贴时,内容会被粘贴到光标之后。
如果你用yy复制了一行,再用p来粘贴,那么这一行会被粘贴到光标所在行的下一行处。

我们也可以将同样的内容粘贴多次,只需要在p前面加上次数。例如 7p,表示粘贴7次。如下图所示:

可以看到左下角显示“7 more lines”,是英语“多了7行”的意思。

r :替换一个字符


如果你输入文本时不小心输错了一个字符,你可以用替换来解决。

在交互模式下,将光标置于想要替换的字符上,按下r(r是replace的首字母,是英语“替换”的意思)键,接着输入你要替换的字符。例如,rs表示替换当前字符为s。

如果你用大写的R,那么就是切换到替换模式了。左下角会显示“-- REPLACE --” (replace就是英语“替换”的意思)。在替换模式下,你可以一次性替换多个字符。例如下图中,我把“I jus”替换为了“Hello”,注意左下角的字样:

要退出替换模式很简单,按Esc键即可。

u :撤销操作


如果要撤销最近的修改,只需要按下u(u是undo的首字母,是英语“撤销”的意思)键。同样地,如果想要撤销最近四次修改,可以按下4,再按下u。

可以看到,Vim中数字+指令是很通用的方式。

为了取消撤销,也就是重做之前的修改,只需要按下Ctrl键+r键(r是redo的首字母,是英语“重做”的意思)。

g :跳转到指定行


g是go的首字母,是英语“去”的意思。或者7+gg也行(按两次g)。

一个文件中的每一行都有一个行号。行号从1开始,逐一递增。

在Vim中,我们可以注意到右下角有类似这样的字样:

4,6

4表示行号,6表示列号。因此 4,6 表示当前光标位于第四行,第六列。

如果我们要跳转到第7行,我们可以按下7G。注意,这里的G是大写。因此,按下7,再按下Shift+g。

  • 要跳转到最后一行,按下G(大写的G,Shift+g)
  • 要跳转到第一行,按下gg(两次g键)
  • 跳转到指定行:行号+G 或 行号+gg

6. 高级操作(分屏,合并,查找,等等)


到目前为止,我们已经见识了Vim的常用操作。现在是时候学习一些更复杂的操作了。例如:合并文件,查找,替换,分屏,等等。

所以这些操作是在交互模式下进行。

/ :查找


如果你按下 /(斜杠),那么就进入了查找模式。

这时,你会在左下角看到一个斜杠符号,而且光标会转到斜杠右边,意思是让你输入要查找的字符串。

此时输入你要查找的字符串,然后按下回车。光标就会转到文件中下一个查找到的匹配处。

如果字符串不存在,那么会显示“Pattern not found”,表示“没有找到匹配项”。如下图中我要查找“boy”,但是文件中没有这个字符串。

如果要查找下一个匹配项,只需要按n键。如果要反向查找,需要按N(大写的n,Shift+n)。

用斜杠来进行的查找是从当前光标处开始。如果你要从文件最开始处查找,那么将斜杠(/)替换为问号(?)即可,其他功能是一样的。

:s 查找并替换


有时候我们光查找字符串还不够,还想实现查找替换。要实现字符串替换,有好几种方法。

最简单的就是:

:s/旧字符串/新字符串

但是这种方法只会替换光标所在行的第一个匹配的字符串。

列出所有实现查找替换的方法:

  • :s/旧字符串/新字符串 :替换光标所在行的第一个匹配的字符串

  • :s/旧字符串/新字符串/g :替换光标所在行的所有匹配的字符串

  • :#,#s/旧字符串/新字符串/g :替换文件中第#行到第#行的所有匹配的字符串

  • :%s/旧字符串/新字符串/g :替换文件中所有匹配的字符串(应该是最常用的吧)

:r :合并文件


我们可以用冒号+r(:r)实现在光标处插入一个文件的内容。例如:

:r 另一个文件名

可以用Tab键来自动补全另一个文件的路径。

分屏


Vim有一个特别便捷的功能:可以分屏,可以同时打开好几个文件。

分屏之后,屏幕的每一块被称为viewport,“视口”。

:sp :横向分屏


首先,我们来学习横向分屏。只要输入 :sp , 然后回车即可。

sp是split的缩写,是英语“分割”的意思。

如下图,屏幕被分成了两块:

可以看到,myFile文件又被打开了一次。这时两个viewport的内容是同一个文件:myFile。

当然,我们也可以在两个分开的屏幕中分别打开不同的文件。只需要在输入 :sp 之后空一格,再输入要打开的另一个文件名:

:sp 另一个文件名

可以用Tab键来自动补全另一个文件的路径。

你可以再输入一次 :sp ,来把屏幕分成3块。再输入一次,屏幕会被分成4块。以此类推。

:vsp :垂直分屏


如果你不喜欢横向分屏,那么你可以用垂直分屏,使用 :vsp。

vsp是vertically split的缩写,是英语“垂直分割”的意思。

当然,水平分屏和垂直分屏是可以组合的。如下图:

分屏模式下的主要快捷键


下面列出在分屏模式下的一些实用的快捷键:

  • Ctrl + w 然后再按 Ctrl + w :从一个viewport移动光标到另一个viewport。

  • Ctrl + w 然后按j :移动光标到下方的viewport。如果是h,k,l,那么是分别对应移动到如下表所示的viewport:

按键 作用
Ctrl + w 然后按h 移动光标到左边的viewport
Ctrl + w 然后按j 移动光标到下边的viewport
Ctrl + w 然后按k 移动光标到上边的viewport
Ctrl + w 然后按l 移动光标到右边的viewport
  • Ctrl + w 然后按+ :扩大当前viewport。

  • Ctrl + w 然后按- :缩小当前viewport。

  • Ctrl + w 然后按= :重新均匀分配各个viewport的占比。

  • Ctrl + w 然后按r :调换各个viewport的位置。用R的话是反向调换。

  • Ctrl + w 然后按q或按c :关闭当前viewport。

  • Ctrl + o 或者 :only :只保留当前所在viewport,关闭其他viewport。only是英语“仅仅,只”的意思。

有了以上的快捷键组合,你应该可以“任意驰骋”于分屏之间。

:! :运行外部命令


在Vim中可以运行一些终端命令。只要先输入 :! ,然后接命令名称。

例如,:!ls,就是Vim打开的文件的所在目录运行ls命令,就会列出当前目录包含的文件。

这个方法很适合在不必离开Vim的情况下运行一些外部命令。

7. 配置Vim


我们可以有两种方式来配置Vim:

对于Vim的插件,我们就不花时间来讲解了,自己感兴趣的话可以安装所需插件。但是有些选项参数倒是很有激活的必要。

选项参数功用


在Vim被启动后,我们可以运行一些指令来激活一些选项参数。但是这些选项参数的配置在你退出Vim时会被忘记。如果你希望你所做的配置是永久性的,那么需要在你的家目录创建一个Vim的配置文件:

.vimrc

以命令模式激活选项参数


前面提到的“短暂性”配置选项参数的方法是通过运行一些命令。一旦Vim被打开后,要激活一个选项参数,只需要输入:

:set 选项名

set是英语“设置”的意思。

而不激活(取消)一个选项参数,只需要输入:

:set no选项名

因此,不激活某个选项参数就是在选项名前加上no。no是英语“不,否”的意思。

有些选项参数需要被指定一个值,像这样:

:set 选项名=数值

如果想了解一个选项参数的状态,只需要输入:

:set 选项名?

在配置文件中配置选项参数


如果你不喜欢“短暂性”的用命令来配置选项参数的方法,那么可以用一个配置文件,在里面写入所需选项参数的配置。而这也是我们比较推荐的方法,毕竟没有几个人愿意每次打开Vim重新配置一次选项参数。

目前在我们的用户家目录还没有 .vimrc (注意前面有一点 . ,表示是隐藏文件)这个Vim的配置文件。但是在 /etc/vim 目录中有一个文件叫做 vimrc (注意前面没有一点 .)。

我们把 /etc/vim目录下的vimrc拷贝到我们家目录中,并且重命名为 .vimrc。如下:

cp /etc/vim/vimrc  ~/.vimrc

现在我们来打开 .vimrc 这个文件,用什么来打开呢?当然用Vim啦。

vim .vimrc

我们可以看到 .vimrc 的文件开头是类似这样的:

以双引号(")开头的行是注释,我建议你读一下(如果你英语还可以的话),注释还是很重要的。英语不好怎么办?看我这篇文章:对于程序员, 为什么英语比数学更重要? 如何学习

现在,让我们来激活一些很有用的选项参数。

可以看到一些选项参数的配置行前面有双引号,表示这个选项参数还没有被激活,那么你可以删除行首的双引号来激活这个选项参数。

syntax:配置语法高亮


首先我们来激活 语法高亮 这个选项参数。这样,Vim就会根据你打开的文件类型不同,来对文件的文本进行对应的语法高亮。

Vim支持很多种编程语言类型的文件,例如C, C++, Python, Java, Ruby, Bash, Perl, 等等。要激活语法高亮,只需要保证:

syntax on

这一句前面没有双引号即可。syntax是英语“语法”的意思。

注意:修改了 .vimrc 这个配置文件后,须要保存此文件,退出,再重新运行Vim,以使用最新的配置。

background:背景着色


默认地,Vim的着色和浅色背景配合更好。Vim中的注释,是用比较深的蓝色来着色的,如果在黑色背景下就不是很看得清。

如果你的终端的背景是黑色的(像我这样),那么建议开启黑色背景选项:

set background=dark

background是英语“背景”的意思。

number:显示行号


在Vim中,要在文件中显示行号(行号在每一行左边),只需要:

set number

显示行号在编程时还是很有用的。

number是英语“号码”的意思。

showcmd:显示当前命令


当你在Vim中输入命令时,有时(主要是在交互模式下)不能看到自己输入的命令。

例如你输入 2dd ,想要删除光标所在的一行和下面的一行,但是你看不到自己输入的命令,不确定到底输了 2dd 与否。在Vim中,如果你想实时看到自己输入的命令,只要:

set showcmd

showcmd是show和command的缩写,show是英语“显示”的意思,command是英语“命令”的意思,因此,showcmd就是“显示命令”的意思。

ignorecase:在查找时忽略大小写


默认地,在Vim中搜索文本时,是区分大小写的,比如我搜“just”,那么久搜不到“JUST”,“Just”,等等。

如果要Vim忽略大小写,那么可以:

set ignorecase

ignore是英语“忽略”的意思,case是英语“情况”的意思,因此ignore case是“忽略大小写”的意思。

mouse:鼠标支持


mouse是英语“老鼠,鼠标”的意思。

是的,即使在终端命令行模式中,仍然可以使用鼠标。激活鼠标很简单,只要:

set mouse=a

激活鼠标之后,你就可以用鼠标(或触摸板)来点击文件中任意位置,使光标移动到那里。你甚至可以用鼠标上的滚轮来滚动文件。

你也可以用鼠标来选择一段文本,就会切换到VISUAL模式,也就是“可视”模式(visual是英语“可视的”的意思)。在这个模式下,你可以用x来删除刚才选中的文本,用大写的U来把文本转为大写,u来把文本转为小写,等等。


做完以上配置后,你的 .vimrc 的内容是如下:

" All system-wide defaults are set in $VIMRUNTIME/debian.vim and sourced by
" the call to :runtime you can find below.  If you wish to change any of those
" settings, you should do it in this file (/etc/vim/vimrc), since debian.vim
" will be overwritten everytime an upgrade of the vim packages is performed.
" It is recommended to make changes after sourcing debian.vim since it alters
" the value of the 'compatible' option.

" This line should not be removed as it ensures that various options are
" properly set to work with the Vim-related packages available in Debian.
runtime! debian.vim

" Uncomment the next line to make Vim more Vi-compatible
" NOTE: debian.vim sets 'nocompatible'.  Setting 'compatible' changes numerous
" options, so any other options should be set AFTER setting 'compatible'.
"set compatible

" Vim5 and later versions support syntax highlighting. Uncommenting the next
" line enables syntax highlighting by default.
syntax on

" If using a dark background within the editing area and syntax highlighting
" turn on this option as well
set background=dark

" Uncomment the following to have Vim jump to the last position when
" reopening a file
"if has("autocmd")
"  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
"endif

" Uncomment the following to have Vim load indentation rules and plugins
" according to the detected filetype.
"if has("autocmd")
"  filetype plugin indent on
"endif

" The following are commented out as they cause vim to behave a lot
" differently from regular Vi. They are highly recommended though.
set showcmd     " Show (partial) command in status line.
"set showmatch      " Show matching brackets.
set ignorecase      " Do case insensitive matching
"set smartcase      " Do smart case matching
"set incsearch      " Incremental search
"set autowrite      " Automatically save before commands like :next and :make
"set hidden     " Hide buffers when they are abandoned
set mouse=a     " Enable mouse usage (all modes)
set number

" Source a global configuration file if available
if filereadable("/etc/vim/vimrc.local")
  source /etc/vim/vimrc.local
endif

网上也有很多高手配置的 .vimrc ,可供下载,然后你只需要稍加修改即可成为自己的Vim的配置了。

学完这课,是否有种“人生苦短,我用Vim”的感觉?
相信我,随着你用Vim来编程,这种感觉会越来越强烈。
但是... Emacs也是不错的,哈哈。

8. 总结


  1. Vim是基于终端命令行的十分强大的文本编辑器,较Nano这样的文本编辑器有更多可能。它的强有力竞争对手是Emacs。

  2. 在Vim中,有三种模式:交互模式,插入模式,命令模式。

  3. Vim的默认模式是交互模式,进入插入模式需要按i键,从插入模式回到交互模式按Esc键。

  4. 在交互模式中,按冒号键(:)可以进入命令模式,例如 :w 用于保存文件,:q 用于退出Vim,:wq 用于保存并退出。

  5. 要用好Vim,需要记住不少的快捷键,这也是Vim入门比较花时间的原因。但一旦过了“磨合期”,那简直快得飞起。

  6. 我们可以修改 .vimrc 文件来配置Vim,例如开启代码高亮。



作者:程序员联盟
链接:https://www.jianshu.com/p/2f9ab65776d4
來源:简书

猜你喜欢

转载自blog.csdn.net/weixin_41318405/article/details/80041704
今日推荐