vi命令一览表

类别:软件工程 点击:0 评论:0 推荐:

vi命令一览表!
ex, vi, view - text editors

  ◎SYNOPSIS 
   
     vi [-eFGlRrSv] [-c cmd] [-t tag] [-w size] [file ...]
     ex [-eFGRrSsv] [-c cmd] [-t tag] [-w size] [file ...]
      
  ◎DESCRIPTION
  
     ex和vi是相同程式但不同介面,ex是一行处理的(line-oriented),
     vi是以全萤幕为基准的(screen oriented).二者能相互切换.
    
     View相当於vi使用-R(唯读)参数
    
  ◎OPTIONS

       -e     以ex模式开始编辑,如同用ex编辑一般。
              vi -e filename 等同於 ex filename

       -F     当第一次编辑时,不要让vi整个档案。
              (预设是整个档案,以避免当您在编辑时,他人更改这个档案。)

       -R     以唯读模式开启,如同以vipw开启档案,或在命令列中设定readonly参数。

       -r     重新取得某个特定档案,若没有指定档案,档案表列会被重新取得。
              若没有该指定档案,档案会被视为没有-r参数编辑。

       -S     以安全编辑模式启动,不允许所有的外部程式存取。

       -s     进入batch模式,只能应用在ex编辑。batch模式在执行ex scripts非常有用。
              一些及时资讯及其他使用者导向的讯息被忽略(不显示),
              没有开始档案或环境变数被读取。

       -w     设定基本的视窗大小,用以定义显示的行数。

       -v     以vi模式开始编辑,如同vi 或view命令。

       ex/vi从标准输入读取讯息,在vi介面, 若标准输入不是一个终端机,会产生错误。
       在ex介面,若标准输入不是终端机,无论如何ex会试着从他读取命令。
       然而,此时会以batch模式进行,如同-s参数被指定。

移动命令:
       <control+A>     往下移动到这个字下次一出现的地方。

       <control+B>     标向上移动一个萤幕。

       <control+D>     标往下移动数行(约12行)。

       <control+E>     将萤幕往上一行,但标位置不变。

       <control+F>     标往下移动一个萤幕。

           +         标往下移动到下一行第一个非空白字元。
     
       <control+U>   标往上移动数行(约12行)。

       <control+Y>   将萤幕往上动,但标位置不变.
                     CTRL+Y 每移动一次 Y就按一次
                     (当然您的标须位在至少能够向上动的位置)

           $         将标移动到该行尾.

           (         标往上移动到上一句子.

           )         标往下移动到下一句子.

           -         标移动到上一行第一个非空白字元.

           0(数字)   移动标到该行的第一个字元(包含空白).

           <         移动该行向左移动一个tab键距离,按第二次後开始动作.

           >         移动该行向右移动一个tab键距离,按第二次後开始动作.

           B         往上移动标到下一个字的开始.

           E         标往後移动到下一个字的最後一个字元.

           nG        移动到某行,n为行数,若没有指定则为档案的最後一行.

           H         移动标到档案第一行行首.

           L         将标移动到萤幕的最下一行.

           M         将标移动到萤幕的中间行.

           W         往下移动标到下一个字的开始.

           ^         移到该行第一个非空白字元.

           e         移动到该字的最後一字母.

           f<字元>   行中向後搜寻该字母并移动标到该位置.
                      移动到a字母的位置fa

           t<字元>   行中向後搜寻该字母并移动标到该字元前一个位置.

           {         往上移动到前一段落.

           }         往下移动到後一段落.

    档案命令:
    
       <control+G>     显示档案的资讯。
                       显示出目前档案是否更改,所在行的位置.
                       file_name: unmodified : line 1 of 380 [0%]

       <control+L>   重画萤幕。

       <control+R>   重画萤幕。
       
       <control+Z>   暂停编辑 回到shell,可用fg回到编辑画面

       <control+^>   切换到最近编辑的档案.
                     vi file_name file_name2 
                     用此命命可以在两个档案中切换.

           ZZ        将文件存档并离开vi
           
    编辑命令:
       
       输入:
           I         移动标道行首的第一个字元并开始接受输入.

           R         以取代模式进入输入模式.
                  
       :
           Y         该行到暂存区
       
       删除:
           D         从标目前位置道行尾的所有字元删除..

           S         将该行清除并进入输入模式.

           X         删除标之前的一个字元
       
       取代:
       !shell命令    !後接shell comd ,并以shell cmd 执行结果取代标该行.
                     !panda
                     用以下讯息取代原有行的内容
                     bash: panda: command not found

           r         按r後接着按某字元,以取代标所在的该字元.

           ~         切换标所在字元的大小写
       重:
           &         在该行重之前的规则表示式.
                     前提是需要之前有执行过规则表示式.
                     用panda取代a  :s/a/panda/
                     若之前没有任何表示式 则系统会显示如下讯息
                     No previous regular expression

           .         重上一个更改文件内容的vi命令.

           n         搜寻之前所搜寻过的字串
                     若先执行 /BSD
                     再执行   n     等同於执行 /BSD
                     若先前没有搜寻任何东西 会有如下讯息
                     No previous search pattern.

       复原:
           U         恢复状态到标起初接触此行的状态
           
           u         复原前一个动作产生的效果(也就是回复)

       其他:
           :         执行ex 命令

           J         将下一行与此行合.

           Q         离开vi模式并切换到ex模式.


====================进入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   光标右移一个字至字尾
)   光标移至句尾
(   光标移至句首
}  光标移至段落开头
{  光标移至段落结尾
nG  光标移至第n行首
n+  光标下移n行
n-  光标上移n行
n$  光标移至第n行尾
H   光标移至屏幕顶行
M  光标移至屏幕中间行
L   光标移至屏幕最后行
0  (注意是数字零)光标移至当前行首
$  光标移至当前行尾
t  ?????

=================屏幕翻滚类命令================
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个字
d0 删至行首(删除当前光标的前一个字符开始到行首的字符串)
d$ 删至行尾(删除当前光标所在字符到行尾的字符串)
ndd 删除当前行及其后n-1行,并且光标停留在当前行后的第n行的第一个非空字符处
dd 删除当前行
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的输出结果放到当前行


==================寄存器操作=================================
"?nyy 将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyw 将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyl 将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
"?p 取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一 个数字
ndd 将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。
 

=======================多行注释====================================
如果要给多行程序作注释,一个笨办法就是 插入 # ,然后用 j 跳到下一行用 . 命令,
重复上个命令。如果要注释几百行,这样的方法恐怕太愚蠢了。一个聪明的办法是:

:.,+499 s/^/#/g


=======================加密文件================================
:X 在提示下就可以输入密码了。

========================在 VIM 下使用滚轮鼠标 =====================
本文出自:http://www.freelamp.com 作者: 徐永久 (2002-03-01 08:02:00)
滚轮鼠标很棒吧?我们要在 Vi 程序下也要让他滚动。
不必去按 Ctrl-F/Ctrl-B 了!

如果你像我那样喜欢在 xterm 下使用 Vim 来编辑文件,那么对于在Vim 下能使用滚
轮鼠标一定非常神往。本文的这个小技巧便能帮助你实现这个梦想。

你需要把下面的代码放入~/.Xdefaults 文件:


XTerm*VT100.Translations: #override \n\ 
: string("0x9b") string("[64~") \n\ 
: string("0x9b") string("[65~") \n\ 
: string("0x9b") string("[62~") \n\ 
: string("0x9b") string("[63~") \n\ 
: \n\ 

然后,修改 vimrc 文件,为以上的绑定建立映射:

map [62~ 
map! [62~ 
map [63~ 
map! [63~ 
map [64~ 
map! [64~ 
map [65~ 
map! [65~ 

好了,现在就可以利用滚轮来翻滚vim 屏幕了。
忘掉 Ctrl-F 和 Ctrl-B 吧。
 

 

本文地址:http://com.8s8s.com/it/it36188.htm