文本编辑器VIM

xmut-lby大约 8 分钟

文本编辑器VIM

这章我们来学习一下vim的简单使用,如果你不会vim,至少也需要会一种命令行下的编辑器,否则无法编写代码。

前言

你可能会有这个疑问:直接给我一个Visual Studio不行了吗,为什么还要专门学一个编辑器?因为Linux下不存在集成开发环境这种东西。或者换个角度看,vim就是集成开发环境——只不过需要很多的配置。

Linux下的很多工具遵循这样的原则:做一件事,并把这个事情做到尽可能的好。这跟Windows下一个软件把所有功能包下来的做法有很大的不同。

在Windows下你在Visual Studio里编辑代码、然后按一个按钮,啪一下程序生成,并运行起来,还给你打开调试器。但你知道这个过程中代码是如何变成可执行程序的吗?调试又需要做哪些设置吗?调试版和发行版又有什么区别吗?

强大的IDE隐藏了所有细节,让你以为这一切都是魔法,你也失去了更深层次了解系统运作的机会。

但Linux很不一样,编辑就是编辑,编辑器尽量把编辑这件事情做好。编译器就是编译器,他也只做编译这件事。同样的如果你要调试,你就需要安装调试器。项目管理那么就用make。

他的每一步,基本都是可见的,允许你了解内部的所有细节,你不会有黑箱感。对于一个有志于深入理解计算机的人来说,Linux的思维是更加有效的学习思维。

我们选用vim也是基于同样的原因——纯粹、简单、高效。是的,也有其他编辑器,比如emacs,但相对vim来说,他们都不够纯粹。

开始

一般人如果不看资料,在vim里可能连一个字都打不进去,不过你可以放心,这个阶段很容易就可以过去。

一般建议初学者可以从vimtutor这个教程开始,这个教程在中文环境下有中文版,不过我们的WSL环境没有中文版。我强烈建议你看英文教程来进行学习,因为阅读英语资料是你学习过程中必不可少的一个部分。

在命令行里输入:

vimtutor

就可以打开教程。

我建议大家在进入编辑器后,输入:color desert(注意有一个:号)并回车来切换一个颜色显示,这组颜色在进入选择模式时,能让你看清楚选择的文字。

一开始你可能不知道如何下手,注意看到最下面的一行:用h,j,k,l来进行光标的移动。

此时你可以通过jk向下和向上移动光标,通过hl向左右移动光标。来在文件中浏览。

模式

你可能会有一个很大的疑问,这也是所有小白用户在刚开始时的疑惑,为什么我要通过这四个键来移动光标,而不是方向键?

当然,方向键是可以移动的(你可以试试)。

这个问题有两个答案:

  1. 早期(真的很早)的终端机没有方向键,就用的这4个作为方向键。
  2. 为了不让手离开主键盘区。

第二个原因是目前的主要原因,你慢慢就会发现,vim工作的一大特点是,手始终处于键盘正中的位置(即主键盘区)。你不用把手腾出来去按功能键、移动鼠标等等。这样可以大大提高工作的效率。

实际上vim的命令,也都尽量设计在触手可及的位置,你会发现用起来非常的顺手。

接下来你可以在这个文档里漫游。但我们需要介绍下vim的一个常识,就是模式。

模式

vim相比其他编辑器最大的特色(或者说最为人所诟病)的一点就是他的模式。

在移动光标之后,你一定有一个疑问,如果我要输入hjkl要怎么办?实际上你会发现你压根无法输入任何字符,因为此时你处于vim的普通模式。普通模式的每个按键,都相当于一条命令,指示vim对当前的文本做某些操作。

例如你在某个字符上按下x键,你就会发现这个字符被删除了。然后按一下u键,你会发现字又恢复了。

vim一共有以下几种比较常用的模式:

  • 普通模式:就是初始模式,通过按键来操作文本
  • 插入模式:用于输入文本
  • 可视化(VISUAL)模式:文本块的选择
  • 命令模式:用于执行一些命令,例如存盘和退出

普通模式是vim的基础。基本上任何模式下你按ESC键都可以回到普通模式。所以ESC一直是vim里使用最频繁的按键(甚至有不少笑话)。

接下来的三种模式,在左下角都会有相关的提示。你可以仔细观察。

而普通模式下输入命令,在屏幕的右下角会有当前输入的提示。

尝试一下

输入:set nu,然后回车,注意开始的时候有个:,表示进入命令模式,然后运行命令set nu。你看到了什么?

运行完命令就会回到普通模式,此时再输入100 g,在这个过程中注意观察屏幕右下角的提示。 你看到了什么?

最后你可以通过gg回到整个文件的开头。

常用操作

实际上一开始你只要记很少的几个操作就可以开始使用vim了。

这些操作我个人认为是以下这些,注意要区分大小写:

  1. hjkl移动光标
  2. A光标移动到行末,并进入插入模式,你可以用这个操作来在行末输入
  3. ^移动到行首,$移动到行末。
  4. gg回到整个文件的开头,G到整个文件的最后。
  5. v进入选择模式,可以用hjkl等按键移动。
  6. V(大写)选择当前行并进入选择模式,可以用用jk以行为单位进行选择。
  7. x删除当前内容,如果位于选择模式,则删除选择的块
  8. c删除当前内容并进入插入模式
  9. dd删除一整行,注意d也是命令之一,表示根据下一次的光标移动来进行删除。
  10. e表示到词的末尾(end),w表示下一个词的词头,配合d来使用会非常快速。比如de,会删除当前词,dw会删除当前词到下一个词的开头。
  11. f表示查找,在当前行里搜索第一个出现的字符,例如fe,会把光标移动到第一个出现的e上。

请切实尝试起来,vim的操作有赖于你的肌肉(脂肪)记忆,而不是大脑的记忆

另外还有一点需要注意的是,vim命令支持重复,比如说,如果你输入50j,你会发现你向下移动了50行,其他的操作类似,这些在vimtutor里都有所介绍。

要怎么学习vim

很多人都有一种习惯,是要认真学习某个东西,要记忆要背诵,从我的角度我很反对这种做法。 实际上vim的使用更像一种肌肉记忆。某个按键你用多了,自然就记住了。

当然他有一定门槛:

但实际上这个门槛并不算高,随着你使用的深入,慢慢的就刻进你的DNA了。

所以下面这个书我并不建议你现在看,等你有一定使用基础了再看,会好很多:

Vim实用技巧open in new window

高阶技巧

当你熟悉后,你可能会想配置属于你自己的vim,或者安装一些插件以方便你使用,这时候就需要一些高级技巧了。

vim的配置通过~/.vimrc文件来配置。还记得~目录吗?他是你的个人home目录。注意文件名的前面有一个.,这是类Unix系统的一种约定。以.开头的文件会被视作隐藏文件,在普通过的ls命令时不会显示。

现在输入:

vim ~/.vimrc

打开这个文件(如果没有的话,在你存盘时会自动创建)。

在这个文件里输入:

set nu
color desert

然后:wq退出并存盘。

接下来创建一个.c文件来看看:

vim main.c

写个Hello World!吧。

你会发现有了行号显示,当然颜色模式也切过去了,但这点可能不明显。

~/.vimrc下的所有配置会被作为默认配置,在每次启动之后自动加载,这样就可以避免我们每次都输入了。

~/.vimrc有很多配置可用,但我建议你一开始不要操之过急,你可以慢慢添加对自己有用的配置,把vim配置成只属于你一个人的强大工具。

初期你可以加入下面这些配置,他会让你的编写代码时习惯一些:

set nu
set et
set tabstop=4
set softtabstop=4
set shiftwidth=4
color desert

至于他们的作用,请自行查阅资料。