Linux系统vi全屏幕编辑器命令大全

vi(Visual)是以视觉为导向的全屏幕编辑器、共分为三种方式(mode):

command方式:任何输入都会作为编辑命令,而不会出现在屏幕上,若输入错误则有"岬"的声音;任何输入都引起立即反映

insert方式: 任何输入的数据都置于编辑寄存器。在command方式下输入(i,a,o等),可进入insert方式,insert方式下按ESC,可跳回command方式。

escape方式: 以":"或者"/"为前导的指令,出现在屏幕的最下一行,任何输入都被当成特别指令。

进入vi(在系统提示符下面输入以下指令):

vi filename打开或新建文件,并将光标置于第一行首
vi +n filename打开文件,并将光标置于第n行首
vi + filename打开文件,并将光标置于最后一行首
vi +/pattern filename打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename….filename打开多个文件,依次进行编辑
  ## 编辑数个文件(利用vi filename(s))进入vi后):
:args显示编辑名单中的各个文件名
:n读入编辑名单中的下一个文件
:rew读入编辑名单中的第一个文件
:e#读入编辑名单内的前一个文件
:e file读入另一个文件进vi(此文件可不在编辑名单内),若原文件经修改还没有存档,则应先以: w 存档。
:e! file强迫读入另一个文件进入vi,原文件不作存档动作。
  ## 存储及退出vi:
:w filename存入指定文件,但未退出vi(若未指定文件名则为当工作的文件名)。
:wq 或者 :x或者zz保存文件,并且退出vi.
:q不作任何修改并退出vi。
:q!放弃任何修改并退出vi。
:!command暂时退出vi并执行shell指令,执行完毕后再回到vi。
:sh暂时退出vi到系统下,结束时按Ctrl + d则回到vi。
  ## 移动光标类命令
0(注意是数字零)光标移至当前行首
$光标移至当前行尾
h光标左移一个字符
l光标右移一个字符
k或Ctrl+p光标上移一行
j或Ctrl+n光标下移一行
nh光标往左移n位
nl光标往右移n位
nk光标往上移n位
nj光标往下移n位
space光标右移一个字符
Backspace光标左移一个字符
Enter光标下移一行
w或W光标右移一个字至字首
b或B光标左移一个字至字首
e或E光标右移一个字至字尾
)光标移至句尾
(光标移至句首
}光标移至段落开头
{光标移至段落结尾
[移到文件开始位置
]移到文件结束位置
n+光标下移n行
n-光标上移n行
n$光标移至第n行尾
nG光标移至第n行首
G$移到文件的最后一个字符
1G或者gg移到文件的第一行
n|移动到当前行的第n列
^移动到当前行的第一个非空字符
  ## 屏幕翻滚类命令
Ctrl+u向文件首翻半屏
Ctrl+d向文件尾翻半屏
Ctrl+f向文件尾翻一屏
Ctrl+b向文件首翻一屏
nz将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
  ## Vi光标放置与屏幕调整
H将光标移动到屏幕的顶行
nH将光标移动到屏幕顶行下的第n行
M将光标移动到屏幕的中间
L将光标移动到屏幕的底行
Nl将光标移动到屏幕的底行上的第n行
^e将屏幕上滚一行
^y将屏幕下滚一行
^u将屏幕上滚半页
^d将屏幕下滚半页
^b将屏幕上滚一页
^f将屏幕下滚一页
^l重绘屏幕
z-return将当前行置为屏幕的顶行
nz-return将当前行下的n行置为屏幕的顶行
将当前行置为屏幕的中央
将当前行上的第n行置为屏幕的中央
z- 将当前行置为屏幕的底行
nz-将当前行上的第n行置为屏幕的底行
  ## 插入文本类命令
i在光标前
I在当前行首
a光标后
A在当前行尾
o在当前行之下新开一行
O在当前行之上新开一行
r替换当前字符
R替换当前字符及其后的字符,直至按ESC键
s从当前光标位置处开始,以输入的文本替代指定数目的字符
S删除指定数目的行,并以所输入文本代替之
ncw或nCW修改指定数目的字
nCC修改指定数目的行
!command执行shell指令,并把结果加在光标所在行的下一行。
  ## 删除命令
x删除光标处的字符,可以在x前加上需要删除的字符数目
X删除光标前的字符,可以在X前加上需要删除的字符数目
nx删除由光标位置起始的n个字符(含光标位置,按一个x表示删除光标所在的字符)
dw删至下一个字的开头,即删除一个单词。
nX删除由光标位置起始的n个字符(不含光标位置)。
ndw删除光标位置其实的n个字符组(word)。
d0将行的开始到光标位置的字符全部删除。
d$ 或D将光标位置起始到行尾的字符全部删除。
ndd将光标位置起始的n行(整行)删除(dd表示删除光标所在行)。
:start,endd删除文件的第start到end行。
dG删除行,直到文件结束
dd删除整行
ndd从当前行开始往后删除n行
db删除光标前面的字
ndb从当前行开始往前删除n行
:m,md从第m行开始删除n行
d或d$从光标处删至行尾
dcursor_command删除至光标命令处,如dG将从当前行删除至文件的末尾
^h或backspace插入时,删除前面的字符
^w插入时,删除前面的字
Ctrl+u删除输入方式下所输入的文本
  ## Vi修改文本命令
new更改n组字符,结束时按ESC键
ncc从光标所在位置开始更改n行,结束时按ESC键
rchar用char替换当前字符
R text escape用text替换当前字符直到按下Esc键
stext escape用text代替当前字符
S或cctext escape用text代替整行
cwtext escape将当前字改为text
Ctext escape将当前行余下的改为text
cG escape修改至文件的末尾
ccursor_cmd text escape从当前位置处到光标命令位置处都改为text
  ## 搜索及替换命令
/pattern从光标开始处向文件尾搜索pattern
?pattern从光标开始处向文件首搜索pattern
n在同一方向重复上一次搜索命令
N在反方向上重复上一次搜索命令
:s/p1/p2/g将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g将文件中所有p1均用p2替换
  ## Vi查找命令
/text在文件中向前查找text
?text在文件中向后查找text
n在同一方向重复查找
N在相反方向重复查找
ftext在当前行向前查找text
Ftext在当前行向后查找text
ttext在当前行向前查找text,并将光标定位在text的第一个字符
Ttext在当前行向后查找text,并将光标定位在text的第一个字符
:set ic查找时忽略大小
:set noic查找时对大小写敏感
:s/oldtext/newtext用newtext替换oldtext
:m,ns/oldtext/newtext在m行通过n,用newtext替换oldtext,&重复最后的:s命令
:g/text1/s/text2/text3查找包含text1的行,用text3替换text2
:g/text/command在所有包含text的行运行command所表示的命令
:v/text/command在所有不包含text的行运行command所表示的命令
:g/text/p查找所有包含text的行
:g/text/d删除所有包含text的行
:m,ng/text/nu从m行到n行查找text的行并且打印行号
:g是在所有包含需要查找的文本的行上运行一个命令
:v是在所有不包含指定文本的行上运行一个命令
  ## Vi在文本中定位段落和放置标记
{在第一列插入{来定义一个段落
[[回到段落的开头处
]]向前移动到下一个段落的开头处
m(a-z)用一个字母标记当前位置,如用mz表示标记z
'(a-z)将光标移动到指定的标记,如用'z表示移动到z
  ## 复制及移动文件
:first,last co dest将first 到last行的数据复制到目标行(dest)下面
:Start,endm dest将start 到 end行的数据移动到目标行(dest)下。
:r filename将指定文件的内容读入光标所在行下。
nY将光标所在位置开始的n行数据暂存
yy将当前行的内容放入临时缓冲区
nyy将n行的内容放入临时缓冲区
p将临时缓冲区中的文本放入光标后
P将临时缓冲区中的文本放入光标前
“(a-z)nyy复制n行放入名字为圆括号内的可命名缓冲区,省略n表示当前行
“(a-z)ndd删除n行放入名字为圆括号内的可命名缓冲区,省略n表示当前行
“(a-z)p将名字为圆括号内的可命名缓冲区的内容放入当前行后
"(a-z)P将名字为圆括号内的可命名缓冲区的内容放入当前行前
  ## Vi中的shell转义命令
:!command 执行shell的command命令,如:!ls
:!!执行前一个shell命令
:r!command 读取command命令的输出并插入,如:r!ls会先执行ls,然后读入内容
:w!command 将当前已编辑文件作为command命令的标准输入并执行command命令,如:w! grep all
:cddirectory 将当前工作目录更改为directory所表示的目录
:sh将启动一个子shell,使用^d返回vi
:so file在shell程序file中读入和执行命令
  ## 选项设置
all列出所有选项设置情况
term设置终端类型
ignorance在搜索中忽略大小写
list显示制表位(Ctrl+I)和行尾标志($)
number显示行号
report显示由面向行的命令修改过的数目
terse显示简短的警告信息
warn在转到别的文件时若没保存当前文件则显示NO write信息
nomagic允许在搜索模式中,使用前面不带“\”的特殊字符
nowrapscan禁止vi在搜索到达文件两端时,又从另一端开始
mesg允许vi显示其他用户用write写到自己终端上的信息
  ## 最后行方式命令
:n1,n2 co n3将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d将n1行到n2行之间的内容删除
:w保存当前文件
:e filename打开文件filename进行编辑
:!command执行shell命令command
:n1,n2 w!command将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入
:r!command将命令command的输出结果放到当前行
  ## 寄存器操作
“?nyy将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
“?nyw将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
“?nyl将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
“?p取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字
ndd将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。
  ## 其他命令
.重复前一指令
u取消前一指令
Ctrl + l刷新屏幕显示
:set number显示文件的行号,但不会存文件
:set nonumber解除行号显示
:set ai设置每行起始位置(以光标当前位置为起始)
:set noai取消行起始位置设定
:f 或 + g告诉用户有关现行编辑文件的数据。
:set all打印所有选项
:set nooption关闭option选项
:set nu每行前打印行号
:set showmode显示是输入模式还是替换模式
:set noic查找时忽略大小写
:set list显示制表符(^|)和行尾符号($)
:set ts=4为文本输入设置tab stops
:set window=n设置文本窗口显示n行
:.=打印当前行的行号
:=打印文件中的行数
^g显示文件名、当前行的行号、文件的总行数和文件位置的百分比
:l使用字母“l”来显示许多的特殊字符,如制表符和换行符
comments powered by Disqus