编写说明标题:vi基本操作方法类别:文档存放位置:培训资料\Unix\vi基本操作方法.doc编辑软件:Microsoft Word XP 中文版版本历史:目录编写说明 (II)一vi的操作模式 (1)二进入vi (1)三指令模式 (1)3.1进入输入模式 (2)3.2光标移动 (2)3.3视窗移动 (3)3.4删除操作 (4)3.5拷贝和粘贴操作 (4)3.6修改操作 (4)3.7指令重复 (5)3.8取消前一动作 (5)3.9查找字符串 (5)3.10查看编辑状况 (5)3.11括号匹配 (6)四保存与退出 (6)五环境设置 (7)六执行指令 (7)七重复指令 (8)八切换到shell状态 (8)一vi的操作模式vi提供两种操作模式:输入模式(insert mode)和指令模式(command mode)。
在输入模式下,用户可输入文本资料。
在指令模式下,可进行删除、修改等各种编辑动作。
在输入模式下,按Esc键切换到指令模式下。
在指令模式下,按输入指令(i、a、o等)进入输入模式。
二进入vi$ vi filename [filename filename]直接键入“vi + 所要编辑的文件名”,即可对指定的文件进行编辑。
如果指定的文件为新文件,则提示:“New file”,否则显示该文件的当前内容。
filename可以是文件名,也可以是表达式如:*.c,*haha.*也可以不指定文件名,直接进入编辑界面,这种方法用于编辑一个新文件,但是暂时还没有确定文件应该叫什么名字时。
$ view filename以只读方式打开文件filenamevi +n filename:打开文件,并将光标置于第n行首vi + filename:打开文件,并将光标置于最后一行首vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处vi -r filename:在上次正用vi编辑时发生系统崩溃,恢复filenamevi filename....filename:打开多个文件,依次编辑三指令模式以下指令集中重要度为“***”的必须掌握的指令,否则无法正常使用vi,重要度为 的为建议掌握的指令,可以更方便地使用vi,其它属于技巧级指令,可以不掌握。
下面所列的所有命令,都必须在指令模式下才能执行,在输入模式下将把输入的字符作为文件内容添加到文件中(ESC除外,因为该命令将从输入模式切换到指令模式)。
3.1 进入输入模式其他同样可以起到切换到输入模式的非正规方法:输入结束后,按Esc键退出输入模式。
3.2 光标移动表示向下移动10行。
n$:光标下移n-1行,并置到尾nG:光标移至第n行首n+:光标下移n行n-:光标上移n行ctrl+g:会显示该文件名称,该行的行号,文件中最末行的行号,光标所在行占总行号的百分比fx :往右移动到x 字符上Fx :往左移动到x 字符上tx :往右移动到最近的x 字符前Tx :往左移动到最近的x 字符后(注意:以上四个命令中,其中x是键入的字符)分号,配合f 和t 使用,重复一次逗号,配合f 和t 使用,反方向重复一次3.3 视窗移动3.4 删除操作以上x,X,dw,db,dd可以指定字符/行数,如3x表示删除从当前光标所在位置起的3个字符,3dd表示删除从当前光标所在行开始的3行。
3.5 拷贝和粘贴操作3.6 修改操作s,r,cw,cb命令可以指定重复操作次数,如5s表示替换当前光标及其以后的5个字符,3cb表示替换当前光标及其之前的3个单词。
3.7 指令重复在指令模式中,可在指令前面加入一个数字n,则该指令会重复执行n次。
常用的重复操作有:3.8 取消前一动作一般vi只保存上一次的修改即本行的所有修改,因此执行u指令时,撤销上次修改,再执行u 指令则撤销撤销操作。
如果执行了U,则u就没用了。
但是有些机器可能安装了vim软件,改软件保存所有的修改,因此u可以一直进行撤销,想撤销撤销操作是不可能的事情。
3.9 查找字符串3.10 查看编辑状况3.11 括号匹配”“{”“}”的位置,c%表示替换从当前光标到配置的“(”“)”“{”“}”位置,y%表示拷贝从当前光标位置到其后匹配的“)”或“}”。
当光标不在“(”“)”“{”“}”上时,默认找其后最近的“(”,然后找“{”,如:…}光标在&处,此时若执行d%则效果为:…}四保存与退出五环境设置六执行指令以下用具体的数字为例进行介绍,数字表示行数,光标所在行可用“.”代替,文件最后一行可用“$”代替。
:s/p1/p2/g:将当前行中所有p1均用p2替代:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代:g/p1/s//p2/g:将文件中所有p1均用p2替换:g/s1/s/s2/s3/g 第一个g表示对每一个包括s1的行都进行替换,第二个g表示对每一行包括s1的行所有的s2都用s3替换s表示替换,s2是要被替换的字符串,他可以和s1相同(如果相同的话用//代替),s3是替换字符串:%s/old_word/new_word/g 这个指令是于在整个文件中替换特定字符串七重复指令八切换到shell状态选项设置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:保存当前文件并退出:wq:保存当前文件并退出:q:退出vi:q!:不保存文件并退出vi:!command:执行shell命令command:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入:r!command:将命令command的输出结果放到当前行。
1.交换两个字符位置xp2.上下两行调换ddp3.把文件内容反转:g/^/m0/ (未通过)4.上下两行合并J5.删除所有行dG6.从当前位置删除到行尾d$7.从当前位置复制到行尾y$ 如果要粘贴到其他地方p 就可以了由于vi 是建立在EX 上的所以当键入: 时就来到了EX 命令状态8.写简写,跳出全称:ab string strings例如":ab usa United States of America" ,当你在文见里插入usa 时United States of America 就蹦出来了9.:map keys new_seq定义你当前键盘命令10.显示行号:set [all]vi or ex 的编辑状态如显示每行:set nu取消现实行号:set nonu11.在命令状态下,nyy表示拷贝从光标行起的下n行内容,p表示paste,可刚复制的内容粘贴在光标处的下面。
12.单个字符替换用r,覆盖多个字符用R,用多个字符替换一个字符用s,整行替换用S17. vi 环境选项Solaris kshnoautoindent nomodelines noshowmodeautoprint nonumber noslowopennoautowrite nonovice tabstop=8nobeautify nooptimize taglength=0directory=/var/tmp paragraphs=IPLPPPQPP LIpplpipnpbtags=tags /usr/lib/tags noedcompatible prompt tagstacknoerrorbells noreadonly term=vt100noexrc redraw noterseflash remap timeouthardtabs=8 report=5 ttytype=vt100noignorecase scroll=11 warnnolisp sections=NHSHH HUuhsh+c window=23nolist shell=/bin/ksh wrapscanmagic shiftwidth=8 wrapmargin=0mesg noshowmatch nowriteanyFor C-Shell:setenv EXINIT "set nu"For Bourne or Korn Shell:EXINIT="set nu"; export EXINITFor Korn Shell Only (alternate method):typeset -x EXINIT="set nu"在.profile 里设置vi 的环境选项, 以上均测试过18.标记文本mchar用字母char标记当前光标的位置`char 移至char所标记处'char移至char标记所在行的开头处"移至当前行上一次所在位置(在光标移动之后)――一个双引号''移至当前行上第一次所在位置的行的开头处(在光标移动之后)――两个单引号19. 如何在两个文件之间快速切换(注意:必须是一个窗口打开的文件)方法一:同时vi多个文件时,CTRL-SHIFT-6回到上一个文件,在本次vi的文件和上次vi 的文件之间切换。
但是我发现一个BUG:在用CTRL-SHIFT-6切换到上一个文件后,用:args查看多文件vi状态时,屏幕底部仍然显示目前vi的是刚才的文件。
(在HP-UX,Solaris,AIX上通过)方法二:也可以使用::e#进行切换方法三:还可以用:n --- 在这里n代表next进行切换20.sco 下VI 要在文本前同样的字符加用%s/^/要加的内容/g 要在文本后同样的字符加%s/$/要加的内容/g。