分类: LINUX
2009-10-11 10:39:39
vi提供两种操作模式:输入模式(insert mode)和指令模式(command mode)。在输入模式下,用户可输入文本资料。在指令模式下,可进行删除、修改等各种编辑动作。
在输入模式下,按Esc键切换到指令模式下。
在指令模式下,按输入指令(i、a、o等)进入输入模式。
$ vi filename [filename filename]
直接键入“vi + 所要编辑的文件名”,即可对指定的文件进行编辑。
如果指定的文件为新文件,则提示:“New file”,否则显示该文件的当前内容。
filename可以是文件名,也可以是表达式如:*.c,*haha.*
也可以不指定文件名,直接进入编辑界面,这种方法用于编辑一个新文件,但是暂时还没有确定文件应该叫什么名字时。
$ view filename
以只读方式打开文件filename
以下指令集中重要度为“***”的必须掌握的指令,否则无法正常使用vi,重要度为*的为建议掌握的指令,可以更方便地使用vi,其它属于技巧级指令,可以不掌握。
下面所列的所有命令,都必须在指令模式下才能执行,在输入模式下将把输入的字符作为文件内容添加到文件中(ESC除外,因为该命令将从输入模式切换到指令模式)。
重要度 |
指令集 |
功能 |
*** |
a |
在当前光标之后输入 |
|
A |
在当前行之末输入 |
*** |
i |
在当前光标之前输入 |
|
I |
在当前行之首输入 |
*** |
o |
在当前行之下新增一行,并在新增行输入 |
|
O |
在当前行之上新增一行,并在新增行输入 |
其他同样可以起到切换到输入模式的非正规方法:
重要度 |
指令集 |
功能 |
** |
s[0 $...] |
替换字符串命令,切换到输入模式,输入的内容将替换指定的内容,直到敲击ESC为止 |
** |
c[w 0 $...] |
替换单词命令,切换到输入模式,输入的内容将替换指定的内容,直到敲击ESC为止 |
以上命令在下面有详细介绍。
输入结束后,按Esc键退出输入模式。
重要度 |
指令集 |
功能 |
*** |
h |
向左移动一个字节 |
*** |
l |
向右移动一个字节 |
*** |
j |
向下移动一个字节 |
*** |
k |
向上移动一个字节 |
* |
b |
左移一个单词,至词首 |
* |
w |
右移一个单词,至词首 |
* |
e |
右移一个单词,至词尾 |
* |
gg |
移动到文档起始位置 |
* |
0 |
移到当前行行首 |
* |
^ |
移动到本行行首第一个可见字符 |
* |
$ |
移到当前行行尾 |
|
+ |
移至下一行的行首 |
|
- |
移至上一行的行首 |
|
H |
移至视窗的第一行 |
|
M |
移至视窗的中间一行 |
|
L |
移至视窗的最后一行 |
|
G |
移至该文件的最后一行 |
|
nG |
移至该文档的第n行 |
|
N+ |
下移n行 |
|
n- |
上移n行 |
|
{ |
光标移动到上一个空行 |
|
} |
光标移动到下一个空行 |
|
[[ |
光标移动到下一个函数起始位置(’{‘字符所在位置) |
|
]] |
光标移动到上一个函数起始位置(’{‘字符所在位置) |
|
( |
光标移动到上一段落起始位置,空行也被认为是段落(多个连续空行被认为是一个段落) |
|
) |
光标移动到下一段落起始位置,空行也被认为是段落(多个连续空行被认为是一个段落) |
以上命令从h到e,均可指定重复操作次数,如5h表示光标向前移动5个字节,10j表示向下移动10行。
重要度 |
指令集 |
功能 |
*** |
|
视窗下卷一页 |
*** |
|
视窗上卷一页 |
|
|
视窗下卷半页 |
|
|
视窗上卷半页 |
* |
|
视窗下卷一行 |
* |
|
视窗上卷一行 |
|
zz |
将当前行设置为视窗中的中间位置。 |
重要度 |
指令集 |
功能 |
*** |
x |
删除光标所在字节 |
|
X |
删除光标前一字节 |
* |
dw |
从光标当前位置开始向后删除一个单词 |
|
db |
从光标当前位置开始向前删除一个单词 |
* |
d0 |
从行首删除至当前光标位置 |
* |
d$ |
从光标当前位置删除至行尾 |
*** |
dd |
删除光标所在行 |
|
D |
同d$ |
|
dG |
删除从当前光标位置知道文档末尾的所有内容。 |
以上x,X,dw,db,dd可以指定字符/行数,如3x表示删除从当前光标所在位置起的3个字符,3dd表示删除从当前光标所在行开始的3行。