LINUX系列--VIM操作

Vim是从vi发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。

写入\保存\退出


1
2
3
4
5
6
7
8
9
10
11
12
13
14
:q[uit]                 " 退出
:q! " 强制退出
:w[rite] " 保存
:w! " 强制保存,能不能保存成功取决于用户对文件的权限
:w ! sudo tee % " 如果没有权限保存,试试这个命令
ZZ " 两个大写的 Z,没有修改直接退出,有修改保存后退出

:w newfilename " 另存为新文件
:1, 10 w newfilename " 将 1 到 10 行的内容另存为新文件
:1, 10 w >> filename " 将 1 到 10 行的内容另存为新文件
:r filename " 将目标文件的内容追加到当前光标下一行
:3 r filename " 将目标文件的内容追加到第 3 行一下

:! ls " 暂时离开 Vim 查看当前目录的文件,回车后返回 Vim

光标移动


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
h           " 方向键 ←
j " 方向键 ↓
k " 方向键 ↑
l " 方向键 →

0 " 移动到行首
$ " 移动到行尾的回车符
g_ " 移动到行尾最后一个非空字符
gg " 移动到第一行
G " 移动到最后一行"

w " 移动到下一个单词开头
e " 移动到单词的结尾
b " 移动到单词的开头

" 不常用
nh " 向左移动 n 格,n 为数字
nl " 向右移动 n 格
nj " 向下移动 n 行
nk " 向上移动 n 行
n<space> " 向右移动 n 格,同 nl

H " 移动到当前屏幕第一行的第一个字符
M " 移动到当前屏幕中间行的第一个字符
L " 移动到当前屏幕最后一行的第一个字符
+ " 移动到非空白字符的下一行
- " 移动到非空白字符的上一行

:n<cr> " 跳转到第 n 行

翻页


1
2
3
4
<c-f>   " 向下移动一页
<c-d> " 向下移动半页
<c-b> " 向上移动一页
<c-u> " 向上移动半页

查找和替换


1
2
3
4
5
6
7
8
/word   " 从光标位置向下搜索 word 单词
?word " 从光标位置向上搜索 word 单词
n " 英文字母 n,根据 / 或 ? 搜索的方向定位到下一个匹配目标
N " 与 n 相反,定位匹配目标

:n1,n2s/word1/word2/g " n1, n2 表示数字,替换 n1 行到 n2 行的单词
:1,$s/word1/word2/g " 全文替换,也可以写成 :%s/word1/word2/g
:1,$s/word1/word2/gc " 全文替换,并出现确认提示

复制\粘贴\删除


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
x           " 向后删除一个字符
nx " 向后删除 n 个字符
X " 向前删除一个字符
nX " 向前删除 n 个字符

dd " 删除当前行
ndd " 向下删除 n 行
d1G / dgg " 删除第一行到当前行的数据
dG " 删除当前行到最后一行的数据
d$ " 删除当前字符到行尾
D " 删除当前字符到行尾
d0 " 从行首删除到当前字符

yy " 复制当前行
Y " 复制当前行
nyy " 从当前行开始复制 n 行
y1G / ygg " 从第一行复制到当前行
yG " 从当前行复制到最后一行
y0 " 从行首复制到当前字符
y$ " 从当前字符复制到行尾

p, P " 黏贴,p 黏贴到光标下一行,P 黏贴到光标上一行
yyp " 复制并粘贴
ddp " 删除并粘贴,相当于下移当前行


"+y " 复制本文到系统剪切板
"+p " 粘贴系统剪切板到 Vim(不会影响文本格式)

插入


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
i   " 在光标前进入 insert 模式
I " 在当前行左边第一个非空字符前进入 insert 模式,类似其他编辑器的 <c-a> 快捷键
a " 在光标后进入 insert 模式
A " 在当前行右边第一个非空字符前进入 insert 模式,类似其他编辑器的 <c-e> 快捷键
o " 在光标的下一行插入
O " 在光标的上一行插入
s " 删除当前字符,并进入 insert 模式
S " 删除当前行,并进入插入模式

vc " 删除当前字符,并进入 insert 模式
cc " 删除当前行,并进入插入模式
c0 " 删除光标位置到行首,并进入 insert 模式
cg_ " 删除光标位置到行尾最后一个非空字符,并进入 insert 模式
ce " 删除光标位置到单词末尾,并进入 insert 模式
cw " 删除光标位置到单词末尾,并进入 insert 模式
ciw " 删除当前单词,并进入 insert 模式
cip " 删除整个段落,并进入 insert 模式
ci( " 删除当前括号内的内容,并进入 insert 模式 适用于 ([{<'` 等所有成对的标签

撤销重做


1
2
3
u       " 撤销
<c-r> " 重做
. " 重复完成操作

替换


1
2
r   " 替换单个字符,自动返回 normal 模式
R " 连续替换多个字符,手动 <esc> 返回 normal 模式

大小写


1
2
3
4
5
6
7
8
9
10
11
12
13
14
~       " 当前字符大小写反转
g~~ " 正行字符大小写反转
vu " 当前字符小写
vU " 当前字符大写
vU " 当前字符大写
viwu " 当前字符小写
viwU " 当前字符大写
ggguG " 文本所有字符小写
gggUG " 文本所有字符大写

:%s/\<./\u&/g " 将所有单词首字母大写(需要使用 :nohls 去掉高亮)
:%s/\<./\l&/g " 将所有单词首字母小写
:%s/.*/\u& " 将每行第一个字母大写
:%s/.*/\l& " 将每行第一个字母小写

多窗口操作


1
2
3
4
5
6
7
8
9
10
11
:sp filename        " 上下分割窗口
:vsp filename " 左右分割窗口

<c-w>h[j[k[l]]] " 根据方向键移动光标到该方向的窗口上

<c-w>r " 顺时针转动窗口
<c-w>R " 逆时针转动窗口
<c-w>x " 对调左右或上下两个对应的窗口

<c-w>q " 退出窗口
:q " 退出窗口

多文件编辑


1
2
3
4
5
6
7
8
vim file1 file2     " 同时打开两个文件

:files " 查看现在编辑的文件列表,%a 代表正在操作哪个文件
1 %a "file1" line 1
2 "file2" line 0

:n " 跳到下一个文件,这里的 n 就是字母
:N " 跳到上一个文件
0%