`
凤凰涅磐
  • 浏览: 84016 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

vi使用(转)-Dell D630 Ubuntu 8.04之路(四)

阅读更多

原文链接:http://www.cnblogs.com/jthou/archive/2007/11/07/951846.html

作者: xsb(http://xsb.itpub.net)
发表于:2005.11.09 18:11
分类: OS
出处:http://xsb.itpub.net/post/419/45339
---------------------------------------------------------------

移动光标
上k
下j
左h
右l
w 向后移,光标移至下一行词首
b 向前移,光标移至每一行词首
e 向后,光标移至每一行词尾
0 移至光标所在行首
$ 移至行尾
[ctrl]+f 荧幕向前移动一页
[ctrl]+b 荧幕向后移动一页
f 字符 向后移至字符处,光标在字符处
gg 移至文件开始行
G 移至文件最后一行,3G移至第3行。(g=goto)
H 移至当前窗口内的第一行
M 移至当前窗口内的中间一行
L 移至当前窗口内的最后一行
:set nu 显示行号
:set nonu 不显示行号
删除
x 删除当前光标位置字符
nx 向后删除n个字元
dd 删除光标所在的那一行
d$ 删除从当前字母开始至行尾的所有字符 D
插入
i 进入插入状态可在当前位置进行插入,退出插入状态
a 在当前字母后开始进入插入状态,退出用
p 在当前行后插入刚用dd命令删除的行。即可以用于行的移动
o 在当前行后插入一空行并进入编辑状态
O 在当前行前插入一空行并进入编辑状态
:r 文件名 在当前行后插入此文件内容。

搜索
/ words或words 寻找名为word或words字符串
cw 即先删除当前字母至空格,不包含空格,然后进入插入模式
替换
r 可输入一个字母可替换当前光标的字母
R 可进入替换状态,输入要替的内容后用退出。
cw 即先删除当前字母至空格,不包含空格,然后进入插入模式
:n1,n2s/word1/word2/g 在第n1行与n2行之间寻找到word1这个字串,并将该字串取代为word2
搜索+替换
:s/thee/the 搜索thee并换成the ,注意只搜索第一匹配的内容
:s/thee/the/g 搜索thee并换成the ,注意只搜索并替换一行的内容
:s/thee/the/gc 搜索thee并换成the ,注意只搜索并替换一行的内容,并每次替换都将询问是否
:%s/thee/the/g 搜索thee并换成the ,注意搜索并替换整个文件内容
:10,20s/thee/the/g 搜索thee并换成the ,注意搜索并替换第10行与第20行之间的内容
:1,$s/thee/the/g 搜索thee并换成the ,注意搜索并替换第1行与最后行之间的内容
:ranges/pat1/pat2/g
其中
: 这是vi的命令模式。
range 是命令执行范围的指定,可以使用百分号(%)表示所有行,使用点(.)表示当前行,使用美元符号($)表示最后一行。你还可以使用行号,例如10,20表 示第10到20行,.,$表示当前行到最后一行,.+2,$-5表示当前行后两行直到全文的倒数第五行,等等。
s 表示其后是一个替换命令,类似Perl的替换函数。
pat1 这是要查找并替换的一个正则表达式。
pat2 这是希望把匹配串变成的模式的正则表达式。
g 模式修饰符,表示替换将针对行中每个匹配的串进行重复匹配,不是只匹配行中出现的第一个匹配串。
i 模式修饰符,表示模式匹配时忽略大小写。

反悔
u 恢复最后一个命令的结果
Ctrl-r 反悔的反悔


从shell中启动可视化编辑器
vi filename 指示shell启动vi编辑器,并将参数filename传给它。如果当前目前中存在该文件,则vi编辑器将它解释为要打开的文件;如果没有该文件,则vi编译器创建新文件
vi file1 file2 file3 shell传递3个参数给vi,vi将它们解释为要打开的文件。可以使用:w命令保存文件,使用:n命令访问下一个文件
vi +# filename 打开文件,并将光标移到指定的行。例如,命令vi +100 records 从第100行开始编辑文件records
vi +/the filename 打开文件,并将光标移动包含有目标字符串的行。例如,命令vi +/Jason friends 从第1个含有字符串Jason的行开始编辑文件friends
view filename 打开文件进行编辑,但是拒绝保存对文件的修改,除非使用w!命令
光标移动命令
hjkl 将光标分别向左、下、上、右移动一个字符
0(零) 将光标移到当前行的行首
^(脱字符) 同0一样将光标移到当前行的行首
$ 将光标移到当前行的行末
##G 将光标移到G前面的数字指定的行。例如,42G将光标移到文件的第42行
G 将光标移到文件的最后一行
w 将光标向前移到下一个单词的首字母
e 将光标向前移到下一个单词的最后一个字母
b 将光标向后移到上一个单词首字母
- 将光标定位到上一行的行首
+ 将光标定位到下一行的行首
12| 将光标定位到当前行的第12列
L 将光标定位到屏幕的最下面一行
M 将光标定位到屏幕中间的一行
H 将光标定位到屏幕的最上面一行
'' 两个单引号将光标移到它的先前的位置
光标定位命令(上下文的)
fb 将光标向前移到当前行上的下一个字母b(或者其他的任意指定的字符)
Fb 将光标向后移到当前行上的上一个字母b(或指定的字符)
t# 将光标移到当前行上字符#的第1个实例的右侧。例如,命令tM将光标移到当前行上第1个M的右侧
T# 在当前行上向左移动光标,将它移到字符#的第1个实例的前一字符
/word 将光标向前移到单词word的下一个实例
?word 将光标向后移到单词word的上一个实例
n 将光标移到前面命令/word或?word中指定模式的下一个实例
显示调整命令
Ctrl+D 显示文件中的下半屏文本
Ctrl+U 显示文件中的上半屏文本
Ctrl+F 显示文件中的下一屏文本
Ctrl+B 显示文件中的上一屏文本
设置显示选项
:set number 将行号作为屏幕显示的一部分,但是行号并不是文件的一部分。它的缩写形式为:set nu
:set nonumber 清除屏幕上的行号。也可以使用缩写形式:set nonu
:set showmode 在屏幕的右下角显示追加模式信息
:set list 在每行的行末显示美元符号,并用Ctrl+I表示制表符
:set showmatch 在输入)或]时,将光标移到与之匹配的(或[
:set window=value 定义屏幕上显示的文本行的行数
:set autoindent 自动缩进。也可以使用缩写形式:set ai
:set tabstop=value 设置显示制表符的空格字符个数。也可以使用缩写形式ts=value
:set wrapmargin=value 设置显示器的右页边。当输入进入所设置的页边时,编辑器自动回车换行
:set ignorecase 指示编辑器搜索字符串,并忽略目标中字母的大小写
:set 显示设置的所有选项
:set all 显示所有可以设置的选项
文本删除命令
dd 删除当前光标所有的文本行
#dd 删除#行文本
dw 从文本中删除一个单词
#dw 从文本中删除#个单词
x 删除光标所在的一个字符
#x 从文本中删除#个字符
D 删除当前行上光标后面的部分
:#,#d 例如,:12,37d 将删除第12~37行之间的所有文本,包括第12和37行
撤销命令
u 撤销。恢复最近一次的文本修改操作,即使已经移动了光标。在Linux系统中,再次使用撤销命令将恢复更前一次的文本修改操作。在BSD的vi中,第2次撤销操作将撤销第一次撤销操作,恢复第1次撤销前修改的文本
:redo 在Linux系统中,取消撤销操作恢复文本修改。在标准的UNIX系统中,第2个u命令取消第1个u命令,结果就是一个“redo”
U 如果在修改后还没有将光标移出当前行,则可以撤销对当前行进行的所有的文本修改
向文本中添加文本
a(小写) 从光标的右侧开始插入文本
A(大写) 从当前行的行末开始添加文本
i(小写) 从光标的左侧开始插入文本
I(大写) 从当前行的行首插入文本
o(小写) 在光标的下面打开(或插入)一个新行
O(大写) 在光标的上面打开一个新行
:#r filename 例如,:8r report.old读取文件report.old,并将它的内容放到当前文件的第8行之后
Esc 无论使用什么命令进入了追加/插入模式,都可以通过按Esc键离开追加模式返回到vi的命令模式
Ctrl+V 允许输入控制字符。按Ctrl+V键后再按回车键将把Ctrl+M插入到文件中
在文件中修改文本
cw 仅仅修改光标处的单词(删除单词,然后进入追加模式中,以在被删除单词的位置添加文本)
s(小写) 替换单个字符
S(大写) 替换整行文本
cc 替换整行文本(同S)
r 用输入的下一个字符替代当前光标处的字符,并自动返回到命令模式
R 将编辑器放到覆盖模式,用输入的字符来逐个替换光标处的字符
C(大写) 修改行上从光标到行末之间的文本
ct# 修改行上从光标到前向第1个目标字符之间的文本。例如ctY将删除当前行上从光标到向前第1个字符Y之间的所有文本,并进入追加模式以在删除文本的位置添加文本
cf# 修改行上从光标到前向第1个目标字符之间的文本(包括目标字符)。例如cfY将删除当前行上从光标到向前第1个字符Y之间(包括Y)的所有文本,并进入追加模式以在删除文本的位置添加文本
cT# 修改行上从光标到后向第1个目标字符之间的文本。例如cTY将删除当前行上从光标到向后第1个字符Y之间的所有文本,并进入追加模式以在删除文本的位置添加文本
cF# 修改行上从光标到后向第1个目标字符之间的文本(包括目标字符)。例如cFY将删除当前行上从光标到向后第1个字符Y之间(包括Y)的所有文本,并进入追加模式以在删除文本的位置添加文本
接出和粘贴行的单词
yy 将当前行复制或接出到内在缓冲区。20yy将当前行和它后面的19行(共20行)文本复制到内存。目标行仍然保留在文件中,可以使用p命令将这些内存中的文本粘贴到文件中
dd 删除当前行,并将它放到与yy命令使用的相同的内存缓冲区。目标行从文件中删除,但是可以使用p命令将它粘贴到文件中的其他地方
yw 将当前光标所在的单词接出或复制到内在缓冲区。6yw命令将把当前单词和它后面的5个(共6个)单词复制到内存
dw 删除当前的单词,并将它放到与yw命令使用的相同的内存缓冲区。可以使用p命令将单词粘贴到文件的其他地方
yt# 接出从光标到向前一个字符(不包括该字符)之间的文本。例如,ytB命令将从光标到字符B的下一实例(不包括字符B)之间的文本接出或复制到内存
yf# 接出从光标到向前一个字符(包括该字符)之间的文本。例如,yf:命令将从光标到字符:的下一个实例(包括字符:)之间的文本接出或复制到内存
yT# 后向接出(不包括目标字符)。例如,yTN命令将从光标到字符N的后向第1个实例之间的文本(不包括字符N)接出或复制到内存
yF# 后向接出(包括目标字符)。例如,yFJ命令将把从光标到字符N的向后第1个实例之间的文本(包括字符N)接出或复制到内存
p 将内存中的文本行粘贴到文件中光标所在行的下面,或将内存中的单词粘贴到文件中光标的右侧
P(大写) 将接出或删除的文本行粘贴到文件中光标所在行的上面。或将接出或删除的单词粘贴到文件中光标的左侧
文件移动命令
J 将下行文本同当前行合并成一行
:#,# move # 将指定的行移到目标位置。:12,35 move 58命令将第12~35行之间的所有文本移到第58行的后面。缩写为mo
:1,26 co 82 将第1~26行之间的所有文本复制到第82行的后面(可以选择行号)
使用可视化编辑器进行全局编辑
:s /target/replacement/ 查找当前行上目标字符串的第1个实例并删除,然后用字符串replacement替换。只修改当前行上的第1个目标实例
:g /target/s//replacement/ 查找所有行上目标字符串的第1个实例并删除,然后用字符串replacement替换。修改所有行上目标的第1个实例
:#,# s/target/replacement/ 在指定的行上进行替换。例如,:7,37 s/march/walk/将查找第7~37行之间的所有文本行,并用字符串walk替换每行中的第1个目标字符串march。所有指定行上的第1个目标字符串修改
:#,# s/target/replacement/g 在指定的行上进行全局替换。例如,:1,$ s/fun/joyful/g 将在第1行到文件最后一行之间查找目标字符串fun的所有实例并删除,然后用字符串joyful替换。指定行上的目标字符串的所有实例都被修改
:g /target/s/replacement 查找所有行上目标字符串的第1个实例并删除,然后用字符串replacement替换。所有行上的第1个目标都被修改
:#,# target/s/replacement/ 在指定的行上进行替换,例如,:7,37 march/s/walk命令在第7~37行之间每个文本行上查找目标字符串的第1个实例并删除,然后用字符串walk替换。所有指定行上的第1个目标字符串都被修改
:#,# target/s/replacement/g 在指定的行上进行全局替换。例如,:1,$ fun/s/joyful/g将在第1行到文件最后一行之间查找目标字符串fun的所有实例并删除,然后用字符串joyful替换。指定行上的所有目标字符串都被修改
编辑工具:映射,缩写和标记
m# 用字母标记当前行。例如,ma命令表示用a标记当前行。即使移动了标记行,它仍然标记为a,可以用a来定位该行
'# 定位标记行。例如,命令'a将光标移到标记a的行。命令'a,$d将删除从标记行到文件末尾之间的所有行
:map # command string 在命令模式中输入#时,将其作为一个命令串。例如,:map #o#!/bin/ksh产生一个新的命令模式指令,您输入#时,它被解释为:o打开个新行,并添加文本#!/bin/ksh到文件中。为了在命令中包含 回车和其他控制字符,可以在它们的前面用Ctrl+V命令
:ab abbreviation char-string 设置追加模式缩写。例如,在命令模式中输入:ab mv Milky Way Galaxy,则建立缩写。如果在追加模式中输入字符串mw,然后按Esc键,mw将被Milky Way Galaxy替代
在vi编辑器中向shell发出命令
:!ls 启动一个shell,并让shell运行ls程序。在运行完指定的程序后,必须按回车键以返回到编辑器中
:!ksh 启动一个shell,它允许运行多个命令。退出shell可以回到编译器中
:Or!speel% 对当前文件(%)进行拼写检查,并将spell的输出诗篇到当前文件中,从第1行(0行后面)开始放置这些输出
:31r!command% 运行UNIX命令(如cal或date)并将它的输出读入到当前文件,从第31行开始放置这些输出
Ctrl+Z 用于挂起当前编辑会话进程的csh和ksh命令,它允许您向父shell发出命令
fg 重新激活挂起的编辑进程的csh和ksh命令
读、写和退出编辑器
:wq 保存编辑会话期间对文件所做的修改,退出编辑器返回到shell
:q 如果没有对文件进行修改或添加文件,可以用q退出对一个文件的编辑
:q! 退出对文件的编辑返回到shell模式,但是不保存在编辑会话期间对文件所做的修改
:w filename v将文件的缓冲区副本(修改版本)保存到一个新文件
[color=#DC143C][b]:#,# w newtest 例如,:1,6 w newtext命令创建一个名为newtext的文件,并将当前文件的第1~6行文本复制到文件newtext中
:1,6 w >> oldfile 将当前文件的第1~6行文本的一个副本追加到已有文件oldfile的末尾
:1,6 w! oldfile 用当前文件的第1~6行文本覆盖文件oldfile
进入vi的命令
vi filename :打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename....filename :打开多个文件,依次编辑

移动光标类命令
h :光标左移一个字符
l :光标右移一个字符
space:光标右移一个字符
Backspace:光标左移一个字符
k或Ctrl+p:光标上移一行
j或Ctrl+n :光标下移一行
Enter :光标下移一行
w或W :光标右移一个字至字首
b或B :光标左移一个字至字首
e或E :光标右移一个字j至字尾
) :光标移至句尾
( :光标移至句首
}:光标移至段落开头
{:光标移至段落结尾
nG:光标移至第n行首
n+:光标下移n行
n-:光标上移n行
n$:光标移至第n行尾
H :光标移至屏幕顶行
M :光标移至屏幕中间行
L :光标移至屏幕最后行
0:(注意是数字零)光标移至当前行首
$:光标移至当前行尾

屏幕翻滚类命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

插入文本类命令
i :在光标前
I :在当前行首
a:光标后
A:在当前行尾
o:在当前行之下新开一行
O:在当前行之上新开一行
r:替换当前字符
R:替换当前字符及其后的字符,直至按ESC键
s:从当前光标位置处开始,以输入的文本替代指定数目的字符
S:删除指定数目的行,并以所输入文本代替之
ncw或nCW:修改指定数目的字
nCC:修改指定数目的行

删除命令
ndw或ndW:删除光标处开始及其后的n-1个字
do:删至行首
d$:删至行尾
ndd:删除当前行及其后n-1行
x或X:删除一个字符,x删除光标后的,而X删除光标前的
Ctrl+u:删除输入方式下所输入的文本

搜索及替换命令 :
/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替换

选项设置
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进行编辑
:x:保存当前文件并退出
:q:退出vi
:q!:不保存文件并退出vi
:!command:执行shell命令command
:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指
定n1,n2,则表示将整个文件内容作为command的输入
:r!command:将命令command的输出结果放到当前行 。
==============================================================
[语法]:vi [-wn] [-R] 文件...
[说明]: vi 是一个基于行编辑器 ex 上的全屏幕编辑器,可以在vi 中使用 ex,ed的全部命令,vi选项中 -wn 指将编辑窗口大小置为n行,-R 为将编辑的文件置为只读模式, vi 工作模式分为命令模式和输入模式,一般情况下在命令模式下,可敲入vi命令,进入输入模式下时可以编辑要编辑的文本,命令 a A i I o O c C s S R 可进入输入模式,在输入模式下按 ESC 键可推出输入模式,回到命令模式,在命令模式中敲入:命令,则可进入ex方式,在屏幕底部出现提示符 : ,此时可使用任意ex命令,屏幕底行也用来作/ ? ! 命令的提示行,大多数命令可以在其前面加数字,表示命令执行的重复次数,下面简单介绍一下vi 的命令集,^ 表示(CTRL)键
^B 退回前一页,前面加数字表示重复次数,每次换页时
保留上一页的两行
^D 在命令模式下,表示下滚屏幕的一半,在输入模式下,表示回退至
左边的自动缩进处
^E 显示屏幕底线之下的一行
^F 前进一页,前面加数字表示重复次数,每次换页时
保留上一页的两行
^G 显示当前文件名,当前行号和文件总行数,并用百分号当前行在
整个文件中的位置
^H(退格) 在命令模式下,光标左移一格;在输入模式下,删去前面的字符
^I(TAB) 在输入模式下,产生一串空格
^J(LF) 光标下移一行
^L 刷新屏幕,即将屏幕重新显示
^M(回车) 在命令模式下,光标移动至下行开头
在输入模式下,开辟一新行
^N 光标下移一行
^P 光标上移一行
^Q 在输入模式下,将其后的非打印字符作为正文插入
^R 刷新屏幕
^U 屏幕上滚一半,前面加数字时表示上滚的行数,此数字对
以后的^D ^U 命令有效
^V 在输入模式下,将其后的非打印字符作为正文插入
^W 在输入模式下,使光标回退一个字
^Y 显示屏幕底线之上的一行
^Z 暂停编辑,退回上层Shell
^[(ESC) 退出输入模式,回到命令模式
! 暂时退出编辑,执行Shell命令
(双引号) 用于标志有名缓冲区,编号缓冲区1-9用于保存被删去的正文,字
母名缓冲区a-z供用户存放自定义的正文
$ 将光标移动到当前行尾,前加数字则表示前移行数,如2$表示移动
到下一行行尾
% 将光标移动到配对的小括号()或大括号{}上去
( 退回句子开头
) 前移到句子开头
- 退到上一行第一个非空格字符
. 重复上一次改变缓冲区内容的命令
/ 模式 向前搜索模式,将光标移动到模式出现处,模式是一个正规
表达式,(参看 grep)
: 在屏幕底部提示:,其后可使用ex命令
? 功能同 / ,但方向是向前查找
[[ 光标回退至前一节分界处
转意符
]] 光标前移至节分界处
^(不是CTRL) 光标移至当前行第一个非空字符上
' 连续两个''表示将光标移至其移动前的位置,'后跟字母表示光标字
母标记的行首(参看 m 命令)
A 在行尾插入正文,进入输入模式
B 光标回退一个字
C 替换光标后的内容
D 删除光标后的内容
E 光标前移到字尾
F 字符 在当前行向左查找指定字符
G 光标移动到其前面数字指定的行,若未指定则移动到最后一行
H 光标移动到屏幕顶行,若前面有数字,则移动到屏幕上该数字
指定的行
I 在行开头插入正文
J 连接两行,若前面有数字则连接数字指定的行
L 光标移动到屏幕底行,若前面有数字,则移动到屏幕底线往上数该
数字指定的行
M 光标移动到屏幕中线
N 使用模式查找/或?时,重复找下一个匹配的模式,但方向与上次相
反,其功能同 n ,但方向相反
O 在当前行上开辟一新行
P 将上次被删除的正文插入光标前面,可在其前面加缓冲区编号,编
号1-9用于保存被删去的正文,字母名缓冲区a-z供用户存放自定
义的正文
Q 从vi 推出进入ex命令状态
R 替换字符串
S 替换整行
T 字符 向左查找字符
U 将当前行恢复至第一次修改前的状态
W 光标移至下一个字首
X 删除光标前的字符
Y 将当前行存入无名缓冲区,前面加数字表示存入的行数,也可用有
名缓冲区来保存,以后可用命令p或P将其取出
ZZ 存盘退出vi
a 光标后插入正文
b 光标回退至上一个字首
cw 替换当前字
c) 替换当前句子
dw 删除一个字
dd 删除一行
e 光标移到下一个字末
f 字符 在当前行向前查找字符
h 光标左移一格
i 在光标前插入正文
j 光标下移一行
k 光标上移一行
l 光标右移一格
m 字母 用字母标记当前行,以后可用 '字母使光标移动到当前行,
(参看'命令)
n 重复上次 / 或 ? 命令
o 在当前行下开辟一新行
p 将用户缓冲区内容放到光标位置(参看P命令)
r 替换当前字符
s 用一串字符替换当前字符
t 字符 光标移动至字符前
u 取消上次操作
w 光标移至下一字首
x 删除当前字符
yw 将当前字存入无名缓冲区,前面可加x,表示存入名字为x的有名
缓冲区(x为a-z),也可加数字表示存入的字数,以后可用P或p命
令取出
yy 将当前行存入无名缓冲区,用法参看yw
{ 光标移动至前一段开头
| 光标移至行首,若前面加数字,则移到数字指定行的行首
} 光标移至下一段开头
在:提示符下,常用命令如下:
:w 当前文件存盘
:w! 强制存盘
:w 文件 将内容写入指定文件
:w! 文件 强制写入指定文件
:x,y w 文件 将 x至 y 行写入指定文件中
:r 文件 将文件读到光标位置
:r ! 命令 将系统命令的输出读到光标位置
:q 退出编辑
:q! 强制退出
:x 与命令ZZ相同
:e 文件名 编辑另一文件
:e ! 重新编辑文件,放弃任何改变
:sh 执行sh,结束后回到编辑
:! 命令 执行命令后回到编辑
:n 编辑下一文件
:n 文件表 重新定义待编辑文件表
:set 设置 vi 的选项,例如 set nu 表示每行前显示行号,在选项前
加no则表示清除该选项,例如 set nonu 表示每行前不显示行
号,下面是一些常用的选项:
ai 自动缩进
aw 编辑下一文件前自动存盘
ic 查找字符串时不区分大小写
nu 每行前显示行号
sm 输入)及}时显示与之配对的( 或 {
slow 插入时延迟屏幕刷新
ws 使查找能绕过文件尾从头进行
wa 写文件之前不作对文件的检查

=================================================================

vi(Visual)是以视觉为导向的全屏幕编辑器、共分为三种方式(mode):
command方式:
 任何输入都会作为编辑命令,而不会出现在屏幕上,若输入错误则有“岬”的声音;任何输入


 都引起立即反映
insert方式:
 任何输入的数据都置于编辑寄存器。在command方式下输入(I,a,A等),可进入insert方式,  insert方式下按ESC,可跳回command方式。
escape方式:
以“:”或者“/”为前导的指令,出现在屏幕的最下一行,任何输入都被当成特别指令。
进入vi(在系统提示符下面输入以下指令):
vi           进入vi而不读入任何文件
vi filename      进入vi并读入指定名称的文件(新、旧文件均可)。
vi +n filename    进入vi并且由文件的第几行开始。
vi +filename      进入vi并且由文件的最后一行开始。
vi + /word filename  进入vi并且由文件的word这个字开始。
vi filename(s)     进入vi并且将各指定文件列入名单内,第一个文件先读入。
vedit         进入vi并且在输入方式时会在状态行显示“INSERT MODE"。
编辑数个文件(利用vi filename(s))进入vi后)
:args         显示编辑名单中的各个文件名
:n          读入编辑名单中的下一个文件
:rew         读入编辑名单中的第一个文件
:e#          读入编辑名单内的前一个文件
:e file        读入另一个文件进vi(此文件可不在编辑名单内),若原文件经修改还没有存档,则           应先以: w 存档。
:e! file       强迫读入另一个文件进入vi,原文件不作存档动作。
存储及退出vi
:w filename      存入指定文件,但未退出vi(若未指定文件名则为当前工作的文件名)。
:wq 或者 或者zz   存文件,并且退出vi.
:q          不作任何修改并退出vi。
:q!          放弃任何修改并退出vi。
:!command       暂时退出vi并执行shell指令,执行完毕后再回到vi。
:sh          暂时退出vi到系统下,结束时按Ctrl + d则回到vi。
加数据指令
i           在关标位置开始插入字符,结束时候按ESC键。
I           在光标所在行的最前面开始加字,结束时按ESC键。
a           在光标位置后开始加字,结束时按ESC键。
A           在光标所在行的最后面开始加字,结束时按ESC键。
o           在光标下加一空白行并开始加字,结束时按ESC键。
O           在光标上加一空白行并开始加字,结束时按ESC键。
!command       执行shell指令,并把结果加在光标所在行的下一行。
删除指令
nx          删除由光标位置起始的n个字符(含光标位置,按一个x表示删除光标所在的字符)
nX           删除由光标位置起始的n个字符(不含光标位置)。
ndw          删除光标位置其实的n个字符组(word)。
d0           将行的开始到光标位置的字符全部删除。
d$ 或D         将光标位置起始到行尾的字符全部删除。
ndd          将光标位置起始的n行(整行)删除(dd表示删除光标所在行)。
:start,endd      删除文件的第start到end行。
关标移动
0           移到一行的开始
$           移到一行的最后
[           移到文件开始位置
]           移到文件结束位置
nh          往左移n位
nl或者spacebar     往右移n位
nk          向上移n行
n+          向上移n行,光标在该行的起始
ni           向下移n行
n-          向下移n行,光标在该行的起始
H           移到屏幕的左上角
M           移到屏幕的中间行开头
L           移到屏幕的最后一行
G           移到文件的最后一行
nG或者:n       移到文件的第n行
nw          右移n个字组,标点符号属于字组
nW          右移n个字组,标点符号不属于字组
nb          左移n个字组,标点符号属于字组
nB          左移n个字组,标点符号不属于字组
Ctrl + u       屏幕上卷半个菜单
Ctrl + d        屏幕下卷半个菜单
Ctrl + b        屏幕上卷一个菜单
Ctrl + F        屏幕下卷一个菜单
修改指令
r           修改光标文件的字符
R           从光标位置开始修改,结束时按ESC键
new          更改n组字符,结束时按ESC键
ncc          从光标所在位置开始更改n行,结束时按ESC键
重排各行长度
i           并按Enter将该行由光标所在处断开,并进入insert方式
J           把下一行的数据连接到本行之后
寻找指令
/text         从光标位置往下找字串text
?text         从光标位置往上找字串text
n           继续找下一个字串(在输入上面的寻找指令之后使用)
寻找并且取代指令
:getxt1/s/ /text2/options   将各行的text1替换为text2
               option=g表示文件中所有的text1均被取代,若未输入任何option,则只有               各行中的第一个出现的text1被取代
               option=go 在屏幕显示各取代的行
               option=gc 在每个字串取代之前要求确认 
Start,endgtext1/s/ / text2/options  同上,只寻找并取代第start~end行。
或:Start,ends/text1/text2/options
复制及移动文件
:first,last co dest      将first 到last行的数据复制到目标行(dest)下面
:Start,end m dest      将start 到 end行的数据移动到目标行(dest)下。   
:r filename          将指定文件的内容读入光标所在行下。
nY               将光标所在位置开始的n行数据暂存
p               复制暂存数据在光标的下一行
P               复制暂存数据在光标的上一行
其他命令
.               重复前一指令
u               取消前一指令
Ctrl + l           刷新屏幕显示
:set number          显示文件的行号,但不会存文件
:set nonumber         解除行号显示
:set ai            设置每行起始位置(以光标当前位置为起始)
:set noai           取消行起始位置设定
:f 或<Ctrl> + g        告诉用户有关现行编辑文件的数据。=================================================================

Last line mode:
/exp Go forward to exp
?exp Go backward to exp


:w Write buffer to disk
:w newfile Write buffer to newfile
:w! file Write Absolutely
:q Quit editor
:q! Quit,discarding buffer
:wq Write buffer and quit
:x Write if needed & quit
:f Edit & file status
:r Read file into buffer
:r file Read named file in
:e (Re)edit file
:e! (Re)edit,discard file in
:e file Edit nameed file
:3,8d Delete lines 3-8
:4,9m 12 Move lines 4-9 to 12
:2,5t 13 Copy lines 2-5 to 13
:5,9w file Write lines 5-9 to file
:s/old/new/ Current line,sub first "old" w/ "new"
:s/old/new/g Current line,sub each "old" w/ "new"
:3,9s/old/new Lines 3-9,sub first "old" w/ "new"
:%s/old/new All lines,sub first "old" w/ "new"
:%s/old/new/g All lines,sub each "old" w/ "new"
:s/pat./new A . matches any charcter
:s/pat*/new A * matches 0 or more "t"s
:s/pa[0-9aeioA-Z]/new selection set or range
:s/pa[^aeiou]/new match any non-vowel
:s/^pat/new anchor "par" to beginning of line
:s/pats/new anchor "par" to end of line
:s/old/& and new/ restoe matched pattern on sub
:%s/./ &/ indenta whoie file
:set nu Display line numbers
:set nonu Turn off option
:set all Show all settings
:set list Try to display invisible chars
:set wm=5 Wrap lines 5 sp from R margin

Command mode:
<- | ->
hljk Cursor movement
G Goto last file line
3G Goto line 3
0 Goto line start
$ Goto line end
% Goto matching brace/paren
H Goto screen top
M Goto screen middle
L Goto screen bottom
w Go forward 1 word
3w Go forward 3 word
b Go back 1 word
3b Go back 3 word
n Repeat previous search
N Reverse previous search
x Delete one character
dw Delete one word
dd Delete one line
D Delete to end of line
d0 Delete to beginning of line
dG Delete to end of file
4dd Delete 4 lines
u Undo last change
. Do last chang
Y Yank a copy of a line
5Y Yank a copy of 5 lines
P Put below cursor
p Put above cursor
J Join next line to current
4J Join 4 lines to current
>> Shift a line right
3>> Shift 3 lines right
^d 1/2 scroll forward
^u 1/2 scroll backwards
^f Scroll forward
^b Scroll backwards
n Repeat previous search
N Reverse previous search
ZZ Write if needed & quit vi

Insert mode:
a Append after cursor
A Append at line end
cw Change a word
3cw Change 3 words
C Change line
i Insert before cursor
5i Insert at 5 times
I Insert at beginning of line
o Open a linebelow cursor
O Open a line above cursor
r Replace one character
R Replace/type-cver a line
s Substitute a character
S Substitue a line

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics