vim的常用快捷键总结

一.vim编辑器

1.vim概述

vim是从vi发展出来的文本编辑器。其名称来源于“Visual Improve”,意味着它是vi的增强版,具有语法着色功能,可以主动地以字体颜色辨别语法的正确性,从而方便程序设计。

vim在程序员中被广泛使用,因为它具有丰富的方便编程的功能,如代码补全、编译及错误跳转等。vim编辑器主要分为三种模式:普通模式、插入模式和末行模式。在打开文件时,vim默认处于普通模式,通过输入特定的字符(如i、a、o)可以切换到插入模式进行文本的编辑。

vim编辑器的使用广泛,不仅因为它提供了强大的文本编辑功能,还因为它在Unix及Linux系统下的标准性和一致性。学会vim后,用户可以在Linux系统中进行各种配置文件的修改工作,从而更好地利用Linux系统的功能。

总的来说,vim是一个功能强大、使用广泛的文本编辑器,特别适合程序员和需要进行大量文本编辑工作的用户。

2.vim的三种模式

vim的有三种模式,普通模式,插入模式,视图模式

三种模式

但是大部分指令都是在普通模式下使用的,插入模式和视图模式和window下的视图化是一样的,以window下的经典编译器visual studio为例,我们所看到的就是插入模式和视图模式,例如鼠标可以选中文本,点击某处就可以直接开始编辑,而在vim下,是脱离鼠标的操作,所有的工作都可以通过指令完成。所以只需要重点掌握普通模式下的一些指令即可.

普通模式也叫命令模式,顾名思义,这种模式就是用来执行各种命令的。我们学习Vim,最核心的就是学习Vim普通模式下的指令。

这些命令又分为短命令和长命令:

  1. 长命令:所有以:开头,以回车结尾的命令都是长命令。最常用的当属保存并退出指令:wq回车
  2. 短命令:不是长命令就是短命令。比如我们用过的删除当前行d指令,组合指令dj等。

注意:如果没有特别备注大小写均可,那么该指令是区分大小写的

二.vim编辑器的模式切换

1.模式切换

①.从普通模式切换到插入模式

普通模式下方显示为绿色,而插入模式下方显示为蓝色,如图

普通模式

切换到插入模式

1
2
3
4
5
6
$ i //在光标前面插入
$ I//大写字母i,在行首插入
$ a//在光标后面插入
$ A//在行尾插入
$ o//在下面另起一行,并在行首插入
$ O//在上面另起一行,并在行首插入

切换模式后,如图

插入模式

②.从普通模式切换到视图模式

视图模式的下方显示为紫色,如果想从普通模式切换到视图模式按键有

1
2
$ v//进入行选模式
$ ctrl+v//进入竖选模式(列选模式),或者块选模式

切换模式后,如图

视图模式

此外用鼠标选中一块内容也可以进入视图模式

③.从插入模式或者视图模式切换到普通模式

比较简单,在别的模式下直接按esc就可以恢复普通模式

2.利用vim打开文件

若想用vim编辑一个文件,可以使用如下命令:

1
2
$ vim [文件名]
$ vim +n [文件名]//n表示一个数字,该指令表示打开一个文件,进入文件后光标所在的行号是n行

编辑完文件后,需要从文件中退出,可以使用如下命令(需要在普通模式下,先按冒号:,在输入字母)

1
2
3
$ :q//退出
$ :q!//不保存退出
$ :wq//保存退出

注意:ctrl+s不是保存,如果习惯性的按ctrl+s想要进行保存操作,则会使vim进入僵死状态,想要解除可以按ctrl+q

三.常用指令

1.技巧相关

vim的指令是可以组合的,将命令组合起来可以得到一个新的命令。vim的指令组合是有规律的。

  1. 在 Vim 中,”d” 表示删除当前行,”j” 移动到下一行,于是组合 “dj” 表示删除当前行和下一行。这种组合是基于”action + motion”的,即将动作和移动方向进行组合。再比如:”^” 代表行首,故组合 “d^” 表示删除到行首;”$” 代表行尾,”d$” 表示删除到行尾。
  2. 另一种常见的组合方式是”num + action”,即数字和动作的组合,表示动作重复的次数。如”dd” 表示删除光标所在行,”2dd” 或 “d2d” 表示连续删除两行,效果和 “dj” 一致。

第二:Vim普通模式下的指令

如果某个功能的指令是具有方向的,并且它用相同字母的大小写来代表不同的方向,那么普通的规律是:

  1. 小写字母代表的方向是向右、向后、向下
  2. 大写字母代表的方向是向左、向前、向上
1
2
3
4
5
6
7
8
9
10
t/T:表示光标移动到目标字符的前一个字符位置(to)
f/F:find,表示光标移动到目标字符
t":表示向后寻找"字符,并将光标移动到"的前一个字符
T":表示向前寻找"字符,并将光标移动到"的后一个字符
f(:表示向后寻找(字符,并将光标移动到(
F(:表示向前寻找(字符,并将光标移动到(

以上操作都属于motion,移动方向
我们可以组合action,比如删除的d
实现一个复杂的删除操作

2.移动光标指令

第一类:上下左右移动一个字符

1
2
3
4
>$ h//向左移动一个字符,等同于小键盘向左的方向键
>$ j//向下移动一个字符,等同于小键盘向下的方向键
>$ k//向上移动一个字符,等同于小将盘向上的方向键
>$ l//(小写L)向右移动一个字符,等同于小键盘向右的方向键

其实使用小键盘的上下左右也是一样的

第二类:光标直接移动行

1
>$ :[n] 或 [n]G //移动到第n行

第三类:光标直接移动到文件第一行和最后一行>

1
2
>$ gg//移动光标到第一行
>$ G//移动光标到最后一行

第四类:光标在一行的内部移动

1
2
3
4
>$ ^//移动光标到当前行的第一个非空白字符处
>$ $//移动到行尾
>$ w//光标移动到下一个单词的词首
>$ b//光标移动到上一个单词的词首

第五类:移动光标到某个固定字符

1
2
3
4
>$ t)//向后查找,将光标移动到)的前一个字符处
>$ f)//向后查找,将光标移动到)
>$ T"//向前查找,将光标移动到"的后一个字符
>$ F"//向前查找,将光标移动到"

这里也符合规律小写字母一般都是向后,向下,向右,而大写字母是向上,向前,向左,这些命令可以与其他命令打出组合技!

3.删除文本指令

vim的删除操作类似于windows的剪切操作,会将删除的内容复制到剪切板中,再按p是可以粘贴出来的

1
2
3
4
5
6
7
8
$ x//删除一个字符
$ diw//删除光标所在的整个单词,但不包括单词周围的空格
$ di"//删除光标所在""范围内的所有内容
$ dd//删除一整行
$ ndd//删除当前和下面的n-1行,共n行被删除
$ :[m],[n]d//删除文本的[m,n]行
$ df)//向后删除直到),同时删除)和光标位置的字符
$ dt)//向后删除直到)同时删除光标位置字符,但不删除)

4.粘贴,撤销和重做指令

1
2
3
4
$ p//粘贴到下一行(如果复制的是行的话,如果复制的不是行,那就粘贴到光标后面)
$ P//粘贴到上一行
$ u//撤销
$ ctrl+r//重做

5.修改文本指令

本质上是删除操作和进入插入模式两个操作的组合

1
2
3
4
5
6
7
8
9
10
11
12
13

$ cc / S //"删除当前行,并进入编辑模式"
$ [n]cc / [n]S //"删除n行,并进入编辑模式"
$ cw //"删除一个单词,并进入编辑模式"
$ [n]cw / c[n]w //"删除n个单词,并进入编辑模式"
$ c^ //"删除到行首,并进入编辑模式"
$ c$ //"删除到行尾,并进入编辑模式"
$ ct) //"删除到),并进入编辑模式"
$ ct“ //"删除到“,并进入编辑模式"
$ c[n]G //"删除到第n行,并进入编辑模式"
$ cG //"删除到文件末尾,并进入编辑模式"
$ ci“ //"当光标处在““当中时,删除整个”“内容并进入编辑模式 "
$ ciw //"删除光标所在的整个单词,但不包括单词周围的空格,并进入编辑模式"

重点记忆ci和ciw

6.复制文本指令

1
2
3
$ yy//复制当前行
$ [n]yy//复制当前行开始的下面n行,包括当前行自身
$ :[m],[n]y//复制[m,n]行,长命令 需要输入:

7.查找文本命令

功能类似于window下的ctrl+f

1
$ /word //从光标所在位置向后查找匹配word的内容,word为正则表达式

8.替换文本指令

类似于window下使用ctrl+r来进入搜索并替换文本的模式

在vim编译器下的替换核心指令是s,替换指令属于长指令,所以需要输入冒号:

1
2
3
4
5
$ :s/pattern/substitute//只会替换光标所在行的第一个匹配项
$ :s/pattern/substitute/g//替换光标所在行的所有匹配项
$ :[m],[n]s/pattern/substitute/g//替换[m,n]行的所有匹配项
$ :%s/pattern/substitute/g//替换全文的所有匹配项
$ :%s/pattern/substitute/gc//替换全文的所有匹配项,但每个位置都会逐一询问是否替换。

注:

  1. /c标志可以加在上面指令任意一条中,作用是在替换之前询问。这在需要精准控制替换时,特别有用。
  2. 语法中的分隔符都是/,如果匹配的内容中有/,那就使用转义字符\。比如若想匹配/a/,那就需要写\/a\/

9.其他常用指令

  1. 自动代码对齐:gg = G
  2. 使用 gi 命令快速返回到上次插入文本的地方并进入插入模式。
  3. [[]]:移动到代码的上一个或下一个函数(假设每个函数由大括号定义并且大括号会换行)。
  4. 使用 ~ 可以改变当前光标字符的大小写,或者在可视模式中选择多个字符后按 ~ 来批量改变大小写。
  5. 使用 q: 打开命令行窗口,这样可以浏览历史命令并进行编辑。这对于修改或重用长命令特别有用。然后再q会退出
  6. 使用 % 可以在匹配的括号之间跳转,如 (){},或 []。这在编程时检查代码块的开始和结束非常有用。

10.快速注释多行代码

1
2
$ gcc//注释一行代码
$ [n]gcc//注释该行开始的n行代码