Vi == Visual interface
3种运行模式:编辑模式、插入模式、命令模式
刚进入程序的时候是编辑模式
编辑模式-〉插入模式 插入命令i,附加命令a等
插入模式-〉编辑模式 Esc
编辑模式->命令模式 按:
命令模式->编辑模式 执行完命令(Enter之后)
-------------------进入插入模式的命令---------------
i 从光标所在位置前开始插入文本
I 该命令是将光标移到当前行的行首,然后再其前插入文本
a 用于在光标当前所在位置之后追加新文本
A 将光标移到所在行的行尾,从那里开始插入文本
o 在光标所在行的下面新开一行,并将光标置于该行的行首,等待输入文本
O 在光标所在行的下面插入一行,并将光标置于该行的行首,等待输入文本
-------------------编辑模式下的操作--------------
G 将光标移动到文件的最后一行
rc 用字符c替换光标所指向的当前字符
nrc 用字符c替换光标所指向的前n个字符
x 删除光标处的字符
nx 删除从光标所在位置开始向右的n个字符
dw 删除一个单词。若光标处在某个词的中间,则从光标所在位置开始删至词尾并连同空格
ndw 删除n个指定的单词
db 删除光标所在位置之前的一个词
ndb 删除光标所在位置之前的n个词
dd 删除光标所在的整行
ndd 删除当前行及其后n-1行的内容
YY 将当前行的内容复制到缓冲区
nYY 将当前开始的n行内容复制到缓冲区
p 将缓冲区的内容写出到光标所在的位置
/str 向右移动到有str的地方
?str 向左移动到有str的地方
n 向相同方向移动到有str的地方
N 向相反方向移动到有str的地方
u 取消前一次的操作,相当于undo
. 再执行一次前面刚完成的某个复杂的命令
ZZ 存盘退出
ZQ 不保存退出
--------------------命令模式下的操作------------------
:n 直接输入要移动到的行号即可实现跳行
:q 退出Vi
:wq 保存退出Vi
:q! 不保存退出Vi
:w 将当前编辑的内容存盘
:w file 将当前编辑的内容写到file文件中
:n1,n2w file 将从n1开始到n2结束的行写到file中
:nw file 将第n行写到file文件中
:1,.w file 将从第1行起到光标当前位置的所有内容写到file文件中
:.,$w file 将从光标当前位置起到文件的结尾的所有内容写到file
:r file 打开另一个file
:e file 新建file文件
:f file 把当前文件改名为file文件
:/str/ 从当前光标开始往右移动到有str的地方
:?str? 从当前光标开始往左移动到有str的地方
:/str/w file 将包含有str的行写到文件file中
:/str1/,/str2/w file 将从str1开始到str2结束的内容写入file文件中
:s/str1/str2/ 将第1个str1替换为str2
:s/str1/str2/g 将所有的str1替换为str2
:.,$ s/str1/str2g 将从当前位置到结尾的所有的str1替换为str2
:n1,n2 co n3 将从n1开始到n2为止的所有内容复制到n3后面
:n1,n2 m n3 将从n1开始到n2为止的所有内容移动到n3后面
:d 删除当前行
:nd 删除从当前行开始的n行
:n1,n2 d 删除从n1开始到n2为止的所有内容
:.,$d 删除从当前行到结尾的所有内容
:/str1/,/str2/d 删除从str1开始到str2为止的所有内容
:!Cmd 运行Shell命令Cmd
:n1,n2 w ! Cmd 将n1到n2行的内容作为Cmd命令的输入,如果不指定n1和n2,则将整个文件的内容作为命令Cmd的输入
:r ! Cmd 将命令运行的结果写入当前行位置
----------------设置Vi环境---------------
:set autoindent 缩进每一行,使之与前一行相同。常用于程序的编写
:set noautoindent 取消所进
:set number 在编辑文件时显示行号
:set nonumber 不显示行号
:set ruler 在屏幕底部显示光标所在的行、列位置
:set noruler 不显示光标所在的行、列位置