Vim是一个类似于vi的著名的功能强大、高度可定制的全屏幕文本编辑器。
用法: vim [参数] [文件 ..] 编辑指定的文件 或: vim [参数] - 从标准输入(stdin)读取文本 或: vim [参数] -t tag 编辑 tag 定义处的文件 或: vim [参数] -q [errorfile] 编辑第一个出错处的文件
其工作模式有:
- 编辑模式:命令模式
- 输入模式
- 末行模式
模式间转换:
编辑模式>输入模式可通过以下字母转换:
i: insert,
a:append ,
o:new line,切换到新行输入
I: 行首
A:行尾
O(大写):上方新建行
输入模式>编辑模式:
ESC键
编辑模式>末行模式:
:键
末行模式>编辑模式:
ESC键
打开vim:
# vim
# vim /PATH/TO/SOMEFILE
+#:#为行号;
+/PATTERN
关闭vim:
:q退出
:q!不保存退出
:wq保存后退出
:x 保存退出
ZZ:保存退出
光标跳转(编辑模式下):
字符间跳转:
h:当前光标的左一个字符
l:当前光标的右一个字符
j:当前光标的下一个字符
k:当前光标的上一个字符
单词间跳转:
w:后单词的词首
e:当前或后一个单词的词尾;
b:当前或前一单词的词首;
行内跳转:
^: 跳转至行首的第一个非空白字符;
0:跳转至行首;
$: 跳转至行尾;
行间移动:
#G: #表示第几行
1G, gg:首行
G:最后一行
句间移动:
):句首
(:句尾
段落间移动:
}:段首
{:段尾
编辑命令:
字符编辑:
x: 删除光标所在处的字符
#x:删除当前光标向后(#)个字符
xp: 当前字符与其后一个字符交换
r: 替换光标所在处的字符;
删除命令:
d:
d^:删除当前光标处到句首的内容。
d$:删除当前光标处到句尾的内容。
d0:与d^相同
dw, de, db
dd:删除整行
注意:删除的内容会被vim编辑器保存至缓冲区当中;
粘贴:p (paste, put)
如果此复制或删除的内容不是一个完整行
p:粘贴至当前光标所在处后面;
P:粘贴至当前光标所在处前面;
如果复制的内容是完整行(可不止一行)
p: 粘贴至当前光标所在行下方;
P:行上方;
复制命令:y, yank
y
y$, y^, y0:用法基本与删除相同
ye, yw, yb
yy: 复制行
改变命令:c, change
c$, c^, c0
cb, ce, cw
cc:
撤消此前的编辑操作:
u: undo:撤消此前编辑操作;
#u
Ctrl+r:恢复此前的撤消操作
.: 重复前一个编辑操作
翻屏操作:
Ctrl+f: 向后一屏;
Ctrl+b:向前一屏;
Ctrl+d: 向后半屏
Ctrl+u: 向前半屏
vim内建教程:
vimtutor
vim的末行模式:
(1) 地址,定界
:start_pos,end_pos
#:第#行;
#,#
#,+#
.: 当前行
$: 最后一行
%: 全文,相当于1,$
/pat1/:第一次被此模式所匹配到的行;
#,/pat1/
/pat1/,/pat2/
后可跟编辑命令:
d, y
w, r
(2) 查找
/PATTERN:向尾部进行
?PATTERN:向首部进行
n: 与命令同方向
N:与命令反方向
(3) 查找替换
s: 在末行模式下,在地址定界的范围内完成查找替换操作;
s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用后向引用符号,以引用前面模式中的分组括号所匹配到的内容;
\1, \2, ...
&:引用"要找的内容"匹配到的整个内容;
修饰符:
i: 忽略大小写
g: 全局替换
/:用于分隔符,所以,要查找的内容或替换为的内容中出现此符号,要使用\对其转义,使用格式:\/
分隔符可替换为其它字符:例如@,#等;
多文件模式:
vim FILE1 FILE2 ...
:next
:first
:prev
:last
:wqall
:q!all
多文件窗口分割:
vim -o|-O FILE1 FILE2 ...
Ctrl+w, ARROW
单文件窗口分割:
Ctrl+w, s: split, 水平分割
Ctrl+w, v: vertical, 垂直分割
定制vim的某些工作特性:
(1) 行号
显示:set nu
禁用:set nonu
(2) 括号匹配
显示:set sm
禁用:set nosm
(3) 自动缩进:
set ai
set noai
(4) 高亮搜索
set hlsearch
set nohlsearch
(5) 语法着色
syntax on
syntax off
(6) 忽略字符大小写
set ic
set noic
:help 获取帮助
:help SUBJECT
特性设定的永久生效方式:
全局配置文件:/etc/vimrc
用户个人的配置文件:~/.vimrc
作业:复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符
:%s/^[[:space:]]/g
复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留
:%s/^[[:space:]]/#/g
替换/tmp/functions文件中的/etc/sysconfig/init为/var/log
:%s#/etc/sysconfig#/var/log#g
删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#
:%s/^[#+[:space:]]//q