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

相关文档:Linux vi/vim 编辑器教程

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种插入方式,如下表:

i

插入到当前光标所在字符前面。

I

插入到行首。

a

插入到当前光标所在字符后面。

A

插入到行尾。

o

在当前行下面新建一行,插入到新建行的行首。

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在命令模式下,按一下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

在命令模式下,光标移动到下一个单词的尾字母

E 

在命令模式下,光标移动到下一个单词的尾字母(忽略标点符号)

ge 

在命令模式下,光标移动到上一个单词的尾字母

^ 

在命令模式下,光标移动到第一个非空白字符

在命令模式下, 光标移动到第一个空白字符

$ 

在命令模式下,光标移动到行尾,前面可以加数字,

比如,3$就是每3行的行尾

gg 

在命令模式下, 光标移动到文件的第一行的行首,

也可以用=[[

在命令模式下, 光标移动到文件的最后一行的行首,

也可以用=]]

f 

在命令模式下,在光标所在行查找字符,

比如,按下fx光标就移动到当前行第一次匹配的x字母上,

3fd光标就移动到第3次匹配的d字母上

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)删除

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 

删除所有行

删除两行之间的空白行。

如果两行之间没有空白行,

则两行合并成一行

10、复制和粘贴

vim(vi)中复制和粘贴命令的用法如下表:

yy

复制当前行。

nyy 

复制当前行向下n行,例如,

2yy就是复制当前行和下一行。

p

粘贴到当前光标所在行的下一行。

P

粘贴到当前光标所在行的上一行。

:1,10 co 20

复制第1行到第10行,

并且粘贴到第20行之后。

v/V

在命令模式下,按vV进入可视模式,

在使用jklh方向进行选中,最后按y进行复制。

ddp

在命令模式下,交换当前行和下一行的位置。

xp

交换当前字符和之后的字母的位置。

11、剪切

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

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

12、退出

vim(vi)中退出命令的用法如下表:

:wq

保存退出

ZZ

保存退出

ZQ

不保存退

:q!

忽略所有改变强制退出

:e!

丢弃所有改变打开原文件

13、窗口操作

vim(vi)中窗口相关的用法如下表:

: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命令

例如,

1)调用ls命令

:!ls

2)perl脚本语法检测,以不退出vim,

:!perl -c script.pl

3)挂起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将使用相同的语法元素,并使用相同的颜色方案。

相关文档:Linux vi/vim 编辑器教程

推荐文档