1、一 vi 的基本概念 文本编辑器 有很多,图形模式下有 gedit、 kwrite 等编辑器,文本模式下的编辑器有 vi、vim( vi 的增强版本)和 nano。 vi 和 vim 是 Linux 系统中最常用的编辑器。 vi 编辑器是所有 Linux 系统的标准编辑器,用于编辑任何 ASCII 文本,对于编辑源程序尤其有用。它功能非常强大,通过使用 vi 编辑器,可以对文本进行创建、查找、替换、删除、复制和粘贴等操作。 vi 编辑器有 3 种基本工作模式,分别是命令模式、插入模式和末行模式。在使用时,一般将末行模式也算入命令行模式。各模式的功能区分如下。 1命令行模式 控制屏幕光标的移动,
2、字符、字或行的删除,移动、复制某区域及进入插入模式,或者到末行模式。 2插入模式 只有在插入模式下才可以做文本输入,按“ ESC”键可回到命令行模式。 3末行模式 将文件保存或退出 vi 编辑器,也可以设置编辑环境,如寻找字符串、列出行号等。 二 vi 的基本操作 1进入 vi 编辑器 在系统 shell 提示符下输入 vi 及文件名称后,就进入 vi 编辑画 面。如果系统内还不存在该文件,就意味着要创建文件;如果系统内存在该文件,就意味着要编辑该文件。下面就是用vi 编辑器创建文件的示例。 #vi filename 进入 vi 之后,系统处于命令行模式,要切换到插入模式才能够输入文字。 2切
3、换至插入模式编辑文件 在命令行模式下按字母“ i”就可以进入插入模式,这时候就可以开始输入文字了。 3退出 vi 及保存文件 在命令行模式下,按冒号键“:”可以进入末行模式,例如: :w filename将文件内容以指定的文件名 filename 保存。 输入“ wq”,存盘并退出 vi。输入“ q!”,不存盘强制退出 vi。 下面表示 vi 编辑器的 3 种模式之间的关系。 三命令行模式操作 1进入插入模式 按“ i”:从光标当前位置开始输入文件。 按“ a”:从目前光标所在位置的下一个位置开始输入文字。 按“ o”:插入新的一行,从行首开始输入文字。 按“ I”:在光标所在行的行首插入。
4、按“ A”:在光标所在行的行末插入。 按“ O”:在光标所在的行的下面插入一行。 按“ s”:删除光标后的一个字符,然后进入插入模式。 按“ S”:删除光标所在的行,然后进入插入模式。 2从插入模式切换为命令行模式 按“ ESC”键盘。 3移动光标 vi 可以直接用键盘上的光标来上下左右移动,但正规的 vi 是用小写英文字母“ h”、“ j”、“ k”、“ l”分别控制光标左、下、上、右移一格。 按“ ctrl+b”:屏幕往后移动一页。 按“ ctrl+f”:屏幕往前移动一页。 按“ ctrl+u”:屏幕往后移动半页。 按“ ctrl+d”:屏幕往前移动半页。 按数字“ 0”:移动到文本的开头
5、。 按 “ G”:移动到文件的最后。 按 “ $”:移动到光标所在行的行尾。 按 “ ”:移动到光标所在行的行首。 按 “ w”:光标跳到下个字的开头。 按 “ e”:光标跳到下个字的字尾。 按 “ b”:光标回到上个字的开头。 按 “ nl”:光标移动该行的第 n 个位置,例如:“ 5l”表示移动到该行的第 5 个字符。 4删除文字 “ x”:每按一次,删除光标所在位置的后面一个字符。 “ nx”:例如:“ 6x”表示删除光标所在位置后面 6 个字符。 “ X”:大写的 X,每按一次,删除光标所在位置的前面一个字符。 “ xX”:例如:“ 20X”表示删除光标所在位置前面 20 个字符。 “
6、 dd”:删除光标所在行。 “ ndd”:从光标所在行开始删除 n 行。例如:“ 4dd”表示删除从光标所在行开始的 4 行字符。 5复制 “ yw”:将光标所在之处到字尾的字符复制到缓冲区中。 “ nyw”:复制 n 个字到缓冲区。 “ yy”:复制光标所在行到缓冲区。 “ nyy”:例如:“ 6yy”表示复制从光标所在行开始 6 行字符。 “ p”:将缓冲区内的字符写到光标所在位置。 6替换 “ r”:替换光标所在处的字符。 “ R”:替换光标所到处的字符,直到按下“ ESC”键为止。 7撤销上一次操作 “ u”:如果误执行一个命令,可以马上按下“ u”,回到上一个操作。按多次“ u”可以
7、执行多次撤销操作。 8 更改 “ cw”:更改光标所在处的字到字尾处。 “ cnw”:例如:“ c3w”表示更改 3 个字。 9跳至指定的行 “ ctrl+g”:列出光标所在行的行号。 “ nG”:例如:“ 15G”,表示移动光标到该文件的第 15 行行首。 10存盘退出 “ ZZ”:存盘退出 11不存盘退出 “ ZQ”:不存盘退出 四末行模式操作 在使用末行模式之前,请记住先按“ ESC”键确定已经处于命令行模式后,再按冒号“:”即可进入末行模式。 1列出行号 “ set nu”:输入“ set nu”后,会在文件中的每一行前面列出行号。 2取消列出行号 “ set nonu”:输入“ se
8、t nonu”后,会取消在文件中的每一行前面列出行号。 3搜索时忽略大小写 “ set ic”:输入“ set ic”后,会在搜索时忽略大小写。 4取消搜索时忽略大小写 “ set noic”:输入“ set noic”后,会取消在搜索时忽略大小写。 5跳到文件中的某一行 “ n”:“ n”表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字 15,再回车就会跳到文本的第 15 行。 6查找字符 “ /关键字”:先按“ /”,再输入想查找的字符,如果第一次查找的关键字不是想要的,可以一直按“ n”,往后查找一个关键字。 “ ? 关键字”:先按“ ?”键,再输入想查找的字符,
9、如果第一次查找的关键字不是想要的,可以一直按“?”,往后查找一个关键字。 7运行 shell 命令 “ !cmd”:运行 shell 命令 cmd。 8替换字符 “ s /SPARCH/REPLACE/g”:把当前光标所处的行中的 SEARCH 单词替换成 REPLACE,并把所有 SEARCH 高亮显示。 “ %s /SPARCH/REPLACE”:把文档中所 有 SEARCH 替换成 REPLACE。 “ n1,n2 s /SPARCH/REPLACE/g”: n1、 n2 表示数字,表示从 n1 行到 n2 行,把 SEARCH 替换成 REPLACE。 9保存文件 “ w”:在冒号输入
10、字母“ w”就可以将文件保存起来。 10离开 vi “ q”:按“ q”即退出 vi,如果无法离开 vi,可以在“ q”后面一个“ !”强制符离开 vi。 “ qw”:一般建议离开时,搭配“ w”一起使用,这样在退出的时候还可以保存文件。 五命令行内容说明 命令行模式:移动光标的方法 h 或向左方向键( ) 光标向左移动一个字符 j 或向下方向键( ) 光标向下移动一个字符 k 或向上方向键( ) 光标向上移动一个字符 l 或向右方向键( ) 光标向右移动一个字符 如果想要进行多次移动的话,例如;向下移动 30 行,可以使用 “30j” 或 “30”的组合键,即加上想要进行的次数(数字)后,操
11、作即可。 Ctrl+f 屏幕 “ 向下 ” 移动一页,相当于 Page Down按键 Ctrl+b 屏幕 “ 向上 ” 移动一页,相当于 Page Up按键 Ctrl+d 屏幕 “ 向下 ” 移动半页 Ctrl+u 屏幕 “ 向上 ” 移动半页 命令行模式:移动光标的方法 + 光标移动到非空格符的下一行 - 光标移动到非空格符的上一行 n n 表示 “ 数字 ” ,例如 20.按下数字后再按空格键,光标会向右移动这一行 n 个字符。例如 20则光标会向后面移动 20 个字符距离 0 这是数字 “0” :移动到这一行的最前面字符处(常用) $ 移动到这一行的最后面字符处(常用) H 光标移动到这
12、个屏幕的最上方哪一行 M 光标移动到这个屏幕的中央哪一行 L 光标移动到这个屏幕的最下方哪一行 G 移动到这个文件的最后一行(常用) nG n 为数字。移动到这个文件的第 n 行。例如 20G 则会移动到这个文件的第 20 行(可配合: set nu) gg 移动到这个文件的第一行,相当于 1G(常用) n n 为数字。光标向下移动 n 行(常用) 命令行模式:搜索与替换 /word 从光标位置开始,向下寻找一个名为 word 的字符串。例如要在文件内搜索 vbird 这个字符串,就输入 /vbird 即可(常用) ?word 从光标位置开始,向上寻找一个名为 word 的字符串 n n 是英
13、文按键。表示 “ 重复前一个搜索的动作 ” 。举例来说,如果刚刚执行 /vbird 去向下搜索 vbird 字符串,则按下 n 后,会向下继续搜索下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n,则会向上继续搜索名称为 vbird 的字符串 N 这个 N 是英文按键。与 n 刚好相反,为 “ 反向 ” 进行前一个搜索操作。例如 /vbird 后,按下 N 则表示 “ 向上 ” 搜索vbird 命令行模式:搜索与替换 :n1、n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串替换为 w
14、ord2。举例来说,在 100 到200 行之间搜索 vbird 并替换为 VBIRD 则: “:100 、200s/vbird/VBIRD/g” (常用) :1、$s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串替换为 word2(常用) :1、$s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串替换为 word2。且在替换前显示提示符给用户确认( conform)是否需要替换(常用) 命令行模式:删除、复制与粘贴 p,P p 为将已复制的数据粘贴到光标的下一行, P 则为贴在光标上一行。举例来说,当前光标在第
15、20 行,且已经复制了 10行数据。则按下 p 后,那 10 行数据会粘在原来的 20 行之后,即由 21 行开始贴。但如果是按下 P,那么原来的第 20行会被变成 30 行(常用) J 将光标所在行与下一列的数据结合成同一行 c 重复删除多个数据,例如向下删除 10 行, 10cj u 复原前一个操作(常用) Ctrl+r 重做上一个操作(常用) U 与 Ctrl+r 是很常用的命令。一个是复原,另一个则是重做一次。利用这两个功能按键,编辑起来就得心应手。 命令行模式:删除、复制与粘贴 . 这就是不数点。意思是重复前一个动作。如果想重复删除、重复粘贴,按下小数点 “.” 就可以(常用) 插入
16、模式 i、 I 插入:在当前光标所在处插入输入文字,已存在的文字会向后退;其中, i 为 “ 从当前光标所在处插入 ” , I 为 “ 在当前所在行的第一个非空格符处开始插入 ” (常用) a、 A a 为 “ 从当前光标所在的下一个字符处开始插入 ” , A 为“ 从光标所在行的最后一个字符处开始插入 ” (常用) o、 O 这是英文字母 o 的大小写。 o 为 “ 在当前光标所在的下一行处插入新的一行 ” , O 为 “ 在当前光标所在处的上一行插入新的一行 ” (常用) r、 R 替换: r 会替换光标所在的那一个字符; R 会一直替换光标所在的文字,直到按下 Esc 键为止(常用) 使
17、用上面这些按键时,在 vi 画面的左下角处会出现 “ INSERT-” 或“ REPLACE-” 的字样。通过名称就知道是什么操作。特别注意,上面也提过了,想在文件中输入字符时,一定要在左下角处看到 INSERT/ REPLACE 才能输入。 Esc 退出插入模式,回到命令行模式中(常用) 末行命令模式 :w 将编辑的数据写入硬盘文件中(常用) :w! 若文件属性为 “ 只读 ” 时,强制写入该文件。不过,到底能不能写入,与文件权限有关 :q 离开 vi(常用) :q! 若曾修改 过文件,又不想存储,使用!为强制离开不存储文件 注意一下,那个感叹号( !)在 vi 当中,常常具有 “ 强制 ”
18、 的意思。 :wq 存储后离开,若为 :wq!则为强制存储后离开(常用) :e! 将文件还原到最原始的状态 ZZ 若文件没有更改,则不存储离开,若文件已经更改,则存储后离开 :wfilename 将编辑的数据存储成另一个文件(类似另存新文件) :rfilename 在编辑的数据中,读入另一个文件的数据。即将“filename” 这个文件内容加到光标所在行的后面 :n1、 n2 wfilename 将 n1 到 n2 的内容存储成 filename 文件 :!command 暂时离开 vi到命令模式下执行 command的显示结果。例如,“:! ls /home” ,即可在 vi 中查看 /home 中以 ls 输出的文件信息 :set nu 显示行号,设置之后,会在每一行的前缀显示该行的行号 :set nonu 与 set nu 相反,为取消行号 特别注意,在 vi 中,“数字”是很有意义的。数字通常表示重复做几次的意思。也有可能表示要去哪里的意思。举例来说,要删除 50 行,则是用“ 50dd”。数字加在动作之前。要向下移动 20 行,使用“ 20j”或“ 20”即可。 掌握这些命令就很不错了,因为常用到的命令也可能只有一半。通常 vi 的命令除了上面笔者注明的常用的几个外,其他不用背,可以做一张简单的命令表,当有问题时就可以马上查询。 六 vi的键盘图 七 vi 中文帮助