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\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的指导教程。