vi:visual interface 模式化编辑器。
vim的模式:
1.编辑模式:
输入的内容都被认为是命令。此模式是vim打开的默认模式。
编辑模式-->末行模式
输入:(冒号)。
2.输入模式:
输入的内容会被认为是文件的内容。
编辑模式-->输入模式
i:在光标所在处前面插入。
a;在光标所在处后面插入。
o:在光标所在行的下方新增空白行并转换至输入模式。
I;在光标所在行的行首插入。
A:在光标所在行的行尾插入。
O:在光标所在行的上方新增空白行并转换至输入模式。
c:先删除指定范围内的内容,再转换到输入模式。和d命令用法类似。
C:删除光标到行尾的内容,并转入输入模式。
输入模式-->编辑模式
使用Esc键返回。
3.末行模式:
在屏幕最下放出现命令提示符,可以输入命令。
输入:冒号进入末行模式。
末行模式-->编辑模式
按Esc键。最好按2次。
4.可视化模式:
内容较多是可以启用此模式,支持编辑模式下的命令。在编辑模式下输入:
v:按字符选取。
V:按矩形块选举。即按行选取。
vim:vi improved。
启动vim:
#vim
#vim [OPTION] FILE ...
[OPTION]
+NUM 光标处在第NUM行。省略NUM的话光标处在最后一行。
例如:
#vim +9 /etc/inittab
#vim + /etc/inittab
+/PATTERN 光标处在第一次符合PATTERN内容的行首。
例如:
#vim +/^oot /etc/inittab
-o 水平拆分窗口。
-O 垂直拆分窗口。
#vim FILE1 FILE2...同时打开多个文件。
末行模式下:
:next 切换至后一个文件。
:prev 切换至前一个文件。
:first 切换至第一个文件。
:last 切换至最后一个文件。
退出vim:
末行模式下:
:w 保存文件。
:q 退出
:q! 不保存强行退出。
:wq 保存退出。等同于x。
:w! 强制保存,只有管理员可以,前提是文件不受其他策略限制。
:qa 打开多个文件下退出所有文件。
:wqall 保存所有文件并退出。
编辑模式下:
ZZ 保存退出。等同于:wq。
ZQ 强行退出。等同于:q!。
字符间跳转(编辑模式下):
h;向左
j;向下
k;向上
l;向右
可以使用NUM来指定移动字符的个数:
例如:
3l 5h
光标跳转:
w;跳到下个单词的词首。
NUMw:一次跳NUM个单词。
e;跳转至当前或下一个单词的词尾。
NUMe:
b:跳转至当前或前一个的词首。
NUMb:
行内跳转:
^;行首的第一个非空白字符。
0;绝对行首。
$;绝对行尾。
行间跳转;
NUMG;跳到第NUM行。不带NUM直接跳转到文件尾部。
末行模式下:
:NUM 跳到第NUM行。
翻页操作(编辑模式下):
ctrl+f 向文件尾部翻一屏。
ctrl+b 向文件首部翻一屏。
ctrl+d 向文件尾部翻半屏。
ctrl+u 向文件首部翻半屏。
删除:
x;删除光标所在处的字符
NUMx 删除从光标所在处及向后的共NUM个字符。
X;删除光标所在处的前一个字符
NUMX 从光标所在处向前删除NUM个字符。
d;删除行。可以和跳转操作配合使用,只有向后才包含光标所在行。
NUMd;
dd;删除当前行。
NUMdd:删除包括光标所在行在内的共NUM行。
D;删除光标后方行的内容,同时删除光标所在的内容。
定界:
末行模式下:
地址定界:从开始行到结束行。
ADDR1,ADDR2
. 当前行。
$ 最后行。
相对地址界定:
+NUM 包含本行的向后NUM行。
-NUM 包含本行的向前NUM行。
/PATTERN1/,/PATTERN2/
从第一次被PATTERN1匹配到的行开始至第一次被PATTERN2匹配的行结束。不包括当前行。
例如:
:1,50 指定1到50行。
:1,+5 从第1行到第6行,向后5行。
:2,13d 删除2-13行的内容。
:.,+5d 删除当前行开始共计5行。
:$,-3d 删除尾部三行。
粘贴:
p;
整行:当前光标所在行的下行粘贴。
单词或行的部分:在当前光标所在处后。
P:
整行:当前光标所在行的上行粘贴。
单词或行的部分:在当前光标所在处前。
复制:
y:
yy:复制当前行。
NUMyy 复制光标所在处向后NUM行。
:/PATTERN1/,/PATTERN/y 末行模式下支持地址定界。
撤销编辑操作:
u:撤销上一次编辑操作。
uuu...:连续按u连续测撤销操作。默认VIM保留最近50次操作。
NUMu;撤销最近NUM次的编辑操作。
ctrl+r;撤销最近一次的撤销操作。
重复操作:
.:重复前一次的编辑操作。
查找功能:
搜索到的内容高亮显示。支持正则表达式。
/KEYWORD
?KEYWORD
n 下一个
N 上一个
替换功能:
编辑模式下:
r: 替换单个字符。
R:进入替换模式下,敲键盘上的键会替换提字符。
末行模式下:
ADD1,ADD2s/PATTERN/STRING/flag
PATTERN:支持正则表达式。
STRING:不支持正则表达式,但是可以使用后向引用。
flag:
g;全局替换。出现几次替换几次。不带次参数默认替换一次。
i:忽略大小写。
ADD:
地址定界。
&;用于引用找到的字符串。
%:表示全文,等于1,$
分隔符是可以自定义的。例如使用### @@@等,不要和要查找内容冲突即可。
例如:
:1,20s/\<u\([[:alpha:]]\{3\}e\)\>/U\1/g 将1-20行中已u开头,e结尾,中间3个字符的u,替换成U。
:1,20s/n..e\>/&r/g 使用&符号引用查找到的整个字符串。
%s/\/etc\/sysconfig\network/&s/ 路径使用\来做转义。
末行模式高级应用:
1.和shell的交互,命令完成后按回车返回vim:
:!COMMAND
例如:
:!ls /tmp
2.另存一部分内容:
:ADD1,ADD2w FILE
例如:
:1,50w /tmp/a.txt
3.从其他文件中读取内容并填充当前光标所在行之后。
:r FILE
4.窗口拆分:
水平拆分:
ctrl+w松开后按s。
垂直拆分:
ctrl+w松开后按v。
光标切换;
ctrl+w松开后按方向键。
关闭光标所在窗口:
ctrl+w松开后按q。
vim的定制:
仅对当前的vim进程有效。
末行模式:
:set [no][MODE] 默认不带参数显示所有定制的选项。
[MOED]:
nu number,显示行号。
ai autoindent,自动缩进。
ic ignorecase,忽略大小写。
hlsearch 高亮显示查找到的内容。
:syntax on|off 语法高亮。
vim的配置文件:
使用""双引号进行注释。
全局:
/etc/vimrc
局部:
~/.vimrc
vimtutor
vim的指导教程。