这次我们来说说vi编辑器,它是一个文本编程工具,一般执行输出、查找、替换、块操作等文本操作,vi编辑器还能让用户对其进行定制,一般的文本编辑器没有这些功能。
但是vi不是排版工具,它和MS word,WPS等不一样,不能进行字体、段落等的设置。
下面来介绍一下vi编辑器的使用方法:
进入vi编辑器
vi 进入默认vi环境
vi filename 进入新建文件filename的首行第一个字符
vi +n filename 进入文件Filename,光标停留在定n行的行首
vi +/pattern filename 进入文件filename光标停留在/pattern匹配的字符串处
vi + filename 打开filename,光标停留在最后一行的行首
vi -r filename 打开最后一次发生系统崩溃的文件filename,并恢复这个文件
vi编辑器有三种模式,分别是普通模式,插入模式和命令行模式。普通模式下可以进行所有文件操作,输入的字符都被当做命令来执行。这个模式又被称为命令模式。进入vi看见的就是普通模式,光标停留在第一行的行首用(-代表),其他行行首都是~表示空行,最下面一行是状态栏,如果显示Newfile说明这个是新建文件。如果输入的vi命令带有文件名,说明是系统中已经存在的文件,光标停留在第一行行首,显示文件内容,最后一行状态栏会显示文件的字符数、行数和文件名。
普通模式下输入i插入命令、a追加命令、o另开一行命令、r变更命令、s替换命令会进入插入模式,在插入模式下的所有输入都被视为对文件的编辑并保存,如果要退出插入模式回到普通模式按下ESC键即可。
在普通模式下如果要执行EX命令加:,要执行SHELL命令在前面加上!,如果要查找字符串使用/和?即可。命令行模式下可以进行所有的文件操作,命令行模式下的输入会被当做命令执行,执行完成后会回到普通模式。如果输入命令的时候想改变命令,按BACKSPACE键删除命令,然后再按一下BACKSPACE命令回到普通模式。下面我来介绍一下VI各种模式下的命令
普通模式下的输入模式:
命令描述
i在光标处插入输入的内容
I在光标所在的行的行首插入输入的内容
a在光标所在处追加输入的内容
A在光标所在行的行尾追加输入的内容
o在光标所在行的下一行开启新的一行
O在光标所在行的上一行开启新的一行
普通模式下的光标定位:
G光标移动到文件最后一行的行首
nG光标移动到第n行的行首
n+下移n行
n-上移n行
0移动到所在行的行首
$移动到所在行的行尾
h,j,k,l左移,下移,上移,右移一个字符
H移动到屏幕最上一行的行首
M移动到屏幕中间一行的行首
L 移动到屏幕最下一行的行首
普通模式下的替换与删除:
命令 描述
rc 用字符c替换光标所在处的字符
nrc 用n个字符c替换光标所在处的字符
x 删除光标所在位置的字符
nx 删除光标所在处的连续n个字符
dw 删除光标位置的一个词,如果光标在词的中间,则删除光标位置到词尾的部分
ndw 删除连续n个词
db 删除光标所在位置前面的一个词
ndb 删除光标所在位置前面n个字符
dd 删除光标所在的整行
ndd 删除当前行和下面n-1个行的内容
dG 删除当前位置到最后一行的全部内容
d1G 删除当前位置到第一行的全部内容
d0 删除当前位置到行首的全部内容
d$ 删除当前位置到行尾的全部内容
普通模式下的复制与黏贴:
命令 描述
yy 将当前文件的内容复制到缓冲区
nyy 将当前所在行及其下n-1行的内容复制到缓冲区
y0 将当前位置到行首的内容复制到缓冲区
y$ 将当前位置到行尾的内容复制到缓冲区
p 将缓冲区的内容复制到光标所在位置
yG 将当前位置到文件最后一行的内容复制到缓冲区
y1G 将当前位置到文件第一行的内容复制到缓冲区
普通模式下的字符串搜索:
命令 描述
/str 光标移动到右边第一个与str匹配的位置
?str 光标移动到左边第一个与str匹配的位置
n 向相同方向继续匹配str
N 向相反方向继续匹配str
普通模式下的撤销与重复:
命令 描述
u 取消上一次误操作或不当操作,使文档恢复到上次误操作或不当操作前的状态
. 重复上一次的命令
普通模式下退出VI:
命令 描述
ZZ 保存退出VI
ZQ 不保存退出VI
下面我们来继续介绍命令行模式下的各种操作命令。O(∩_∩)O
命令行模式下跳行:
命令 描述
:n n指定跳转到哪一行
命令行模式下的字符串查找替换:
命令 描述
:/str/ 向右匹配到有str的位置
:?str? 向左匹配到有str的位置
:s/str1/str2/ 查找第一个str1并替换为str2
:s/str1/str2/g 查找并替换所有str1为str2
:n1,n2 s/str1/str2/ 在n1和n2行之间查找第一个str1替换为str2
:1,. s/str1/str2/ 在第一行和当前所在行之间查找第一个str1替换为str2
:.,$ s/str1/str2/gc 当前所在行到最后一行之间查找所有str1替换为str2,并询问
:1,$ s/str1/str2/gc 将第一行到最后一行的所有str1替换为str2,并询问
:/str/w file 将包含str的行写入到file文件中
:/str1/,/str2/w file 将从str1到str2的所有内容写入到file文件中
命令行模式下的复制、移动和删除:
命令 描述
:n1,n2 co n3 将n1到n2行的所有内容复制到n3行之后
:n1,n2 m n3 将n1到n2行的所有内容移动到n3行之后
:d 删除当前行
:nd 删除当前行和其下n-1行
:n1,n2 d 删除n1到n2之间的所有内容
:.,$d 删除当前位置到最后一行的所有内容
:/str1/,/str2/d 删除str1到str2之间的所有内容
命令行模式下的文件相关操作:
命令 描述
:w 将当前文件内容保存
:w file 将当前文件内容保存到file文件中
:n1,n2 w file 将文件n1-n2行的所有内容保存到file文件中
:1,. w file 将文件第一行到光标当前所在位置的内容保存到file文件中
:.,$ w file 将光标当前位置到文件最后一行的所有内容保存到文件file中
:r file 打开另一个file文件
:e file 创建一个新文件file
:f file 将当前文件重命名为file中
命令行模式下使用SHELL命令
命令 描述
:!CMD 运行命令CMD
:n1,n2 w !CMD 将有字符串str的行的内容作为命令CMD的输入,然后执行CMD命令
:r !CMD 将命令CMD的运行结果显示在屏幕上
命令行模式下设置VI环境
命令 描述
:set autoindent 设置缩进,是每一行都退回和前一行一样
:set noautoindent 取消缩进
:set number 每一行都显示行号
:set nonumber 取消行号
:set ruler 显示光标所在的行、列信息
:set noruler 不显示光标的行、列信息
:set tabstop=value 设置制表符的空格个数
:set wrapmargin 设置屏幕的右边页,当输入到右边页时编辑器自动换行
:set 显示所有设置了的环境选项
:set all 显示所有可以设置的环境选项
命令行模式下退出VI
命令 描述
:q 退出VI
:wq 保存退出VI
:q! 不保存退出VI