在solaris下,vi编辑器的语法不同于一般linux vi的用法,不过可以用基于图形介面的gedit工具代替,语法是bash# gedit filename
下面介绍常用vi命令的语法,常用命令颜色标注
进入vi的命令ITPUB个人空间n:G2w;VJ\A0CQ"p
vi filename :打开或新建文件,并将光标置于第一行首
n2v!N P(uZ7\7cr0vi +n filename :打开文件,并将光标置于第n行首ITPUB个人空间C/Se"ZKwsH2X
vi + filename :打开文件,并将光标置于最后一行首ITPUB个人空间+E5x'R$Q%B
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处ITPUB个人空间"I7Y h#lSn0WW
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
-h*~2WQS%tT0vi filename....filename :打开多个文件,依次进行编辑
移动光标类命令
:0 文件首
%ui"f1h pO|aU$N0:G : 文件尾ITPUB个人空间3j"BU[&]/f+c#y
h :光标左移一个字符ITPUB个人空间"s0Vf9jN.k"OGe^ H:FB
l :光标右移一个字符
l.V XLJI0space:光标右移一个字符
Qs4b*Y5J-[d1D0Backspace:光标左移一个字符ITPUB个人空间1Tg r6^M$_`e
k或Ctrl+p:光标上移一行ITPUB个人空间@X3n)Z2]M
j或Ctrl+n :光标下移一行ITPUB个人空间\3V0a{cL
Enter :光标下移一行ITPUB个人空间!|H5BNLo0a$u4GM
w或W :光标右移一个字至字首ITPUB个人空间 k#j9E&T#t)v$B
b或B :光标左移一个字至字首ITPUB个人空间ym@3P%v,}$G
e或E :光标右移一个字至字尾
'{ p8n U/v9z u/b L2|0) :光标移至句尾ITPUB个人空间&qiEF jjn
( :光标移至句首ITPUB个人空间"t,`5RL{+D
}:光标移至段落开头ITPUB个人空间N!bq+Lb,a)E
{:光标移至段落结尾ITPUB个人空间 PS ^ P _ Xt
nG:光标移至第n行首ITPUB个人空间M.b-p8hP1R
n+:光标下移n行
jn P2u y } Hp0n-:光标上移n行ITPUB个人空间;[WIa3m*o
n$:光标移至第n行尾ITPUB个人空间M\X3O&D)~o0y
H :光标移至屏幕顶行ITPUB个人空间3UF'w^7J
M :光标移至屏幕中间行
8r!J NHr+S0L :光标移至屏幕最后行
!^VPhRLK00:(注意是数字零)光标移至当前行首
%K9LB T!]/I~0$:光标移至当前行尾
屏幕翻滚类命令
$Q+_/r-AK` Z W0Ctrl+u:向文件首翻半屏
udC#\;TD^c+F0Ctrl+d:向文件尾翻半屏ITPUB个人空间3Wn%@NX$[uq e
Ctrl+f:向文件尾翻一屏ITPUB个人空间,I6@-@xk
Ctrl+b;向文件首翻一屏ITPUB个人空间c}8V:VU:p
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
插入文本类命令
4FOqV(`]L4G0i :在光标前 ITPUB个人空间Bw.E{`6M
u 取消上次操作
3x0e8c,Z*\3A-VTy+MNx0I :在当前行首ITPUB个人空间 DH9OEp3C8mC/zZ
a:光标后
3^X-Y)O&z)M0A:在当前行尾ITPUB个人空间X#Ehr|C3T
o:在当前行之下新开一行ITPUB个人空间u!J;J})L'eC.wHRH
O:在当前行之上新开一行
x,`\ZZ4F3uV C0r:替换当前字符
c%c)R6ix[5ed0R:替换当前字符及其后的字符,直至按ESC键
:l3P^p~6yg'R0s:从当前光标位置处开始,以输入的文本替代指定数目的字符
&BP\ }/j$_3fmi0S:删除指定数目的行,并以所输入文本代替之
8?"Y4N(\{G/T @0ncw或nCW:修改指定数目的字ITPUB个人空间1sh'Bl UN.`5c
nCC:修改指定数目的行
删除命令
x: 删除光标处字符ITPUB个人空间~Pcik}:Z EK A
dd: 删除当前行ITPUB个人空间B*mk$t.L
ndw或ndW:删除光标处开始及其后的n-1个字
3we)F)`|0do:删至行首
1|KED)PyZt^z0d$:删至行尾ITPUB个人空间oM FhFx4kH2@
ndd:删除当前行及其后n-1行ITPUB个人空间|/Ea je;E
x或X:删除一个字符,x删除光标后的,而X删除光标前的
b'm0{4s)k5~G*}j0Ctrl+u:删除输入方式下所输入的文本
搜索及替换命令
#I0Cdf o4e0/pattern:从光标开始处向文件尾搜索patternITPUB个人空间zt/]m3HFb
?pattern:从光标开始处向文件首搜索patternITPUB个人空间_ }V o&m Aj,O
n 继续查找
$vW{)W~Ip Dm0N 反向继续查找ITPUB个人空间Z:xoy3E(G&i
:s/p1/p2/g:将当前行中所有p1均用p2替代
c/p#y iO~;b0:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代ITPUB个人空间+S1nO8x"l*xrxGp
:g/p1/s//p2/g:将文件中所有p1均用p2替换
选项设置
iqnL9k{/^0all:列出所有选项设置情况ITPUB个人空间k"vx|&A`Le Q
term:设置终端类型
+wH(j+}/Hzla^$st0ignorance:在搜索中忽略大小写ITPUB个人空间S X;y}O z G
list:显示制表位(Ctrl+I)和行尾标志($)
x8n+N]6_ ZPo2M|~8X0number:显示行号
,?(w-h4e/S Y A wI0report:显示由面向行的命令修改过的数目ITPUB个人空间d2LMR"?1`
terse:显示简短的警告信息
my5MS1gB1s?0warn:在转到别的文件时若没保存当前文件则显示NO write信息
z`,r1\$D:c0U/\0nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符
xc"V$ZJ e}6h0nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始ITPUB个人空间'q}1Z,g]Rb
mesg:允许vi显示其他用户用write写到自己终端上的信息
最后行方式命令
:set nu 显示行号
,J @*is6GS0q0:set nonu 隐藏行号ITPUB个人空间{\"ZV)h'Rh+C
:set showmode 显示当前操作模式(如用vedit将自动打开)
:t9v-R(rYMw fJg!\0:set noshowmode 关闭模式显示
J3BTC%yu0:set 显示所有vi变量
%} V m"W;mV!V0:set all 显示所有可能的vi变量和它们的当前的值ITPUB个人空间7I1^C"K$P K
:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下
s6j^ZU @A{A*y0:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下ITPUB个人空间^\4CC v#PU9Ndb
:n1,n2 d :将n1行到n2行之间的内容删除
,F ?U.P7|nR0:w :保存当前文件
2^2x7?$V*m^0:e filename:打开文件filename进行编辑
)n4VLU+S8r'K0:x:保存当前文件并退出
8hq#kqDQ@/z @7i~0:wq! 存盘退出
&G![2_\d5J8U0:q:退出vi
X,L9_#u.B]u0:q!:不保存文件并退出viITPUB个人空间KeSD(m9~o
:!command:执行shell命令command
}6S.wC3m$HO6y}de0:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入ITPUB个人空间:Qj%I(rh$?I
:r!command:将命令command的输出结果放到当前行
寄存器操作
}@\T zM0"?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字ITPUB个人空间7xmL0z6W Z8{3S8}7?
"?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字ITPUB个人空间&@s3D5h0i&b,VA V
"?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
E*t$j(I6_K To D0"?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字
0LJ+J{U8L0n rk$E4Q0ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。