Vim 基本操作

1.打开文件

安装 vim,进入相应文件夹,输入

$ vim filename

即可打开相应的文件,我们这里打开一个名为 vimtest.txt 的文件。

K、J、H、K 分别对应着上下左右,当然,小键盘左边的方向键也是可以实现光标移动的。

2.插入字符

现在我们想要在文件的末尾插入一行字符:helloworld !

把光标移动到文件末尾,然后按下字母键 i 。我们可以看到光标从覆盖整个字符变成了一个白色的下划线。

然后在文件的末尾输入我们想要输入的字符:helloworld!

现在我们已经输入进去一行字符,那么,怎么保存退出呢?

首先按下【ESC】进入命令模式,然后输入一个命令:

1
:wq

然后我们就成功地保存退出了。

再次打开这个文件,发现我们刚才保存的内容仍然是存在的。

学会了插入,删除也是同理,至少现在我们已经能够将 vim 当做记事本用了。但是,如果我们仅仅掌握这点功能的话,还不如使用 notepad++ 来得方便,所以接下来我们介绍一些高级点的技能。

3.字符搜索

输入:

1
/hello

即可完成在全文中对字符串 hello 的搜索。

输入:

1
n

即可跳转到下一处。当然你也可以按 i 进入插入模式来修改字符,不过如果你想替换全文中所有的 hello 的话,那么 :s 也许是一个不错的选择。

1
:s/hello/hi/g

如图所示,我们已经把文中所有的 hello 替换成了 hi 。这貌似也没什么大不了,毕竟我用 notepad++ 也可以实现同样的工作。那么下面的问题可就是 notepad++ 实现不了的了。

我们现在要把前三行所有的 i 替换成 w

注意,我们只替换前三行。嗯,这个问题对于 notepad++ 来说可能有点变态,不过对于 vim ……

1
:1,3s/i/w/g

只有前三行的 i 被替换成了 w。命令结尾的 g 表示会对所有符合情况的 i 进行操作,否则只替换第一个。

4.分屏操作

说到 vim,就一定不能够错过它的分屏功能。输入

1
:sp

就能得到上下两个屏幕,这对于只能显示黑框框的 shell 来说确实是很必要的功能。

当然,如果两个屏幕只能看一个文件,那还不如一个屏幕,选择一个屏幕(如果没有鼠标的话可以用)

1
Ctrl + w + j //(j 的意思是“下”)

来实现切换,然后输入:

1
:open car.txt

来实现文档的切换。

vim 还有一个类似的功能叫做 newtab,可以像浏览器一样显示标签,具体我就不在赘述了,有兴趣的话可以查阅后面的表格。

5.常用功能一览

5.1.跳转

1
2
3
4
5
6
7
8
9
10
11
12
* 当光标停留在一个单词上,* 键会在文件内搜索该单词,并跳转到下一处;
# 当光标停留在一个单词上,# 在文件内搜索该单词,并跳转到上一处;
(/) 移动到 前/后 句 的开始;
{/} 跳转到 当前/下一个 段落 的开始。
g_ 到本行最后一个不是 blank 字符的位置。
fa 到下一个为 a 的字符处,你也可以fs到下一个为s的字符。
t, 到逗号前的第一个字符。逗号可以变成其它字符。
3fa 在当前行查找第三个出现的 a。
F/T 和 f 和 t 一样,只不过是相反方向;
gg 将光标定位到文件第一行起始位置;
G 将光标定位到文件最后一行起始位置;
NG或Ngg 将光标定位到第 N 行的起始位置。

5.2.搜索

1
2
3
4
/str1 正向搜索字符串 str1;
n 继续搜索,找出 str1 字符串下次出现的位置;
N 继续搜索,找出 str1 字符串上一次出现的位置;
?str2 反向搜索字符串 str2 。

5.3.删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
rc 用 c 替换光标所指向的当前字符;
nrc 用 c 替换光标所指向的前 n 个字符;
5rA 用 A 替换光标所指向的前 5 个字符;
x 删除光标所指向的当前字符;
nx 删除光标所指向的前 n 个字符;
3x 删除光标所指向的前 3 个字符;
dw 删除光标右侧的字;
ndw 删除光标右侧的 n 个字;
3dw 删除光标右侧的 3 个字;
db 删除光标左侧的字;
ndb 删除光标左侧的 n 个字;
5db 删除光标左侧的 5 个字;
dd 删除光标所在行,并去除空隙;
ndd 删除(剪切) n 行内容,并去除空隙;
3dd 删除(剪切) 3 行内容,并去除空隙;

5.4.替换

1
2
3
4
5
6
7
8
9
10
11
12
13
s 用输入的正文替换光标所指向的字符;
S 删除当前行,并进入编辑模式;
ns 用输入的正文替换光标右侧 n 个字符;
nS 删除当前行在内的 n 行,并进入编辑模式;
cw 用输入的正文替换光标右侧的字;
cW 用输入的正文替换从光标到行尾的所有字符(同 c$ );
ncw 用输入的正文替换光标右侧的 n 个字;
cb 用输入的正文替换光标左侧的字;
ncb 用输入的正文替换光标左侧的 n 个字;
cd 用输入的正文替换光标的所在行;
ncd 用输入的正文替换光标下面的 n 行;
c$ 用输入的正文替换从光标开始到本行末尾的所有字符;
c0 用输入的正文替换从本行开头到光标的所有字符。

5.5.复制粘贴

1
2
3
4
5
6
7
yy 复制当前行到内存缓冲区;
nyy 复制 n 行内容到内存缓冲区;
5yy 复制 5 行内容到内存缓冲区;
“+y 复制 1 行到操作系统的粘贴板;
“+nyy 复制 n 行到操作系统的粘贴板。
p 小写字母 p,将缓冲区的内容粘贴到光标的后面;
P 大写字母 P,将缓冲区的内容粘贴到光标的前面。

5.6.正则表达式

1
2
3
4
5
6
7
8
9
10
^ 放在字符串前面,匹配行首的字;
$ 放在字符串后面,匹配行尾的字;
\< 匹配一个字的字头;
\> 匹配一个字的字尾;
. 匹配任何单个正文字符;
[str] 匹配 str 中的任何单个字符;
[^str] 匹配任何不在 str 中的单个字符;
[a-b] 匹配 a 到 b 之间的任一字符;
* 匹配前一个字符的 0 次或多次出现;
\ 转义后面的字符。

6.参考链接

vim 入门基础

vim 官方文档