vi有三种模式
直接输入vi 进入vi编辑器的命令模式,该模式保存、删除和替换文件,以及退出vi编辑
不管在什么模式下,按 ESC 键可进入命令模式
在命令模式下,插入命令 i,附加命令 a,打开命令 o 、 修改命令c 、 取代命令r 或 替换命令s 可进入插入模式,进行文档编辑
命令模式下,v进入可视模式,可进行复制y,剪切d
直接输入 vi ,进入vi编辑模式,相当于打开word还没有保存,没有给文件取名字。
在退出vi之前,应保存文档,并给文档取名 :w filename,在退出 :q。若是不保存可以选择 :q!
vi filename ,则是打开或新建一个名字叫filename的文档,并将光标置于第一行首,对文档进行操作后退出前也要保存。
vi file1 file2 file3 新建或者打开多个文件,当所有文件都编辑和保存后可退出
问:如何切换其他文件进行编辑? :e filename,n 编辑下一个文档
vi +n filename 打开文件,并将光标置于第n行首
vi + filename 打开文件,并将光标置于最后一行首
. 重复命令,重复之前操作过的命令
u 、U 恢复命令
在命令模式下 末行模式
:w 当前文件存盘
:q 退出vi
:q! 不保存文件退出vi
:x 保存当前文件并退出
:e filename 打开文件filename进行编辑
:e! 重新编辑文件,放弃任何改变
:! 执行命令后回到编辑
:n 编辑下一个文件
:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d :将n1行到n2行之间的内容删除
选项设置
:set ai 自动缩进
:set nu 每行显示行号
:set nonu 每行前不显示行号
:set ic 查找字符串时不区分大小写
移动光标
h,backspace,左方向键 光标左移一个字符,在字符前加n,可移动n个字符
l,space,右方向键 光标右移一个字符
k,Ctrl+p,上方向键 光标上移一个字符
j,ctrl+n,下方向键 光标下移一个字符
Enter 光标下移一行,在该行行首
w或W 光标右移一个字至字首
b或B 光标左移一个字至字首
e或E 光标右移一个字至字尾
H 光标移至屏幕第一行行首
L 光标移至屏幕最后一行行首
M 光标移至屏幕中间行
$ 光标移至当前行行尾
0, ^ 光标移至当前行行首
) 光标移至句尾
( 光标移至句首
} 光标移至段落开头
{ 光标移至段落结尾
:0 光标移至文件开头
nG,:n 光标移至第n行首
n+ ,[n]k 光标下移n行
n- ,[n]j 光标上移n行
n$ 光标下移n行尾
:n 光标移到文件的第n行
G,:$ 光标移到文件的最后一行(文件结尾)
屏幕翻滚类命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。 未实现???
从命令模式进入插入模式
i 在当前光标所在字符的前面插入,如theday,光标在d上,插入new 就是thenewday
a 在当前光标所在字符的后面插入,如theday,光标在e上,插入new就是thenewday
o 在当前光标所在行的下一行插入
O 在当前行的上一行
I 在当前光标所在行的行首插入
A 在当前光标所在行的行尾插入
R 替换当前光标所在字符及其之后的
r 替换当前光标所在字符,再一次输入替换字符
s:删除当前光标所在字符,从此处插入文本
S:删除当前光标所在行,从该行行首开始插入文本
ncc 、ncw、 nC 删除当前光标所在行开始 n 行,并在此行开始插入
复制操作
yy 复制当前行的内容
[n]yy 复制包括当前行的n行内容
p 将复制的文本放入光标后
P 将复制的文本放入光标前
:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下
删除操作
d$:删至行尾
d0: 删除光标前一个字符至行首
[n]dd:删除当前行及其后n-1行
[n]x或X:删除一个字符,x删除光标后的,而X删除光标前的
[n]dw或ndW:删除光标处开始及其后的n-1个字
:n1,n2 d :将n1行到n2行之间的内容删除
:%d 删除整个编辑缓冲区。
[n]p 将删除的内容恢复n次 类似于windows中常用的剪切、粘贴!
问:在编辑文件的过程中,我发现,退格键只能删除当前行的文本,要删除多行怎么办?
一般移动光标使用上下左右键可以一个字符一个字符的移动,但若是文本很多的情况下,怎么做更快?
搜索及替换命令 :
/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
s(substitute) 指令可查找某行列范围。
g(global)指令则可查找整个编辑缓冲区的资料。
s指令以第一个满足该条件的字符串为其取代的对象,若该行有数个满足该条件的字符串,也仅能取代第一个,若想取代所有的字符串则需加上g参数。
:1,$s/old/new/g 将文件中所有的“old”改成“new”。
:10,20s/^/ / 将第10行至第20行资料的最前面插入5个空白。
:%s/old/new/g 将编辑缓冲区中所有的“old”改成“new”。
:%s/regexp/replacement/g:将文件中所有p1均用p2替换(%可能代表全文)
:%s/regexp/replacement/gc - (c代表confirm)每次替换要求确认
:g/regexp/s//replacement/g:将文件中所有p1均用p2替换
:s/text1/text2 用于将光标所在段落搜索到的第一个 text1 替换为text2
:s/text1/text2/g 用于将光标所在段落的所有 text1 替换为text2
:m,ns/text1/text2/g 用于将从 m行开始至n 行结束的所有搜索到的text1
替换为text2 其中可以使用$表示末行即1,$ 表示替换文档中的所
有符合条件的字符
例:/the 搜索的内容可以是一个字符,一个字或者一个句子,将从光标开始处向文件尾搜索,显示第一个搜索到的首字符上
按 n 、 N 正向或反向搜索下一个,循环重复
可视化模式?
后记:我常用的命令有:
vi filename 编辑文件
x 命令模式下,退出且保存
q! 退出不保存
0,$ 当前行行首、行尾
d0,d$ 删除光标所在位置直至行首(行尾)
nh,nl 光标向左、向右移动n个字符
nG 跳到第几行