小甲鱼 发表于 2015-10-29 23:30:46

第五节:文件信息、跳转、定位括号和缩进

第五节:文件信息、跳转、定位括号和缩进

文件信息

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



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



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


跳转

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

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

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

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

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

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



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


[*]行号 + G
[*]:行号

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

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


定位括号

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



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

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

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


缩进

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

比如我输入做大括号({),然后回车,VIM 将自动为下边的语句插入一个缩进,直到你输入右大括号(}),代表语句块结束。
int strcmp(char *s, char *t)
{      
      int i;
      
      for (i=0; s == t; i++)
                ;      

      return s - t;
}
好,那现在我们需要在 for 循环中添加一个条件判断:
int strcmp(char *s, char *t)
{      
      int i;
      
      for (i=0; s == t; i++)
      if (s == '\0')
                return 0;

      return s - t;
}

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

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

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

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



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

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

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

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



关于魔鬼训练小程序的众多问题,请移步:VIM魔鬼训练须知

命运ˊ;丶╲ 发表于 2015-11-9 15:21:21

ffsdfds

~风介~ 发表于 2015-11-25 23:24:03

vim真乃编辑神器也——什么时候我们论坛也支持vim和Markdown发帖就好了~{:9_223:}

tigermali 发表于 2015-11-29 20:47:18

我的神

View 发表于 2016-2-25 14:41:56

vim确实是神奇

宋桓公 发表于 2016-5-13 09:25:49

弯的4

流连他乡 发表于 2016-5-31 14:49:44

学习了....    不错!!{:10_256:}{:10_256:}{:10_256:}

屁哥 发表于 2016-6-6 16:09:55

唉 最近懈怠了浪费了六天时间 没正经学习学到这了自己标记一下一年后再看看自己的进度 呵呵{:10_256:}

LICHT 发表于 2018-1-8 18:02:15

要最长那行缩到最左边,选中缩多了前面的就自动对齐了保持不了形状了怎么破

20400992 发表于 2018-5-17 14:44:39

本帖最后由 20400992 于 2018-5-17 14:49 编辑

神编辑器需要练习啊,不练习就会遗忘神的编辑器

wufan 发表于 2018-9-5 16:33:12

我们知道这个世界上除了情侣是一对对的之外,还有括号也是一对对的
66666

18133942901 发表于 2018-9-6 22:24:26

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

北海的北 发表于 2018-11-5 11:07:48

20400992 发表于 2018-5-17 14:44
神编辑器需要练习啊,不练习就会遗忘神的编辑器

很不习惯不用鼠标的编辑神器需要多加练习才行

Za哥 发表于 2020-5-8 23:01:12

本节课附带练习小程序:<……即将推出……>

Za哥 发表于 2020-5-8 23:01:50

等我学成你还未推出 我来{:5_91:}

Justin1 发表于 2020-5-20 08:23:11

甲鱼,为啥我的Ctrl+ G是没有反应的啊,之前按右ctrl弹出来的是重启的信息

Justin1 发表于 2020-5-20 08:33:22

太神奇了,甲鱼的问题解决了

war52zero0 发表于 2020-10-31 21:12:36

所以课后小程序是鸽了么?

ochenxingo 发表于 2021-9-30 14:54:23

{:10_247:}{:10_247:}{:10_247:}{:10_247:}

Mocca 发表于 2021-11-12 01:40:52

拼命按%很快我的另一半会出现,呵呵 {:5_92:}
页: [1] 2
查看完整版本: 第五节:文件信息、跳转、定位括号和缩进