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种插入方式,如下表:
|
插入到当前光标所在字符前面。 |
|
插入到行首。 |
|
插入到当前光标所在字符后面。 |
|
插入到行尾。 |
|
在当前行下面新建一行,插入到新建行的行首。 |
|
在当前行上面新建一行,插入到新建行的行首。 |
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)替换多个字符
|
将当前行中第一次匹配的oldstr替换成newstr。 |
|
将当前行中所有匹配的oldstr替换成newstr。 |
|
将所有行中每行第一次匹配的oldstr替换成newstr。 |
|
将所有行中所有匹配的oldstr替换成newstr。 |
|
将10到20行每行的行首加4个空格。 ddp 在命令模式下, 交换当前行和下一行的位置。 |
8、光标移动
1)简单移动(上下左右移动光标)
|
向左移动光标 |
|
向右移动光标 |
|
向上移动光标 |
|
向下移动光标 |
上面几个按键可以与数安组合比如,20j就是光标向下移动20行,5h就是光标向左移动5个字符。vim中有许多命令可以与数字组比如 10x就是删除10个字符
2)移动到单词的首字母
w
在命令模式下,移动到下一个单词的首字母b
在命令模式下,移动到上一个单词的首字母
3)移动到单词的尾字母
|
在命令模式下,光标移动到下一个单词的尾字母 |
|
在命令模式下,光标移动到下一个单词的尾字母(忽略标点符号) |
|
在命令模式下,光标移动到上一个单词的尾字母 |
|
在命令模式下,光标移动到第一个非空白字符 |
|
在命令模式下, 光标移动到第一个空白字符 |
|
在命令模式下,光标移动到行尾,前面可以加数字, 比如, |
|
在命令模式下, 光标移动到文件的第一行的行首, 也可以用 |
|
在命令模式下, 光标移动到文件的最后一行的行首, 也可以用 |
|
在命令模式下,在光标所在行查找字符, 比如,按下
|
|
与 |
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)中删除命令的用法如下表:
|
删除当前光标所在字符 |
|
删除当前光标所在字符向后3个字符 |
|
删除当前光标所在字符的前一个字符(X = dh) |
|
删除当前光标所在字符(dl = x) |
|
删除当前光标所在字符的前一个字符 |
|
删除当前行 |
|
删除上一行 |
|
删除下一行 |
|
删除成对出现的符号之间的内容, 例如,
类似的还有 |
|
删除光标所在字符到指定的 例如,
与每一个匹配的双引号之间字符, 但不删除匹配的双引号。 |
|
删除当前行开始向下10行 |
|
删除光标所在字符到行尾的之间字符( |
|
删除光标所在字符到行尾的之间字符 |
|
删除当前行上面的所有行 |
|
删除当前行下面的所有行 |
|
删除第1到第10行 |
|
删除第11行到末尾 |
|
删除所有行 |
|
删除两行之间的空白行。 如果两行之间没有空白行, 则两行合并成一行 |
10、复制和粘贴
vim(vi)中复制和粘贴命令的用法如下表:
|
复制当前行。 |
|
复制当前行向下
|
|
粘贴到当前光标所在行的下一行。 |
|
粘贴到当前光标所在行的上一行。 |
|
复制第1行到第10行, 并且粘贴到第20行之后。 |
|
在命令模式下,按 在使用 |
|
在命令模式下,交换当前行和下一行的位置。 |
|
交换当前字符和之后的字母的位置。 |
11、剪切
在命令模式下,按v或V进入可视模式,在使用j
k
l
h
方向进行选中,最后按d
进行剪切
ndd
剪切光标所在行开始向下n行:1,10d
剪切第1行到第10行:1,10m 20
剪切第1行到第10行,并且粘贴到第20行之后
12、退出
vim(vi)中退出命令的用法如下表:
|
保存退出 |
|
保存退出 |
|
不保存退 |
|
忽略所有改变强制退出 |
|
丢弃所有改变打开原文件 |
13、窗口操作
vim(vi)中窗口相关的用法如下表:
|
拆分窗口,在原来vim的窗口上新建一个窗口 |
|
在原来的vim的窗口上新建一个窗口打开或编辑文件 |
|
横向的分割,要想竖向拆分,则要用vsplit |
|
光标移动到下一个窗口(可循环) |
|
光标移动到下一个窗口(不可循环) |
|
光标移动到上一个窗口(不可循环) |
关闭光标所在窗口如下表:
|
最后一个窗口不能使用此命令关闭 |
|
退出vim,最后一个窗口用些命令退出 |
|
保存退出 |
|
关闭除了当前窗口的所有窗口 |
|
关闭所有窗口 |
宏录制
在命令模式下,按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将使用相同的语法元素,并使用相同的颜色方案。