分类: LINUX
2009-10-11 10:40:02
重要度 |
指令集 |
功能 |
** |
[n]yy |
拷贝一行或n行 |
** |
p |
粘贴刚刚拷贝或者删除(d*命令操作的内容)到当前光标后面,如果如果是单词则粘贴到当前行,其他内容则在当前光标所在行后面添加新行进行粘贴 |
** |
P |
粘贴刚刚拷贝或者删除(nx或者d*命令操作的内容)到当前光标后面,如果如果是单词则粘贴到当前行,其他内容则在当前光标所在行后面添加新行进行粘贴 |
重要度 |
指令集 |
功能 |
*** |
s |
修改光标所在字节,修改完成后按Esc键结束 |
|
S |
修改整行内容,修改完成后按Esc键结束 |
* |
r |
替换当前光标所在字节 |
* |
R |
进入替换状态,直至按Esc键结束 |
* |
cw |
修改一个单词(从光标位置至词尾) |
|
cb |
修改一个单词(从词首至光标位置) |
* |
cc |
修改整行内容,完成后按Esc键结束,同S |
* |
c0 |
修改行首至光标位置的内容 |
* |
c$ |
修改光标位置至行尾的内容 |
|
~ |
光标所在字节大小写切换 |
s,r,cw,cb命令可以指定重复操作次数,如5s表示替换当前光标及其以后的5个字符,3cb表示替换当前光标及其之前的3个单词。
在指令模式中,可在指令前面加入一个数字n,则该指令会重复执行n次。常用的重复操作有:
重要度 |
指令集 |
功能 |
*** |
nx |
删除n个字节 |
*** |
ndd |
删除n行 |
*** |
ns |
修改n个字节 |
重要度 |
指令集 |
功能 |
*** |
u |
撤消上一指令的结果 |
** |
U |
撤销本行上的所有修改 |
一般vi只保存上一次的修改即本行的所有修改,因此执行u指令时,撤销上次修改,再执行u指令则撤销撤销操作。如果执行了U,则u就没用了。
但是有些机器可能安装了vim软件,改软件保存所有的修改,因此u可以一直进行撤销,想撤销撤销操作是不可能的事情。
重要度 |
指令集 |
功能 |
*** |
/字符串 |
从当前光标向后查找该字符串 |
*** |
?字符串 |
从当前光标向前查找该字符串 |
*** |
n |
从当前光标向后查找下一个字符串 |
*** |
N |
从当前光标向前查找下一个字符串 |
|
# |
向上查找当前光标所在位置的单词,如果当前位置为空白,则为其后的第一个单词 |
|
* |
向下查找当前光标所在位置的单词,如果当前位置为空白,则为其后的第一个单词 |
重要度 |
指令集 |
功能 |
*** |
|
显示正在编辑的文件名、当前光标所在行数、文件总行数、文件是否被修改 |
重要度 |
指令集 |
功能 |
* |
% |
定位到匹配的“(”、“)”、“{”、“}” |
括号匹配符可以用在各种指令中,如d%表示从但前光标位置删除到匹配的“(”“)”“{”“}”的位置,c%表示替换从当前光标到配置的“(”“)”“{”“}”位置,y%表示拷贝从当前光标位置到其后匹配的“)”或“}”。
当光标不在“(”“)”“{”“}”上时,默认找其后最近的“(”,然后找“{”,如:
if ( Dflag != TMD && ( rflag != READABLE || wflag != WRITEABLE ) ) {
…
}
光标在&处,此时若执行d%则效果为:
if ( Dflag != TMD ) {
…
}
重要度 |
指令集 |
功能 |
*** |
: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 |
注:vi环境设置的缺省值可在$HOME/.exrc文件中设置。
以下用具体的数字为例进行介绍,数字表示行数,光标所在行可用“.”代替,文件最后一行可用“$”代替。
重要度 |
指令集 |
功能 |
* |
: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行 |
* |
:10,20y |
拷贝第10行至第20行的内容 |
** |
:g/old/s//new |
在全文档范围内查找每行第一次出现的old字符串并替换为new字符串 |
** |
:g/old/s//new/g |
在全文档范围内查找所有old字符串并替换为new字符串 |
** |
:g/old/d |
删除文档中包含old字符串的行 |
*** |
:r filename |
读入filename文件内容,并粘贴到当前光标下一行 |
* |
:e |
重新载入当前文档的内容覆盖当前所有修改,其实就是将所有自上次保存(或者打开)后的所有修改撤销。 |
* |
:$ |
光标移动到文档末尾一行行首 |
* |
:[w]n[!] [filename] |
切换到下一个文件进行编辑。如果指定了filename则打开指定的filename文件进行编辑,如果filename不存在则默认为创建该新文件。如果没有指定文件名,则只能在vi已经打开多个文件且当前编辑的文件不是最后一个文件时使用该命令。n表示next,w表示在切换到下一个文件前将当前文件的修改进行保存,!表示强制执行。 |
* |
:rew[!] |
rew即rewind,重新打开第一个文件进行编辑,但是如果当前文件的修改没有保存的话将失败,如果使用了!,则将舍弃对当前文档的最近修改(自上次存储或者文件打开以来),强行打开第一个文件进行编辑。 |
* |
:la[!] |
la即last,打开最后一个文件进行编辑,类似rew,只不过一个是打开第一个文件,一个是打开最后一个文件。 |
*** |
:help [key] |
显示vi的帮助信息,如果指定了命令,则显示该命令的帮助信息。用:exit或:q推出帮助界面。 |
重要度 |
指令集 |
功能 |
*** |
. |
重复上一条指令 |
重要度 |
指令集 |
功能 |
*** |
:sh |
切换到shell状态,此时可以执行所有shell命令,知道执行exit返回文档编辑状态。 |