0%

VIM基础学习(第五节:文件信息、跳转、定位括号和缩进)转自:鱼C论坛

文件信息

有时候,你可能需要知道当前的文件信息,比如文件名,文件状态,文件的总行数,以及光标所在的相对位置。

img

快捷键 ctrl + g 可以解决你的需求:

img

注意:光标在文件中的相对位置是用百分数来显示的,那如果想知道光标具体的位置呢?看到还有个 5,1 了吗?那个是原来就有的,表示光标当前的位置(行,列)

跳转

当你的光标在文件中随意徘徊时,突然想到目标就在第 333 行的位置,你应该怎么做?假设你当前光标位于文件第 1333 行,你的做法是在普通模式下按 1000 次 k 键?

还是将光标先定位到文件的起始处(gg 命令,还记得吗?),然后按332 次 j 键?

无论使用哪种做法,我想都是在摧残我们的心智。

img

当然你可能想到了数字的奥义,先输入数字 332 再输入 j,那么就可以直接跳转到 333 行了。不错,但你还得先将光标移动到文件的起始处,多麻烦……或者直接输入数字 1000,再输入 k,但……这就需要计算了,如果是 1387 行跳到 678 行不还得拿个计算器啊?!

我们需要的是一步到位,我们需要的是瞬间转移!!!

可以,VIM 是神之编辑器,只有你想不到,没有它办不到的!

img

在 VIM 有两种方式可以将光标跳转到指定的位置:

  • 行号 + G
  • :行号

比如将光标跳转到第 333 行的位置,你就输入数字 333,再输入大写字母 G 即可见证奇迹;或者输入冒号(:)进入命令行模式,再输入数字 333,最后回车,也可以跳转到目的地。

TIPS:如果单独输入 G 键(前边没有输入数字),那么光标是直接去到文件的最后一行;如果输入两个小写 g,即 gg,则将光标跳转到文件的第一行。

定位括号

我们知道这个世界上除了情侣是一对对的之外,还有括号也是一对对的,不成对的括号则毫无逻辑可言。当你的代码量到一定程度的时候,或许你就只能在屏幕中看到一半的括号,那么有时候寻找它的另一半将成为你心头的磐石。

img

VIM 有个按键可以帮你快速定位到另一半括号,别说我没告诉你,就是 % 键。将光标移动到 (),[],{},中的任何一半括号上,按下 % 键,便可看到此时光标已经跳转到另外一半的括号上了。

在程序调试时,这个功能用来查找不配对的括号是很有用的。因为有时候你代码删删删,括号一对给你删了一半,剩下一半落在那里,编译自然就会报错……此时你在落单的那一半括号上使用 % 键,你会发现 VIM 根本不鸟你,因为它找不到另一半了……

注意:别拿书名号什么的来开玩笑,% 无法识别它们,因为 VIM 是为了编程而生的!

缩进

在编写代码的时候我们经常需要对代码进行缩进,如果你按照小甲鱼之前环境搭建那样开启了 VIM 的 cindent 功能之后,你的代码默认会按照 C 语言的方式进行缩进。

比如我输入做大括号({),然后回车,VIM 将自动为下边的语句插入一个缩进,直到你输入右大括号(}),代表语句块结束。

  1. int strcmp(char *s, char *t)
  2. {
  3. ​ int i;
  4. ​ for (i=0; s[i] == t[i]; i++)
  5. ​ ;
  6. ​ return s[i] - t[i];
  7. }

复制代码

好,那现在我们需要在 for 循环中添加一个条件判断:

  1. int strcmp(char *s, char *t)
  2. {
  3. ​ int i;
  4. ​ for (i=0; s[i] == t[i]; i++)
  5. ​ if (s[i] == ‘\0’)
  6. ​ return 0;
  7. ​ return s[i] - t[i];
  8. }

复制代码

现在我们需要将第 6 行和第 7 行均添加一个缩进,你可能会选择进入插入模式,然后将光标挪到 if 语句的开头,然后按下 Tab 键插入一个缩进,接着再将光标移动到 return 0; 的前边,同样按下 Tab 键插入一个缩进……

别说你嫌操作麻烦,我连用文字描述我都觉得蛋疼……

这里只是两行还好,这要是二十行那不得累死人!

没错,接下来就是小甲鱼放大招的时间了!

img

VIM 可以使用尖括号(< 或 >)来控制缩进,我们常用的就是两个同方向的尖括号表示将光标所在的语句进行缩进和反缩进操作。很明显 >> 表示缩进,而 << 则表示反缩进。

但是这样一次只能缩进一行,一行行来也挺麻烦,因此你想到了数字的奥义:先输入数字 2 在输入 >> 表示将光标所在行以及下一行共两行同时插入一个缩进。

不过行数一多……到底要缩进多少行就成了一个问题……

这时,你可以按一下 v 进入可视模式(左下角出现 – VISUAL – 字样),然后通过 h、j、k、l 或 其他 motion 来移动你的光标,此时光标所到之处必被一道亮光所包围(表示被选中),选择好需要缩进的目标后,只需按一下 > 即可完成任务。

img