Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 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

You might also like