vim
vi:visual interface
vim:vi improved
配置文件:
/etc/vimrc
~/.vimrc
配置文件的指令可以在扩展模式下临时启用或关闭(当前终端有效,重开终端会读取配置文件):
1、行号
显示行号:set number,set nu
取消显示:set nonu。
2、自动缩进
启用:set ai
禁用:set noai
3、高亮搜索
启用:set hlsearch
禁用:set nohlsearch
4、语法高亮
启用:syntax on
禁用:syntax off
5、忽略字符大小写
启用:set ic
禁用:set noic
6、paste模式
粘贴保留格式:set paste
用法:
vim [options] [file ..]
+[num]:打开文件后,直接让光标处于第#行的行首。如果不指定num,则打开后光标处于最后一行。
+/{patern}:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首。
三种模式:
1、常规模式
2、插入模式
3、扩展模式
模式转换:
1、常规模式->插入模式
i:insert,在光标所在处输入。
a:append,在光标所在处后方输入。
o:在光标所在处下方打开一个新行。
O:在光标所在处的上方打开一个新行。
I:在光标所在行的行首输入。
A:在光标所在行的行尾输入。
2、插入模式-->命令模式
直接按ESC键
3、常规模式->扩展模式
:(冒号)
关闭文件:
ZZ:保存并退出。
ZQ:不保存退出。
:q 退出,文件未修改。
:q! 强制退出,不保存退出。
:wq 保存并退出。
:x 保存并退出。
:wqall 保存所有文件并退出。
:wall 保存所有文件。
:qwall 退出所有文件。
光标跳转:
1、字符间跳转
h:左
l:右
k:上
j:下
#hlkj:跳转#个字符
2、单词间跳转
w:下一个单词的词首。
b:当前或前一个单词的词首。
e:当前或后一个单词的词尾。
H:当前页第一行第一个单词。
M:当前页中间一行第一个单词。
L:当前页最后一行第一个单词。
#web:跳转#个单词。
3、行首行尾跳转
^:跳转至行首的第一个非空白字符。
0:跳转至行首。(绝对行首,包括空格,不包括tab)。
$:跳转至行尾。
4、行间跳转
#G:跳转至#行。
1G,gg:跳转至第一行。
G:跳转至最后一行。
5、段间跳转(空行分隔算一段)
}:下一段
{:上一段
6、翻屏
ctrl+f:向下翻一屏,PageDown
ctrl+b:向上翻一屏,PageUp
ctrl+d:向下翻半屏
ctrl+u:向上翻半屏
常规模式下的编辑命令:
1、删除(剪切)
x:删除光标处的字符。
#x:删除光标处起始的#个字符。
xp:交换光标所在处的字符与其后面的字符的位置。
d$:删除光标处到行尾的内容。(包括光标所在处)
D:同上,删除当前光标处至行尾。(包括光标所在处)
d^:删除光标到行首的内容。
dw:删除后一个单词。
dd:删除光标所在的行。
#dd:删除光标所在处的行起始的共#行。
dG:删除当前行至最后一行。
dgg:删除当前行至第一行。
cc:删除光标所在行,并转换为插入模式。
C:删除当前光标位置到行尾,并切换为插入模式。
注:删除的内容会保存在缓存中,粘贴的时候只能粘贴最后一次操作的内容。
2、替换
~:切换大小写。
r:替换光标所在处的字符。
R:进入全局替换模式。
3、复制
y^
y$
y0
ye
yw
yb
yy:复制一整行。
#yy:复制#行。(包括当前行)
4、粘贴
小写p:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的下方;否则,则粘贴至当前光标所在处的后方;
大写P:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的上方;否则,则粘贴至当前光标所在处的前方;
5、撤销
u:撤销此前的操作(可撤销50次)
#u:撤销此前的#次操作。
U:撤销当前行的所有修改。
ctrl+r :撤销上一次撤销。
6、重复执行上一次操作
.(点号)
7、选定区域
v:按字符选定。
V:按行选定。
ctrl+v:按块选定。
扩展模式
1、地址定界
start_position[,end_position]
#:特定的第#行,例如5即第5行。
.:当前行。
$:最后一行。
#,#:指定行范围,左侧为起始行,右侧为结束行。
#,+#:指定行范围,左侧为起始行绝对编号,右侧为相对左侧行号的偏移量。例如:3,+7
.,$-1:从当前行到倒数第二行。
1,$:全文
%:全文
/pattern/:第一次被模式匹配到的行。(从光标所在行向后开始匹配)
/pat1/,/pat2/:从光标所在处起始,第一次匹配到pat1的行至第一次匹配到pat2的行之间的所有行。
2、执行shell命令
:!COMMAND 可不用退出vim,在扩展模式执行命令。
3、读写文件
:r /FILE:读取指定文件内容并插入到光标所在位置。
:r !COMMAND:读取命令执行结果并插入到光标所在位置。(包括标准输出和错误输出)
:w /FILE 另存到file。
4、查找
/PATTERN:从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串。
?PATTERN:从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串。
n:下一个
N:上一个。
5、查找替换
s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用正则表达式。
替换为的内容:不能使用正则表达式,但可以引用。
如果"要查找的内容"部分在模式中使用分组符号,在"替换为的内容"中可以使用后向引用。
使用&符号引用查找到的全部内容。
修饰符:
i:忽略大小写。
g:全局替换,在一行中如果匹配到多次,则全部替换。(默认只匹配每行第一个)
:%s/\/cgroup\/systemd/\/etc\/sysconfig/g 把所有的/cgroup/systemd替换为/etc/sysconfig
可把分隔符替换为其他不常用的符号:
s@
s#
:%s@/cgroup/systemd@/etc/sysconfig@g 分隔符用@替换,避免转义
:%s@\<t\([[:alpha:]]\+\)\>@T\1@g 把所有以小写t开头的单词替换为大写T开头
:%s@\<t[[:alpha:]]\+\>@$er@g 在以t开头的单词后面都加上er
:%s@^#@@ 把#开头的行都删除
6、获取帮助
:help
:help i
示例
1、用查找替换命令删除/tmp/grub.cfg文件中以空白字符开头的行的行首的空白字符;
:%s@^[[:space:]]\+@@
2、用查找替换命令为/tmp/functions文件的每个以空白字符开头的行的行首加上#;
:%s@^[[:space:]]@#&@g
3、为/tmp/grub2.cfg文件的前三行的行首加上#号;
:1,3s@^@#@
4、将/etc/yum.repos.d/CentOS-Base.repo文件中所有的enabled=0替换为enabled=1,所有gpgcheck=0替换为gpgcheck=1;
:%s@\(enabled\|gpgcheck\)=0@\1=1@g
5、替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;
:%s@/etc/sysconfig/init@/var/log@g
6、删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号;
:%s@^#\([[:space:]]\+\)@\1@