这次我们来说说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