Anda di halaman 1dari 34

Linux 操作 系统

文件编 辑器 vi

周炯
上海艾基信 息技术有限 公司

Acegene IT Co. Ltd. 1


Linux—— 文本编辑 器 vi
• vi 的基本操作
• vi 高级编辑命令
• vi 的设置

Acegene IT Co. Ltd. 2


§3.1 进入 vi
• vi 是一个较大的 UNIX 命令,在启动的时
候也有它自己的选项和参数
• 基本语法:
vi [-options] [+[n]] [file]
• 常用选项有: -r, -R
– -r 用于恢复系统突然崩溃时正在编辑的文件
– -R 用于以只读方式打开文件
– +n 用来指明进入 vi 后直接位于文件的第 n 行
,如果不指定 n ,则位于最后一行

Acegene IT Co. Ltd. 3


§3.2 vi 的工作 方式
• vi 一共有三种工作方式:命令方式、插入
方式和行方式:

Esc
命令方式
命令执行完
插入命令 :
Esc
插入方式 行方式

Acegene IT Co. Ltd. 4


一、命 令方式
• 无论用户处于什么状态,按 Esc 键或组合
键 Ctrl+[ 就可以进入命令方式。当用户
初始进入 vi 时,也处于这个状态。
• 用户在命令方式下可以输入各种合法的 vi
内部命令,这些命令不会回显 ,而且不需
要回 车就会被执 行

Acegene IT Co. Ltd. 5


二、文 本插入方 式
• 在命令方式下使用某些命令会导致 vi 马上
进入文本插入方式,这些命令包括:
i,I,a,A,o,O 等
• 在这种方式下用户的任何输入都被当作是
文件的内容看待,并将其显示在屏幕上。

Acegene IT Co. Ltd. 6


三、最 后行方式
• 行方式又称为最后行方式,通过在命令方式下键
入冒号 : 可进入这个方式,在这种方式下 vi 会
在屏幕的最后一行显示一个冒号并等待用户输入
命令
• 行方式下用户输入的命令将回显在最后一行上,
并且直到用户输入回车 vi 才会去执行它
• 命令执行完毕后, vi 自动进入命令状态
• 或者在输入命令时敲 Esc 键或组合键
Ctrl+[ 、或用退格键删除所有的输入之后再按
一下退格键回到命令方式

Acegene IT Co. Ltd. 7


§3.3 基本编 辑命令
• 移动光标 (cursor movement)
– Bksp 左移一个字符
– Space 右移一个字符
– Enter,+ 下移一行
–h 左移一个字符
–l 右移一个字符
–j 下移一行
–k 上移一行

Acegene IT Co. Ltd. 8


§3.3 基本编 辑命令
– [n]G 跳到第 n 行
– w,W 跳到下一个词的词头
– b,B 跳到上一个词的词头
– e,E 跳到下一个词的词尾
–^ 跳到行首(第一个非空字符)
– [0] 跳到行首
–$ 跳到行尾

Acegene IT Co. Ltd. 9


§3.3 基本编 辑命令
– Ctrl-u 向下翻滚 1/2 屏
– Ctrl-d 向上翻滚 1/2 屏
– Ctrl-f 向下翻滚 1 屏
– Ctrl-b 向上翻滚 1 屏
– Ctrl-n 向下移动一行
– Ctrl-p 向上移动一行
• 上述命令 ( 除 [n]G 外 ) 的前面均可增加
一个数字来控制移动的次数

Acegene IT Co. Ltd. 10


§3.3 基本编 辑命令
• 修改文本命令 (modification)
– [n]r<char> 用字符 char 代替光标处的
字符, n 指定字符 char 出现的次数。 n 缺省
为1。
– [n]R<text> 用 text 的内容替换当前行
n 次。 n 缺省为 1 。命令执行完后处于
插入方式,必须按 Esc 键或组合键 Ctrl+[ 回
到命令方式。
– Cw,cw,cc 替换一个词或替换到行尾

Acegene IT Co. Ltd. 11


§3.3 基本编 辑命令
• 编辑中的每一行正文都有自己的行号,用
下列命令可以移动光标到指定行:
:[n] 将光标移到第 n 行
• 命令模式下,可以规定命令操作的行号范
围。数值用来指定绝对行号;字符“ .” 表
示光标所在行的行号;字符 符“ $” 表示
正文最后一行的行号;简单的表达式,例
如“ .+5” 表示当前行往下的第 5 行。例
如: :345 将光标移到第 345 行

Acegene IT Co. Ltd. 12


§3.3 基本编 辑命令
• 在编辑模式下正确定位光标之后,可用以
下命令切换到插入模式 (Insert) :
–i 在光标左侧输入正文
–I 在光标所在行的开头输入正文
–a 在光标右侧输入正文
–A 在光标所在行的末尾输入正文
–o 在光标所在行的下一行增添新行
–O 在光标所在行的上一行增添新行

Acegene IT Co. Ltd. 13


§3.3 基本编 辑命令
• 删除文本命令 (delete)
–x 删除当前光标所在位置的字符
–X 删除光标前的字符
– dd 删除当前行
–D 删除从当前光标位置直到行尾的所有字

– d<cursor_movement>
删除从当前光标位置直到
<cursor_movement>
参数指定的位置

Acegene IT Co. Ltd. 14


§3.3 基本编 辑命令
• 字符串搜索 (search)
– /[pattern]/[offset]<CR>
– /[pattern]<CR>
– ?[pattern]?[offset]<CR>
– ?[pattern]<CR>
– 上述四个命令分别表示向下 / 向上搜索指定的
正则表达式 [pattern] ,并将光标停留在相
对搜索结果距离为 [offset] 行处

Acegene IT Co. Ltd. 15


§3.3 基本编 辑命令
– n 重复命令 , 搜索得到使用结果后,可以重复
命令 n 或 N 沿着相同或相反的方向重复上一次
的搜索
– f<char> 命令在当前行搜索指定的字符并将光
标停在匹配字符上
– t<char> 命令在当前行搜索指定的字符并将光
标停在匹配字符的左边

Acegene IT Co. Ltd. 16


§3.3 基本编 辑命令
• 字符串替换 (Substitute)
– 此命令要求先进入行方式
– 命令的语法为:
[addr1,addr2|g]s/find_exp/repl_exp/[g|
n][c]
– 上述命令表示在第 addr1 行到 addr2 行的范围内将字
符串 find_exp 用 repl_exp 代替。
– n 表示替换每行的第 n 个匹配, c 表示需要用户确认
– g 放在命令末尾,表示行全程,不加 g ,表示只对搜索
字符串的首次出现进行替换; g 放在命令开头,表示
对正文中所有包含搜索字符串的行进行替换操作。

Acegene IT Co. Ltd. 17


§3.3 基本编 辑命令
• 重复前一命令: .
• 取消上一命令: u
• 重画屏幕: Ctrl-l
• Ctrl_G 命令显示当前编辑文本的状态,包
括文本共有多少行、文件名以及目前光标
停在多少行。
• 文件的保存:行方式下使用 w 命令

Acegene IT Co. Ltd. 18


§3.3 基本编 辑命令
• 退出 vi :行方式下使用 q 命令将退出
vi ,如果文件作过改动但还没有保存,系
统将作出提示并取消此次退出动作。行命
令 x 相当于 :wq 命令。在命令方式下使用
命令 ZZ 等效于 :x 命令。
• 如果由于读写权限或是更新方面的问题,
导致 vi 拒绝执行保存文件或退出 vi 的命
令,那么可以在命令后加一个 ! 号表示强
制执行。

Acegene IT Co. Ltd. 19


§3.4 高级命 令
• 文件操作命令
– [addr1,addr2]w[!] [filename] :将编辑缓
冲区的 addr1 行到 addr2 行之间的内容写回到存
储介质上的名为 filename 的文件中去, w 后的
! 表示强制写入。
– r filename : 将文件 filename 读入编辑缓
冲区
– e filename : 编辑已存在于缓冲区中的、名
为 filename 的文件
– f filename : 将当前文件重命名为
filename
–f : 打印当前文件名称和状态,如
文件的行数、光标所在的行号等
– 上述命令属于行方式

Acegene IT Co. Ltd. 20


§3.4 高级命 令
• 文本的移动和复制
– [addr1,addr2]m[addr3]
– [addr1,addr2]t[addr3]
– 上述行方式下的命令分别表示将第 addr1 行至
第 addr2 行之间的内容移动 / 拷贝到第
addr3 行的后面
• 行的合并
– 命令方式下的命令 J 将当前行的下面一行合并
到当前行的末尾

Acegene IT Co. Ltd. 21


§3.4 高级命 令
• 缓冲区操作
– vi 提供 36 个编辑缓冲区,它们分别为 a-z 共 26 个命名缓冲区
,1-9 共 9 个删除缓冲区,另外还有一个未命名的缓冲区,一般
称之为 buffer 0 。
– 将文本内容送入缓冲区的命令为:
[“char][n]y[<cursor movement>|y|w|l]
• Char 表示缓冲区的名字,小写表示覆盖写入,大写表示追加写入
• n 表示重复次数
• <cursor movement> 表示想要写入缓冲区的文本的范围,从光标
的当前位置算起。
• y 表示以行为单位
• w 表示以词为单位
• l 表示以字符为单位
– 从缓冲区中提取其内容并将其插入在当前文本的命令为:
[“char]p|P
• P 表示放在当前位置之前, p 表示放在当前位置之后

Acegene IT Co. Ltd. 22


§3.4 高级命 令
• 在 vi 内使用 shell
– 用户在运行 vi 的过程中不用推出 vi 就可以运
行任何 UNIX 命令:
:!<unix_cmds><CR>
• 在 unix_cmds 参数中,可以使用 % 作为当前文
件名的缩写,用 # 作为上次编辑文件的缩写,用 !
作为上次命令的缩写

Acegene IT Co. Ltd. 23


§3.4 高级命 令
• 使用自定义的缩写
– :abbr|ab str1 str2 命令用用户自定义的字符
串 str1 来代替字符串 str2
– :unab|una str1 取消缩写 str1
– 上述四个命令都是行方式下的命令

Acegene IT Co. Ltd. 24


§3.4 高级命 令
•宏
– :map key cmds_list
• 此时 key 必须是一个单独的字母。或是一个 Ctrl 加
上一个字母
• 此时定义的是宏命令
– :map! key string
• 此时 key 必须是一个单独的字母。或是一个 Ctrl 加
上一个字母
• 此时定义的是宏字符串,用于文本输入方式
– :unmap key 将取消 key 的宏定义

Acegene IT Co. Ltd. 25


§3.4 高级命 令
– 要注意的是在输入 Ctrl+key 的转义序列时必
须先按下下列组合键: Ctrl-v 。
– 如果 cmds_list 是行方式下的命令,那么在其
末尾必须加上一个回车,输入方法为先输入
Ctrl-v ,然后输入 Ctrl-m 。 Ctrl-m 代表回
车。

Acegene IT Co. Ltd. 26


§3.5 vi 的配置
• vi 的配置共有三种方法,
– 一种是在运行 vi 时使用行命令 set 来设置;
– 一种是使用 EXINIT 环境变量;
– 最后一种是使用用户主目录下的 .exrc 文件。
• vi 的显示是输出到终端上的,所以终端的
类型会对 vi 的显示造成影响。
– 终端类型设置是使用 TERM 环境变量
• (ansi, vt100) :
$TERM=ansi;export $TERM

Acegene IT Co. Ltd. 27


一、行 方式下的 设置

• 为控制不同的编辑功能, vi 提供了很多
内部选项。在行方式下使用命令 set 可以
显示和修改 vi 的各种内部环境变量。
• 基本语法:
:set argument[=value]

Acegene IT Co. Ltd. 28


一、行 方式下的 设置
• 命令 set 的参数及其功能如下:
– all 列出所有选项设置的情况
– term 设置终端类型
– ignorecase 在搜索中忽略大小写
– list 显示制表符 (^I) 和行尾标志 (^M)
– number 显示行号
– report 显示由面向行的命令修改过的行数
– ruler 在屏幕底部显示光标所在行、列的位置
– terse 显示简短的告警信息
– warn 显示简短的未保存告警
– nomagic 取消元字符在搜索字符串中的特殊性
– nowrapscan 搜索 不回
– mesg 允许 vi 显示其他用户用 write 写到自己终
端上的信息

– shiftwidth 指定自动缩进的制表位
– autoindent 自动缩进
– directory 指定编辑缓冲区的路径
– showmode 显示文本插入方式
– window 设置显示的文本行数
– mk 将选项保存在当前目录的 .exrc 文件中
– tabstop 设置按 Tab 键跳过的空格数。例如 :set
tabstop=n , n 默认值为 8

Acegene IT Co. Ltd. 29


二、永 久设置方 式
• 上面所说的 :set 命令在退出 vi 后就失效了
,下次进入 vi 还需要重新设置
• 我们可以将上述 :set 命令写在一个名为
~/.exrc 的文件中,这样每次进入 vi 就会
自动执行。
• 或者将需要用到的 :set 命令保存在
EXINIT 环境变量中。

Acegene IT Co. Ltd. 30


§3.6  vim 和 gvim 的高级特色
• vim 代表 Vi IMproved ,如同其名称所
暗示的那样, vim 作为标准 UNIX 系统
vi 编辑器的提高版而存在。 vim 除提供
和 vi 编辑器一样强大的功能外,还提供
有多级恢复、命令行历史以及命令及文件
名补全等功能。
• gvim 是 vi 的 X Window 版本,该版
本支持鼠标选中,一些高级光标移动功能
,并且带有菜单和工具按钮。

Acegene IT Co. Ltd. 31


§3.6 小结
• vi 必须经常使用才能够掌握
• 另外还有一些高级的操作方法,有兴趣的
同学可以参考 vi 的联机手册

Acegene IT Co. Ltd. 32


Q&
A
QUESTIONS
ANSWERS
练习
• 编辑一个文件
– 光标移动
– 插入、修改、删除
– 保存,推出
• 编辑文件 /etc/bashrc
– [\u@\h \W] 替换成 [\u@\h:\w]
– 保存

Acegene IT Co. Ltd. 34