vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能,下面看一下具体的命令。

1、'/'查找历史记录查看

指令模式(command mode)下,按一下'/'键,然后按上下方向键,就可以查看之前的查找记录。如果想要执行上一次的查找,命令模式下输入':',进入末行模式(Last line Mode),然后输入'/'回车即可执行。

2、打开vim(vi)

1)直接在终端输入 vim或vi命令即可打开

[root@mylab]# vim

2)用vim(vi)创建或编辑一个文件

[root@mylab]# vim filename

3、文件命令

1)打开一个文件

[root@mylab]# vim filename

2)同时打开多个文件

[root@mylab]# vim file1 file2 file3 ...

3)在vim编辑器中打开一个新文件

:open file

4)在vim编辑器中使用新窗口中打开文件

:split file

5)在vim编辑器中切换到下一个文件

:bn

6)在vim编辑器中切换到上一个文件

:bp

7)查看当前打开的文件,如果文件正在被编辑则文件名会用方括号([])括起来

:args

8)在vim编辑器中打开远端文件,例如,ftp或共享目录

:e ftp://192.168.11.56/vim.txt
:e \\drive\test\vim.txt

4、模式切换

命令模式(command mode or normal mode):在其它模下按ESC或Ctrl + [即可进入该模式。
插入模式(insert mode): 在命令模式下,按i键 即可进入该模式。
可视模式(visual mode):在命令模式下,按v或V进入可视模式,该模式下通过改变光标位置选中文字。

5、进入插入模式6种方式

1)i:插入到当前光标所在字符前面。
2)I:插入到行首。
3)a:插入到当前光标所在字符后面。
4)A:插入到行尾。
5)o:在当前行下面新建一行,插入到新建行的行首。
6)O:在当前行上面新建一行,插入到新建行的行首。

6、vim(vi)查找

1)/ :顺序查找,在命令模式下,按 / 键后面 输入要查找的内容,按n键查找下一个,按N键查找上一个。
2)?:反序查看,在命令模式下,按?键后面 输入要查找的内容,按n键查找下一个,按N键查找上一个。它与'/'的查找方向是相反的。
3)设置忽略大小写

:set ignorecase
:set noignorecase

5)如果搜索的单词比较长,可以通过#*查找上一个或下一个匹配的单词
6)设置搜索结果高亮显示

:set hlsearch
:set nohlsearch

:nohlsearch 关闭当前本次搜索结果高亮显示,下次重新搜索还是会高亮显示搜索结果。

7)循环搜索(默认值)

:set wrapscan 
:set nowrapscan #只搜索一次

8)输入关键字的时候高亮显示

:set incsearch 
:set noincsearch 

7、vim(vi)替换

1)替换单个字符

在命令模式下,按一下r键,再按一下其它键将光标所在字符替换成所按的字符。

2)替换多个字符

:s/oldstr/newstr/ 将当前行中第一次匹配的oldstr替换成newstr。 :s/oldstr/newstr/g 将当前行中所有匹配的oldstr替换成newstr。 :%s/oldstr/newstr/ 将所有行中每行第一次匹配的oldstr替换成newstr。:%s/oldstr/newstr/g 将所有行中所有匹配的oldstr替换成newstr。 :10,20s/^/ /g 将10到20行每行的行首加4个空格。 ddp 在命令模式下,交换当前行和下一行的位置。

8、光标移动

1)简单移动(上下左右移动光标)

h 向左移动光标
l 向右移动光标
k 向上移动光标
j 向下移动光标

上面几个按键可以与数安组合比如,20j就是光标向下移动20行,5h就是光标向左移动5个字符。vim中有许多命令可以与数字组比如 10x就是删除10个字符

2)移动到单词的首字母

w 在命令模式下,移动到下一个单词的首字母
b 在命令模式下,移动到上一个单词的首字母

3)移动到单词的尾字母

e 在命令模式下,光标移动到下一个单词的尾字母
ge 在命令模式下,光标移动到上一个单词的尾字母
^ 在命令模式下,光标移动到第一个非空白字符
0 在命令模式下, 光标移动到第一个空白字符
$ 在命令模式下,光标移动到行尾,前面可以加数字,比如,3$就是每3行的行尾
gg 在命令模式下, 光标移动到文件的第一行的行首,也可以用=[[
G 在命令模式下, 光标移动到文件的最后一行的行首,也可以用=]]
f 在命令模式下,在光标所在行查找字符,比如,按下fx光标就移动到当前行第一次匹配的x字母上,3fd光标就移动到第3次匹配的d字母上
F f用法一样,就是查找方向是向左查找

4)移动指定行,在末行模式直接输入行号,例如,

:240 移动到光标到240行

5)屏幕滚动快捷键

Ctrl + e 屏幕向上滚动一行 Ctrl + y 屏幕向下滚动一行 Ctrl + d 屏幕向上滚动半屏 Ctrl + u 屏幕向下滚动半屏 Ctrl + f 屏幕向上滚动一屏 Ctrl + b 屏幕向下滚动一屏

9、撤销和恢复

u 撤销一次操作
U 撤销所有的行操作
Ctrl + r 恢复

10、vim(vi)删除

x 删除当前光标所在字符
3x 删除当前光标所在字符向后3个字符
X 删除当前光标所在字符的前一个字符(X = dh)
dl 删除当前光标所在字符(dl = x)
dh 删除当前光标所在字符的前一个字符
dd 删除当前行
dj 删除上一行
dk 删除下一行
di [tag] 删除成对出现的符号之间的内容,例如,di' 删除单引号之间的内容 ,类似的还有di'di(di<di{
dt [tag] 删除光标所在字符到指定的[tag]字符之间的字符,例如,dt" 删除当前光标所在字符与每一个匹配的双引号之间字符,但不删除匹配的双引号。
10d 删除当前行开始向下10行
D 删除光标所在字符到行尾的之间字符(D = d$)
d$ 删除光标所在字符到行尾的之间字符
kdgg 删除当前行上面的所有行
jdG 删除当前行下面的所有行
:1,10d 删除第1到第10行
:11,$d 删除第11行到末尾
:1,$d 删除所有行
J 删除两行之间的空白行。如果两行之间没有空白行,则两行合并成一行

10、复制和粘贴

yy 复制当前行
nyy 复制当前行向下n行,例如,2yy就是复制当前行和下一行
p 粘贴到当前光标所在行的下一行
P 粘贴到当前光标所在行的上一行
:1,10 co 20 复制第1行到第10行,并且粘贴到第20行之后
在命令模式下,按v或V进入可视模式,在使用jklh方向进行选中,最后按y进行复制
ddp 在命令模式下,交换当前行和下一行的位置。
xp 交换当前字符和之后的字母的位置

11、剪切

在命令模式下,按v或V进入可视模式,在使用jklh方向进行选中,最后按d进行剪切

ndd 剪切光标所在行开始向下n行
:1,10d 剪切第1行到第10行
:1,10m 20 剪切第1行到第10行,并且粘贴到第20行之后

12、退出

:wq 保存退出
ZZ 保存退出
ZQ 不保存退
:q! 忽略所有改变强制退出
:e! 丢弃所有改变打开原文件

13、窗口操作

:split 拆分窗口,在原来vim的窗口上新建一个窗口
:split file 在原来的vim的窗口上新建一个窗口打开或编辑文件
split是横向的分割,要想竖向拆分,则要用vsplit
Ctrl + ww 光标移动到下一个窗口(可循环)
Ctrl + wj 光标移动到下一个窗口(不可循环)
Ctrl + wk 光标移动到上一个窗口(不可循环)
关闭光标所在窗口
:close 最后一个窗口不能使用此命令关闭
:q 退出vim,最后一个窗口用些命令退出
ZZ 保存退出
:only 关闭除了当前窗口的所有窗口
:qa 关闭所有窗口

宏录制

在命令模式下,按q键,然后在按一个键指定宏的名字,这里我就按a键,宏的名字就是a,这时录制开始,比如这时我按dd删除一行,然后按q键结束录制。@a执行刚才录制的命令,就是删除一行。

用@加上宏名执行录制的宏。 @@:重复执行上次的@+宏的名字命令一次

13、在vim中运行Linux命令

:!Command Command代表Linux命令

例如,

调用ls命令

:!ls

perl 脚本语法检测,你可以不退出vim,很方便

:!perl -c script.pl

挂起vim到后台

:suspend Ctrl + Z 返回vim,在终端输入fg即可

14、vim中进行代码注释

例如,python语言注释是用#,下面看一下怎么加注释

:3,5s/^/#/g 注释第3行到每5行
:3,5s/^#//g 取消第3行到每5行的注释
:1,$s/^/#/g 注释所有行
:%s/^/#/g 注释所有行,这个更快

添加批量注释 ctrl+v 进入列编辑模式,向下或向上移动光标,把需要注释的行的开头标记起来,然后按大写的I(shift+i),再插入注释符,比如"#",再按Esc,就会全部注释了。

批量去掉注释 ctrl+v 进入列编辑模式,横向选中列的个数(如"#"注释符号,需要选中两列),然后按d, 就会删除注释符号。

15、其它非编辑命令

. 执行最后的命令
set nu 或 set number 显示行号
:syntax 列出定义的语言项
:syntax 清除定义的语法规则
:syntax case match 区分大小写、int和Int将被视为不同的语法元素。
:syntax case ignore 不区分大小写、int和Int将使用相同的语法元素,并使用相同的颜色方案。