转载参考地址:http://www.cnblogs.com/chinhao/p/4649106.html

 

 

进入vi

vi filename                打开或新建文件,并将光标置于第一行首

vi +n filename           打开文件,并将光标置于第 n行首

vi + filename             打开文件,并将光标置于最后一行首

vi -r filename            在上次正用 vi编辑时发生系统崩溃,恢复文件

vi file1....filen            打开多个文件,依次编辑

vi的工作模式

命令行模式 (command mode):控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。

插入模式(Insert mode):只有在 Insert mode 下,才可以做文字输入,按「ESC」键可回到命令行模式。

底行模式(last line mode):将文件保存或退出 vi,也可以设置编辑环境,如寻找字符串、列出行号等。

命令行模式

移动光标

k、j、h、l      功能分别等同于上、下、左、右箭头键 

Ctrl+b            在文件中向上移动一页(相当于 PageUp 键)

Ctrl+f             在文件中向下移动一页(相当于 PageDown 键)

ctrl+u             屏幕往后移动半页

ctrl+d            屏幕往前移动半页

H                   将光标移到屏幕的最上行(Highest) 

nH                 将光标移到屏幕的第 n 行(如 2H: 将光标移到屏幕的第 2 行)

M                  将光标移到屏幕的中间(Middle)

L                   将光标移到屏幕的最下行(Lowest) 

nL                 将光标移到屏幕的倒数第 n 行(如 3L:将光标移到屏幕的倒数第 3 行)

w                  在指定行内右移光标,到下一个字的开头

e                   在指定行内右移光标,到一个字的末尾

b                   在指定行内左移光标,到前一个字的开头

0                   数字0,左移光标,到本行的开头 

G                  光标移动到文章的最后

nG                光标移动到文章的第 n行(如8G:移动到文章的第 8行)

$                   右移光标,到本行的末尾 

^                   移动光标,到本行的第一个非空字符

替换和删除

rc                  用 c 替换光标所指向的当前字符

nrc                用 c 替换光标所指向的前 n 个字符(如 5rc: 用 c 替换光标所指向的前 5 个字符)

x                   删除光标所在位置后面的一个字符 

nx                 删除光标所在位置后面的 n 个字符(如 3x:删除光标所在位置后面的 3 个字符)

X                  大写的 X,删除光标所在位置前面的一个字符

nX                删除光标所在位置前面的 n 个字符(如 3X : 删除光标所在位置前面的 3 个字符)

dd                删除光标所在行,并去除空隙 

ndd              从光标所在行开始删除 n 行内容,并去除空隙(如 3dd: 删除 3 行内容,并去除空隙) 

复制和粘贴

从正文中删除的内容(如字符、字或行)并没有真正丢失,而是被剪切并复制到了一个内存缓冲区中。用户可将其粘贴到正文中的指定位置。

p                  小写字母 p,将缓冲区的内容粘贴到光标的后面

P                  大写字母 P,将缓冲区的内容粘贴到光标的前面 

如果缓冲区的内容是字符或字,直接粘贴在光标的前面或后面;如果缓冲区的内容为整行正文则粘贴在当前光标所在行的上一行或下一行。

有时需要复制一段正文到新位置,同时保留原有位置的内容。这种情况下,首先应当把指定内容复制(而不是剪切)到内存缓冲区。完成这一操作的命令是:

yy                 复制当前行到内存缓冲区

nyy               复制 n 行内容到内存缓冲区(如 5yy: 复制 5 行内容到内存缓冲区)

搜索字符串

/str1             正向搜索字符串 str1 

n                  继续搜索,找出 str1 字符串下次出现的位置 

?str2            反向搜索字符串 str2 

撤销和重复

u                  撤消前一条命令的结果 

.                   重复最后一条修改正文的