Vim是从 vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,linux系统用户最喜欢的文本编辑器。我们初学者主要了解它的模式及快捷键即可。
一.vim的模式
基本上vim可以分为三种模式:命令模式,插入模式和退出模式,其实vim有多种模式,如选择模式和替换模式等,我们只需要掌握这三种即可。
1.命令模式
用vim 打开一个文件刚开始进入的就是命令模式,在这个模式下我们可以控制光标的移动,字符,字或者行的删除,移动复制某段区域,在该模式下可以进入插入模式也可以进入退出模式。
2.插入模式
在插入模式下才可以插入文字,按Esc进入退出模式.
3.退出模式
在退出模式下保存文件或者退出vim,也可以在退出模式下使用man查找函数等。
二、三种模式的转换关系图
命令模式 command (default) 移动光标,复制,剪切,粘贴,搜索,撤销,重做…… ,进入其他模式
ZZ: 保存并退出
ZQ: 不保存直接退出
插入模式 insert : 修改编辑文件内容
*i: 光标在哪,就在哪进入插入模式
*I: 光标移到所在行的行首,同时进入插入模式
a: 光标向后退一格,同时进入插入模式
*A: 光标移到所在行的行尾,同时进入插入模式
*o: 光标所在处向下创建一个新行,同时进入插入模式,光标在新行行首
*O: 光标所在处向上创建一个新行,同时进入插入模式,光标在新行行首
回到command : Esc
退出模式 exit: 退出,保存,替换
: 进入退出模式
*q 退出
*q! 强制退出不保存
*w 保存
*w! 强制保存(仅限root及文件的owner)
*wq或x 保存并退出
*wq!或x! 强制保存并退出 (仅限root及文件的owner)
回到command: EscEsc 或ENTER(左下方的:不会立即消失)
r /path/filename 在光标所在行向下粘贴指定路径的文件的内容
w /path/newfilename 将当前文件另存为到指定路径的新文件中。
r! command 在光标所在行向下粘贴命令的输出结果
.! command 将光标所在行替换并粘贴命令的输出结果
:# 光标移到第#行
选择模式
v 进入字符选择模式
d c y
V 进入整行选择模式
d c y
三.vim在命令模式下的各种快捷键
(1).移动光标
1.vim 可以使用小写英文字母 h j k l 分别控制光标左 下 上 右移动,也可以使用箭头
2.Ctrl+b 屏幕往后移动一页
3.Ctrl+f 屏幕往前移动一页
4.Ctrl+u 屏幕往后移动半页
5.Ctrl+d 屏幕往前移动半页
6.Shift+g == G 移动到文章的最后
7.Shift+4 == $ 移动到光标所在行的行尾
8.Shift+6 == ^ 移动到光标所在行的行首
9.w 光标跳到下个字的开头
10.e 光标跳到下个字的字尾
11.b 光标回到上个字的开头
12.#l 例如:5l ,56l 光标移动到该行的第'#'个位置
13.gg 进入到文本的开始
(2).删除文字
1.x 每按一次删除光标所在位置的一个字符
2.#x : 6x 删除光标所在位置的"后面"(包含自己在内)6个字符
3.Shift+x == X 每按一次,删除光标所在位置的前一个字符
4.Shift+#x == #X 20X 删除光标所在位置的前面20个字符
5.dd 删除光标所在行
6.#dd 6dd 从光标所在行开始删除6行
(3).复制
1.yw 将光标所在之处到字尾的字符复制到缓冲区中
2.#yw 6yw 复制6个字符到缓冲区
3.yy 复制光标所在行到缓冲区
4.#yy 6yy 拷贝从光标所在的该行"往下数"6行文字
5.p 将缓冲区内的字符贴到光标所在位置
注意:所有与y有关的复制命令都必须与p配合才能完成复制粘贴功能
(4).替换
1.r 替换光标所在处的字符
2.R 替换光标所到之处的字符,知道按下Esc键为止
(5).撤销上一次的操作
u 回到上一个操作,按动多次'u'可以执行多次回复
(6).更改
1.cw 更改光标所在处的字到字尾处
2.c#w c3w 表示更改三个字
(7).跳至指定行
1.Ctrl+g 列出光标所在行的行号
2.#G 15G 表示移动光标到文章的第15行行首
四、 以二进制方式打开文件
vim –b binaryfile
扩展命令模式下,利用xxd命令转换为可读的十六进制
:%!xxd
编辑二进制文件
扩展命令模式下,利用xxd命令转换回二进制
:%!xxd–r
保存退出
可视化显示颜色
^[[1;31mhello^[[0m ^[ ctrl+v ;esc
五、地址定界(详细内容可以看sed)
:start_pos,end_pos(开始位置,起始位置)
# 具体第#行,例如2表示第2行
#,# 从左侧#表示起始行,到右侧#表示结尾行
#,+# 从左侧#表示的起始行,加上右侧#表示的行数
:2,+3 表示2到5行
. 当前行
.,$-1 当前行到倒数第二行
% 全文, 相当于1,$
/pat1/,/pat2/
从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束
#,/pat/
/pat/,$
查找
/PATTERN: 从当前光标所在处向文件尾部查找
?PATTERN: 从当前光标所在处向文件首部查找
n: 与命令同方向
N: 与命令反方向
查找并替换
:2s/bin/hello/gic
g 表示将所匹配行的全行的所有的bin换成hello
i 表示忽略大小写,无论大写的Bin还是小写的bin都替换为hello
c 替换每个匹配字符串时,询问
如果要替换的关键字当中包含/,则将替换所用的间隔符换成@或#,如下
:%s@bin/bash@sbin/nologin@gi
练习:
1、复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符
:%s/^[[:space:]]\+//gi
2.、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号
:%s/\(^[[:space:]]\+.*$\)/#\1/gi
六、其他扩展知识
1.undo
u 一步步撤消
U 将当前行一次性还原到最初打开状态,注意不能换行
:e! 一次性将整个文件还原
2. redo
ctrl+r 重做
3.vim FILE1 FILE2 FILE3 ... 多文件模式
:next 下一个
:prev 前一个
:first 第一个
:last 最后一个
:wall 保存所有
:qall 退出所有
:wqall
4.多文件分割
vim -o|-O FILE1 FILE2 ...
-o: 水平分割
-O: 垂直分割
在窗口间切换:Ctrl+w, Arrow
5. 单文件窗口分割:
Ctrl+w,s: split, 水平分割
Ctrl+w,v: vertical, 垂直分割
ctrl+w,q: 取消相邻窗口
ctrl+w,o: 取消全部窗口
:wqall退出
6.配置文件:永久有效
全局:/etc/vimrc
个人:~/.vimrc
7.扩展模式:当前vim进程有效
(1) 行号
显示:set number, 简写为set nu
取消显示:set nonumber, 简写为set nonu
(2) 忽略字符的大小写
启用:set ic
不忽略:set noic
8. 故障恢复
未保存修改,vim进程直接意外中断,可利用.文件名.swap来恢复
vim -r 文件名 enter
还原结束后,请自行删除.swap文件