Linux探索之旅 | 第五部分第一课:Vim岂是池中物,宝剑锋从磨砺出

来源:互联网 发布:mysql和redis的区别 编辑:程序博客网 时间:2024/04/28 03:31

-- 简书作者 谢恩铭 转载请注明出处

内容简介


  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移动光标到左边的viewportCtrl + w 然后按j移动光标到下边的viewportCtrl + w 然后按k移动光标到上边的viewportCtrl + 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时会被忘记。如果你希望你所做的配置是永久性的,那么需要在你的家目录创建一个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 wellset 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 abandonedset mouse=a        " Enable mouse usage (all modes)set number" Source a global configuration file if availableif filereadable("/etc/vim/vimrc.local")  source /etc/vim/vimrc.localendif

网上也有很多高手配置的 .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,例如开启代码高亮。

9. 第五部分第二课预告


今天的课就到这里,一起加油吧!

下一课我们学习:Linux探索之旅 | 第五部分第二课:一入Shell深似海,酷炫外壳惹人爱


人世间,
万千情感皆有温度,
千万代码似有性格。
这里有原创教程,IT丛林......
和你一起探索程序人生。
我是谢恩铭,在巴黎奋斗的嵌入式软件工程师。
个人简介
热爱生活,喜欢游泳,略懂烹饪。
人生格言:“向着标杆直跑”

0 1
原创粉丝点击