#插入模式
【i】切换进入插入模式,从光标当前位置开始输入文件
【a】从目前光标所在位置的下一个位置进入插入模式
【o】当前光标的下一行新增一行进入插入模式
【O】当前光标的上一行新增一行进入插入模式
#区域选择模式
区域选择模式是vi里面很少用到的模式,类似文本编辑器UltraEdit的列块模式。
【v】 字符块区域模式(VISUAL),光标移动到的区域将会被选择中
【V】 行区域模式(VISUAL LINE),光标移动到的行将会被选中
【ctrl+v 】 方块选择模式(VISUAL BLOCK),类似UltraEdit的列块模式
【y】 复制选中区域
【d】 刪除选中区域
#移动光标
【ctrl + b】:屏幕往"后"移动一页
【ctrl + f】:屏幕往"前"移动一页
【ctrl + u】:屏幕往"后"移动半页
【ctrl + d】:屏幕往"前"移动半页
【G】:移动到文章的最后
【$】:移动到光标所在行的"行尾"
【^】:移动到光标所在行的"行首"
【w】:光标跳到下个字的开头
【e】:光标跳到下个字的字尾
【b】:光标回到上个字的开头
【nl】:光标移到该行的第n个位置。eg,5l,56l。
【shift + a】:光标移动至该行行尾,并自动切换为insert模式
【)】 :光标移至句尾
【(】 :光标移至句首
【}】:光标移至段落开头
【{】:光标移至段落结尾
【nG】:光标移至第n行首
【n+】:光标下移n行
【n-】:光标上移n行
【n$】:光标移至第n行尾
【H】:光标移至屏幕顶行
【M】:光标移至屏幕中间行
【L】:光标移至屏幕最后行
【0】:(注意是数字零)光标移至当前行首
【$】:光标移至当前行尾
#复制
【yw】:将光标所在之处到字尾的字符复制到缓冲区中
【nyw】:复制#个字到缓冲区
【yy】:复制光标所在行到缓冲区
【nyy】:从光标当前行开始复制n行。eg,「6yy」表示复制光标行开始的往下6行文字
【p】:小写字母p,将缓冲区内的字符插入到光标之后的下一行
【P】:大写字母P,将缓冲区内的字符插入到光标之前的上一行
注意:所有与"y"有关的复制命令都必须与"p"配合才能完成复制与粘贴功能。
#替换文本字符
【r】:替换光标所在处的字符
【R】:替换光标所到之处的字符为输入的字符,直到按下【ESC】键为止
另外,关于批量替换的标准语法如下:【:[范围]s/old/new/[cgi]】
eg,最常用的两种替换:
【:s/old/new/g】:替换光标当前所在行的字符为新的字符
【:%s/old/new/g】:全文替换
[范围]是任意的行范围,可以使用如下值:
•行号
•$(文件末尾)
•.(当前行)
•%(当前文件)
•或者两个行号之间加个逗号,eg:【:1,5s/../../..】
•或者可以这样【:行号,+n】,这表示当前指定行及其下面n行将被替换
[cgi]是c,g,i中间的一个或者什么也没有,定义如下:
•c告诉vi每次替换的时候要给提示
•g是说对所有一行中出现的地方都做替换
•i则是指在查找时不区分大小写
•如果最后一个斜杠(/)后面没有东西的话,那么vi只替换在行中第一次匹配的地方
注意:
替换文本时遇到需要替换斜杠"/"时,需要用反斜杠"\/\”进行转义,避免混淆。
eg,将文件里的"a/b”全部替换为"ab”,语法为【:%s/a\/\b/ab/g】
#行首尾添加字符
这是vi里面特别实用的功能,适合生产批量脚本。用得好会比excel,utrledit还方便。
1.全文行首添加字符串test
【g/^/s//test/g 】或是【:%s/^/test/g】
2.全文行尾添加字符串
【:g/$/s//test/g】或是【:%s/$/test/g】
3.n1至n2行的行首添加字符串
【:n1,n2s/^/test/】
注: ^表示行首,$表示行尾。
#替换"^M”字符
在Linux下使用vi来查看一些在Windows下创建的文本文件,有时会发现在行尾有一些“^M”。有如下种方法可以处理:
1.使用dos2unix命令。一般的linux分发版本中都带有这个小工具,使用起来很方便:
$ dos2unix filename
上面的命令会去掉行尾的^M。
2.使用vi的替换功能。启动vi,进入命令模式,输入以下命令:
【:%s/^M$//g】 # 去掉行尾的^M。
【:%s/^M//g】 # 去掉所有的^M。
:%s/^M/[ctrl-v]+[enter]/g # 将^M替换成回车。
:%s/^M/\r/g # 将^M替换成回车。
3.使用sed命令。和vi的用法相似:
$ sed -e 's/^M/\n/g' filename
注意:这里的"^M”都要使用"CTRL+V+M”生成,没法直接键入,也不能复制粘帖过来。
#删除文字
【x】:每按一次,删除光标所在位置的"后面"一个字符。
【nx】:删除光标之后的6个字符。eg,「6x」表示删除光标所在位置的"后面"6个字符。
【X】:大写的X,每按一次,删除光标所在位置的"前面"一个字符。
【nX】:删除光标之前的n个字符。eg,「20X」表示删除光标所在位置的"前面"20个字符。
【dd】:删除光标所在行。
【ndd】:从光标所在行开始删除n行。eg,【5dd】表示从当前行开始删除5行。
【ndw或ndW】:删除光标处开始及其后的n-1个字
【do】:删至行首
【d$】:删至行尾
【Ctrl+u】:删除输入方式下所输入的文本
#查找文本
【/<文本>】将向下查找
【?<文本>】将向上查找
另外,在vi中,??或者//将重复上次查找。 n将查找文本下一次的出现位置, N重复上次查找,不过逆转了查找的方向。
#插入一个文件
【:r file_name】
eg,
要插入文件/root/1.log, 可以敲输入":r /root/1.log”。
如果是在当前目录下插入文件,则直接输入文件名即可。
#其他
【:set nu】显示行号
【:set nonu】关闭行号
【i】切换进入插入模式,从光标当前位置开始输入文件
【a】从目前光标所在位置的下一个位置进入插入模式
【o】当前光标的下一行新增一行进入插入模式
【O】当前光标的上一行新增一行进入插入模式
#区域选择模式
区域选择模式是vi里面很少用到的模式,类似文本编辑器UltraEdit的列块模式。
【v】 字符块区域模式(VISUAL),光标移动到的区域将会被选择中
【V】 行区域模式(VISUAL LINE),光标移动到的行将会被选中
【ctrl+v 】 方块选择模式(VISUAL BLOCK),类似UltraEdit的列块模式
【y】 复制选中区域
【d】 刪除选中区域
#移动光标
【ctrl + b】:屏幕往"后"移动一页
【ctrl + f】:屏幕往"前"移动一页
【ctrl + u】:屏幕往"后"移动半页
【ctrl + d】:屏幕往"前"移动半页
【G】:移动到文章的最后
【$】:移动到光标所在行的"行尾"
【^】:移动到光标所在行的"行首"
【w】:光标跳到下个字的开头
【e】:光标跳到下个字的字尾
【b】:光标回到上个字的开头
【nl】:光标移到该行的第n个位置。eg,5l,56l。
【shift + a】:光标移动至该行行尾,并自动切换为insert模式
【)】 :光标移至句尾
【(】 :光标移至句首
【}】:光标移至段落开头
【{】:光标移至段落结尾
【nG】:光标移至第n行首
【n+】:光标下移n行
【n-】:光标上移n行
【n$】:光标移至第n行尾
【H】:光标移至屏幕顶行
【M】:光标移至屏幕中间行
【L】:光标移至屏幕最后行
【0】:(注意是数字零)光标移至当前行首
【$】:光标移至当前行尾
#复制
【yw】:将光标所在之处到字尾的字符复制到缓冲区中
【nyw】:复制#个字到缓冲区
【yy】:复制光标所在行到缓冲区
【nyy】:从光标当前行开始复制n行。eg,「6yy」表示复制光标行开始的往下6行文字
【p】:小写字母p,将缓冲区内的字符插入到光标之后的下一行
【P】:大写字母P,将缓冲区内的字符插入到光标之前的上一行
注意:所有与"y"有关的复制命令都必须与"p"配合才能完成复制与粘贴功能。
#替换文本字符
【r】:替换光标所在处的字符
【R】:替换光标所到之处的字符为输入的字符,直到按下【ESC】键为止
另外,关于批量替换的标准语法如下:【:[范围]s/old/new/[cgi]】
eg,最常用的两种替换:
【:s/old/new/g】:替换光标当前所在行的字符为新的字符
【:%s/old/new/g】:全文替换
[范围]是任意的行范围,可以使用如下值:
•行号
•$(文件末尾)
•.(当前行)
•%(当前文件)
•或者两个行号之间加个逗号,eg:【:1,5s/../../..】
•或者可以这样【:行号,+n】,这表示当前指定行及其下面n行将被替换
[cgi]是c,g,i中间的一个或者什么也没有,定义如下:
•c告诉vi每次替换的时候要给提示
•g是说对所有一行中出现的地方都做替换
•i则是指在查找时不区分大小写
•如果最后一个斜杠(/)后面没有东西的话,那么vi只替换在行中第一次匹配的地方
注意:
替换文本时遇到需要替换斜杠"/"时,需要用反斜杠"\/\”进行转义,避免混淆。
eg,将文件里的"a/b”全部替换为"ab”,语法为【:%s/a\/\b/ab/g】
#行首尾添加字符
这是vi里面特别实用的功能,适合生产批量脚本。用得好会比excel,utrledit还方便。
1.全文行首添加字符串test
【g/^/s//test/g 】或是【:%s/^/test/g】
2.全文行尾添加字符串
【:g/$/s//test/g】或是【:%s/$/test/g】
3.n1至n2行的行首添加字符串
【:n1,n2s/^/test/】
注: ^表示行首,$表示行尾。
#替换"^M”字符
在Linux下使用vi来查看一些在Windows下创建的文本文件,有时会发现在行尾有一些“^M”。有如下种方法可以处理:
1.使用dos2unix命令。一般的linux分发版本中都带有这个小工具,使用起来很方便:
$ dos2unix filename
上面的命令会去掉行尾的^M。
2.使用vi的替换功能。启动vi,进入命令模式,输入以下命令:
【:%s/^M$//g】 # 去掉行尾的^M。
【:%s/^M//g】 # 去掉所有的^M。
:%s/^M/[ctrl-v]+[enter]/g # 将^M替换成回车。
:%s/^M/\r/g # 将^M替换成回车。
3.使用sed命令。和vi的用法相似:
$ sed -e 's/^M/\n/g' filename
注意:这里的"^M”都要使用"CTRL+V+M”生成,没法直接键入,也不能复制粘帖过来。
#删除文字
【x】:每按一次,删除光标所在位置的"后面"一个字符。
【nx】:删除光标之后的6个字符。eg,「6x」表示删除光标所在位置的"后面"6个字符。
【X】:大写的X,每按一次,删除光标所在位置的"前面"一个字符。
【nX】:删除光标之前的n个字符。eg,「20X」表示删除光标所在位置的"前面"20个字符。
【dd】:删除光标所在行。
【ndd】:从光标所在行开始删除n行。eg,【5dd】表示从当前行开始删除5行。
【ndw或ndW】:删除光标处开始及其后的n-1个字
【do】:删至行首
【d$】:删至行尾
【Ctrl+u】:删除输入方式下所输入的文本
#查找文本
【/<文本>】将向下查找
【?<文本>】将向上查找
另外,在vi中,??或者//将重复上次查找。 n将查找文本下一次的出现位置, N重复上次查找,不过逆转了查找的方向。
#插入一个文件
【:r file_name】
eg,
要插入文件/root/1.log, 可以敲输入":r /root/1.log”。
如果是在当前目录下插入文件,则直接输入文件名即可。
#其他
【:set nu】显示行号
【:set nonu】关闭行号