新闻  |   论坛  |   博客  |   在线研讨会
vi操作命令大全(转)
seifguo | 2014-11-06 11:35:27    阅读:762   发布文章

一 vi的操作模式 

vi提供两种操作模式:输入模式(insert mode)和指令模式(command mode)。在输入模式下,用户可输入文本资料。在指令模式下,可进行删除、修改等各种编辑动作。

在输入模式下,按Esc键切换到指令模式下。 

在指令模式下,按输入指令(i、a、o等)进入输入模式。 

 

二 进入vi 

$ vi  filename 

直接键入“vi + 所要编辑的文件名”,即可对指定的文件进行编辑。 

如果指定的文件为新文件,则提示:“New file”,否则显示该文件的当前内容。 

$ view filename 

以只读方式打开文件filename  


三 指令模式 

3.1 进入输入模式 

 a     在当前游标之后输入  

 A     在当前行之末输入   

 i     在当前游标之前输入   

 I     在当前行之首输入 

 o     在当前行之下新增一行,并在新增行输入  

 O     在当前行之上新增一行,并在新增行输入 输入结束后,按Esc键退出输入模式。

  

3.2 游标移动  

 h 向左移动一个字元  

 l 向右移动一个字元  

 j 向下移动一个字元  

 k 向上移动一个字元  

 b 左移一个单词,至词首  

 w 右移一个单词,至词尾

 0  移到当前行行首  

 $ 移到当前行行尾  

 + 移至下一行的行首  

 - 移至上一行的行首  

 H 移至视窗的第一行  

 M 移至视窗的中间一行  

 L 移至视窗的最后一行  

 G 移至该文件的最后一行  

 nG 移至该文档的第n行  

 n+ 下移n行  

 n- 上移n行 


3.3 视窗移动 

 *<Ctrl> + f 视窗下卷一页  

 *<Ctrl> + b 视窗上卷一页    

 <Ctrl> + d 视窗下卷半页  

 <Ctrl> + u 视窗上卷半页  

 * <Ctrl> + e 视窗下卷一行  

 * <Ctrl> + y 视窗上卷一行 


3.4 删除操作  

 x 删除游标所在字元  

 X 删除游标前一字元 

 dw 从游标当前位置开始向后删除一个单词  

 db 从游标当前位置开始向前删除一个单词  

 d0 从行首删除至当前游标位置  

 d$ 从游标当前位置删除至行尾  

 dd 删除游标所在行  

 D 同d$ 


3.5 修改操作 

 s 修改游标所在字元,修改完成后按Esc键结束  

 S 修改整行内容,修改完成后按Esc键结束

 r 替换当前游标所在字元 

 R 进入替换状态,直至按Esc键结束 

 cw 修改一个单词(从游标位置至词尾)  

 cb 修改一个单词(从词首至游标位置)  

 cc 修改整行内容,完成后按Esc键结束,同S  

 c0 修改行首至游标位置的内容  

 c$ 修改游标位置至行尾的内容  

 ~ 游标所在字元大小写切换 


3.6 指令重复 

在指令模式中,可在指令前面加入一个数字n,则该指令会重复执行n次。常用的重复操作有: 

 nx 删除n个字元  

 ndd 删除n行  

 ns 修改n个字元 


3.7 取消前一动作(Undo)  

 u 撤消上一指令的结果 


3.8 查找字符串 

 /字符串 从当前游标向后查找该字符串  

 ?字符串 从当前游标向前查找该字符串  

 n 从当前游标向后查找下一个字符串  

 N 从当前游标向前查找下一个字符串 


3.9 查看编辑状况 

 <Ctrl> + g 显示正在编辑的文件名、当前游标所在行数、文件总行数、文件是否被修改

  

四 保存与退出  

 :w 保存,但不退出  

 :wq 保存并退出  

 :x 同:wq 

 :q 退出,如果当前文件没有保存,禁止退出  

 :q! 不保存退出

 :w file1 将内容保存至文件file1中,注意:此时编辑的仍为原文件 

 :w! file1 将内容覆盖保存至文件file1中,如文件file1存在,:w file1将禁止执行   


五 环境设置 

 :set 显示已设置的环境状况  

 :set all 显示所有的环境设置选项  

 :set nu 显示行号  :set nonu 不显示行号 

 :set ts = n 设置Tab键的长度为n 


六 执行指令 

以下用具体的数字为例进行介绍,数字表示行数,游标所在行可用“.”代替,文件最后一行可用“$”代替。 

 : 10 , 20d 删除第10行至第20行的内容 

 :10d 删除第10行的内容  

 :%d 删除全部内容 

 : 10 , 20co30 将第10行至第20行的内容复制到第30行之后 

 : 10 , 20mo30 将第10行至第20行的内容移动到第30行之后  

 : 1 , $s/old/new 将第1行至最后一行中的old替换成new  

 : 1 , $s/^/new 将第1行至最后一行的内容前面插入new 

 : 10  将游标移至第10行 


七 重复指令  

 . 重复上一条指令  


八 切换到shell状态 

 :sh 切换到shell状态,exit返回


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客