vim是一款Linux下的文本编辑器,当我们需要在终端环境下编辑文本时,vim就是我们最好的选择。vim看起来似乎对初学者不太友,但是想要上手使用vim并不困难。

认识vim

我们先来宏观的认识vim,vim常用的有四个模式:

  1. 正常模式(Normal-mode)
  2. 插入模式(Insert-mode)
  3. 命令模式(Command-mode)
  4. 可视模式(Visual-mode)

正常模式

当我们启动vim时,vim就处于正常模式,在正常模式下我们不能直接编辑文件,只能通过命令的形式使用复制,粘贴,剪切等操作来编辑文件。

在其它任何模式下,我们都可以通过按下Esc键来返回正常模式(如果不行就按两下),其它模式都需要在正常模式下按下相应的键位触发。

插入模式

在正常模式下我们按下一些键位就可以进入插入模式,这些按键较多,我们在基本操作中详细介绍这一部分的内容。

比较常用的是i健,按下i之后我们就可以进入插入模式,此时我们可以像平时编辑文件一样操作我们的文件。

命令模式

在按下/或者:键之后vim会进入命令模式,在命令模式下我们可以执行vim提供给我们的指令,具体的指令会在下面介绍。

可视模式

按下v键即可进入可视模式,在可视模式下我们可以操作块状区域。

vim的基本操作

下面就开始介绍我们该如何使用vim

快速开始

我们先来介绍如何使用vim打开,编辑,保存文件,如果只是想在vim下简单的修改文件,这个部分的几个命令就足够了。

  • vim打开文件:
shell
1
$ vim file
  • vim修改文件:

我们在vim正常模式下按下i进入插入模式,此时你可以正常编辑文件。

  • 保存文件

先退出至正常模式,然后输入:进入命令模式,我们就可以键入vim命令:

  1. w:保存文件
  2. q:退出文件
  3. !:强制操作

如果不考虑效率问题,上面的三个操作已经可以满足你大部分的需求。

但是vim真正的强大之处就是强大的编辑能力,接下来我们继续了解vim的操作。

vim多窗口操作

vim打开多个文件

shell
1
$ vim file1 file2 file3 ... 

此时我们就同时打开了多个文件,我们可以用下面的方式操作这些打开的文件:

查看vim打开的文件

plaintext
1
:ls

选择显示其它文件

bash
1
2
3
4
5
6
# 选择进入第二个文件
:b2
# 进入下一个打开的文件
:bn
# 进入上一个打开的文件
:bp

此外,我们可以使用分屏命令在一个终端中显示多个文件

下面的命令可以左右分屏:

shell
1
$ vim -O file1 file2 ...

上下分屏:

shell
1
$ vim -o file1 file2 ...

但是这样分屏不太灵活,使用vim内置命令是更好的选择,首先我们要记住一个重要的组合键Ctrl + w,这是很多分屏操作的前置按键。

先按下Ctrl + w,然后松开以后再按下s,将当前文件上下分割。

Ctrl + ws:上下分割文件。

Ctrl + w v:左右分割文件

:sp file:上下展示当前文件和新打开文件

:vsp file:左右展示当前文件和新打开文件

我们现在已经开启多个窗口,我们还需要灵活的移动光标以操作多窗口

1.切换左右分屏的光标 :

plaintext
1
Ctrl + w h

将当前光标定位到左边的屏幕

plaintext
1
Ctrl + w l

将当前的光标定位到右边的屏幕

2.移动左右分屏 :

plaintext
1
Ctrl + w H

将当前的分屏移动到左边

plaintext
1
Ctrl + w L

将当前的分屏移动到右边

3.切换上下分屏的光标 :

plaintext
1
Ctrl + w j

将当前的光标移动到下面的分屏

plaintext
1
Ctrl + w k

将当前光标移动到上面的分屏

4.移动上下分屏:

plaintext
1
Ctrl + w J

将当前的分屏移动到下面的分屏

plaintext
1
Ctrl + w K

将当前的分屏移动到上面的分屏

vim的模式

下面来更详细的介绍一下正常模式,插入模式,命令模式和可视模式的用法。

正常模式

正常模式是vim的默认模式,在正常模式中有很多快捷键,是否熟练掌握这些快捷键很大程度上决定了我们vim的效率。

移动光标

h:左

j:下

k:上

l:右

行内移动光标

0 移动到行头

^ 移动到本行的第一个不是 blank 字符

$ 移动到行尾

g_ 移动到本行最后一个不是 blank 字符的位置

w 光标移动到下一个单词的开头

e 光标移动到下一个单词的结尾

fa 移动到本行下一个为 a 的字符处,fb 移动到下一个为 b 的字符处

nfa 移动到本行光标处开始的第 n 个 字符为 a 的地方(n 是 1,2,3,4 … 数字)

Fafa 一样,光标移动方向同 fa 相反

nFanfa 类似,光标移动方向同 nfa相反

ta 移动光标至 a 字符的前一个字符

nta 移动到第二个 a 字符的前一个字符处

Tata 移动光标方向相反

nTanta 移动光标方向相反

;, 当使用 f, F, t ,T, 关键字指定字符跳转的时候,使用 可以快速跳转到下一个指定的字符,, 是跳到前一个指定的字符

跨行移动光标

nG 光标定位到第 n 行的行首

gg 光标定位到第一行的行首

G 光标定位到最后一行的行首

H 光标定位到当前屏幕的第一行行首

M 光标移动到当前屏幕的中间

L 光标移动到当前屏幕的尾部

zt 把当前行移动到当前屏幕的最上方,也就是第一行

zz 把当前行移动到当前屏幕的中间

zb 把当前行移动到当前屏幕的尾部

% 匹配括号移动,包括 ( , { , [ 需要把光标先移动到括号上

*# 匹配光标当前所在的单词,移动光标到下一个(或者上一个)匹配的单词( * 是下一个,# 是上一个)

翻页

ctrl+f 查看下一页内容

ctrl+b 查看上一页内容

复制,粘贴,删除

三个重要的快捷键 d , y , p

d 是删除的意思,通常搭配一个字符 ( 删除范围 ) 实现删除功能,常用的如下:

dw 删除一个单词

dnw 删除 n 个单词,

dfa 删除光标处到下一个 a 的字符处( fa 定位光标到 a 处 )

dnfa 删除光标处到第 n 个 a 的字符处

dd 删除一整行

ndd 删除光标处开始的 n 行

d$ 删除光标到本行的结尾

dH 删除屏幕显示的第一行文本到光标所在的行

dG 删除光标所在行到文本的结束

y 是复制的意思,通常搭配一个字符(复制范围)实现复制的功能,常用的如下:

plaintext
1
2
3
yw` 复制一个单词,还有 `ynw
yfa` 复制光标到下一个 a 的字符处,还有`ynfa
yy` 复制一行,还有 `nyy

y$ 复制光标到本号的结尾

yH 复制屏幕显示的第一行文本到光标所在的行

yG 复制光标所在行到文本的结束

pP是黏贴的意思,当执行完复制或者黏贴的命令以后,VIM 会把文本寄存起来。

p 在光标后开始黏贴

P 大写的 P 光标前开始粘贴

撤销与恢复

u 撤销刚才的操作

ctrl + r 恢复撤销操作

大小写转换

~将光标下的字母改变大小写
3~将光标位置开始的3个字母改变其大小写
g~~改变当前行字母的大小写
gUU 将当前行的字母改成大写
guu 将当前行的字母全改成小写

3gUU 将从光标开始到下面3行字母改成大写
gUw 将光标下的单词改成大写。
guw 将光标下的单词改成小写

插入模式

请记住下面几个常用启动录入文本的键盘字符 i,I,a,A,o,O,s,S

i是在光标所在的字符之前插入需要录入的文本。

I 是在光标所在行的行首插入需要录入的文本。

a 是在光标所在的字符之后插入需要录入的文本。

A 是在光标所在行的行尾插入需要录入的文本。

o 是光标所在行的下一行行首插入需要录入的文本。

O 是光标所在行的上一行行首插入需要录入的文本。

s 删除光标所在处的字符然后插入需要录入的文本。

S 删除光标所在行,在当前行的行首开始插入需要录入的文本。

命令模式

下面介绍一些常用的内置命令

set nu:插入行号

set nonu:删除行号

:n:跳转至n行

/{目标字符串}:查找目标字符串,在执行该命令后,按下n跳转至下一个匹配,N跳转至上一个匹配

:n1,n2d:删除n1~n2范围内的行

:{作用范围}s/{目标}/{替换}/{替换的标志}:这是替换命令的格式

:s/{target}/{replace}/g:替换当前行所有的目标字符串

:%s/{target}/{replace}/g:替换全局的匹配字符串

:s/{target}/{replace}:只替换当前行匹配到的第一个目标字符串

:%s/{target}/{replace}:替换全局每一个的第一个匹配字符串(不是全局的第一个)

:n1,n2s/{target}/{replace}/g:替换n1~n2范围内的匹配字符串

:'<,'>s/{target}/{replace}/g:在可视模式下,在我们选择中区域以后直接按下:会补全为:'<,'>,会替换选中区域的匹配字符串

:!command:在命令模式下执行Linux命令

:r !command:将命令的执行结果写入到光标位置

可视模式

在可视模式下,我们可以通过hjkl上下左右移动区域,这与正常模式一致。

h:左

j:下

k:上

l:右

在选好区域后,我们可以退出可视模式进行复制,删除等操作。