Upload
tamber
View
171
Download
13
Embed Size (px)
DESCRIPTION
Linux 操作系统 文件编辑器 vi. Linux —— 文本编辑器 vi. vi 的基本操作 vi 高级编辑命令 vi 的设置. §3 .1 进入 vi. vi 是一个较大的 UNIX 命令,在启动的时候也有它自己的选项和参数 基本语法: vi [-options] [+[n]] [file] 常用选项有: -r, -R -r 用于恢复系统突然崩溃时正在编辑的文件 -R 用于以只读方式打开文件 +n 用来指明进入 vi 后直接位于文件的第 n 行,如果不指定 n ,则位于最后一行. §3 .2 vi 的工作方式. - PowerPoint PPT Presentation
Citation preview
1
Linux操作系统文件编辑器 vi
2
Linux——文本编辑器 vi • vi 的基本操作• vi 高级编辑命令• vi 的设置
3
§3.1 进入 vi• vi 是一个较大的 UNIX 命令,在启动的时
候也有它自己的选项和参数• 基本语法:
vi [-options] [+[n]] [file]
• 常用选项有: -r, -R– -r 用于恢复系统突然崩溃时正在编辑的文件– -R 用于以只读方式打开文件– +n 用来指明进入 vi 后直接位于文件的第 n 行,
如果不指定 n ,则位于最后一行
4
§3.2 vi的工作方式• vi 一共有三种工作方式:命令方式、插入
方式和行方式:
命令方式
插入方式 行方式
插入命令Esc
Esc
命令执行完:
5
一、命令方式• 无论用户处于什么状态,按 Esc 键或组合
键 Ctrl+[ 就可以进入命令方式。当用户初始进入 vi 时,也处于这个状态。
• 用户在命令方式下可以输入各种合法的 vi内部命令,这些命令不会回显不会回显,而且不需不需要回车就会被执行要回车就会被执行
6
二、文本插入方式• 在命令方式下使用某些命令会导致 vi 马上
进入文本插入方式,这些命令包括:i,I,a,A,o,O 等
• 在这种方式下用户的任何输入都被当作是文件的内容看待,并将其显示在屏幕上。
7
三、最后行方式• 行方式又称为最后行方式,通过在命令方式下键
入冒号 : 可进入这个方式,在这种方式下 vi 会在屏幕的最后一行显示一个冒号并等待用户输入命令
• 行方式下用户输入的命令将回显在最后一行上,并且直到用户输入回车 vi 才会去执行它
• 命令执行完毕后, vi 自动进入命令状态• 或者在输入命令时敲 Esc 键或组合键 Ctrl+[ 、
或用退格键删除所有的输入之后再按一下退格键回到命令方式
8
§3.3 基本编辑命令• 移动光标 (cursor movement)
– Bksp 左移一个字符– Space 右移一个字符– Enter,+ 下移一行– h 左移一个字符– l 右移一个字符– j 下移一行– k 上移一行
9
§3.3 基本编辑命令– [n]G跳到第 n 行– w,W 跳到下一个词的词头– b,B 跳到上一个词的词头– e,E 跳到下一个词的词尾– ^ 跳到行首(第一个非空字符)– [0] 跳到行首– $ 跳到行尾
10
§3.3 基本编辑命令– Ctrl-u 向下翻滚 1/2 屏– Ctrl-d 向上翻滚 1/2 屏– Ctrl-f 向下翻滚 1 屏– Ctrl-b 向上翻滚 1 屏– Ctrl-n 向下移动一行– Ctrl-p 向上移动一行
• 上述命令 (除 [n]G外 ) 的前面均可增加一个数字来控制移动的次数
11
§3.3 基本编辑命令• 修改文本命令 (modification)
– [n]r<char> 用字符 char 代替光标处的字符, n 指定字符 char 出现的次数。 n 缺省为 1 。
– [n]R<text> 用 text 的内容替换当前行 n次。 n 缺省为 1 。命令执行完后处于插入方式,必须按 Esc 键或组合键 Ctrl+[ 回到命令方式。
– Cw,cw,cc 替换一个词或替换到行尾
12
§3.3 基本编辑命令• 编辑中的每一行正文都有自己的行号,用
下列命令可以移动光标到指定行: :[n] 将光标移到第 n 行• 命令模式下,可以规定命令操作的行号范
围。数值用来指定绝对行号;字符“ .” 表示光标所在行的行号;字符 符“ $” 表示正文最后一行的行号;简单的表达式,例如“ .+5” 表示当前行往下的第 5 行。例如: :345 将光标移到第 345 行
13
§3.3 基本编辑命令• 在编辑模式下正确定位光标之后,可用以
下命令切换到插入模式 (Insert) : – i 在光标左侧输入正文 – I 在光标所在行的开头输入正文 – a 在光标右侧输入正文 – A 在光标所在行的末尾输入正文 – o 在光标所在行的下一行增添新行 – O 在光标所在行的上一行增添新行
14
§3.3 基本编辑命令• 删除文本命令 (delete)
– x 删除当前光标所在位置的字符– X 删除光标前的字符– dd 删除当前行– D 删除从当前光标位置直到行尾的所有字
符– d<cursor_movement>
删除从当前光标位置直到<cursor_movement>
参数指定的位置
15
§3.3 基本编辑命令• 字符串搜索 (search)
– /[pattern]/[offset]<CR>– /[pattern]<CR>– ?[pattern]?[offset]<CR>– ?[pattern]<CR>–上述四个命令分别表示向下 / 向上搜索指定的
正则表达式 [pattern] ,并将光标停留在相对搜索结果距离为 [offset] 行处
16
§3.3 基本编辑命令– n 重复命令 , 搜索得到使用结果后,可以重复
命令 n或 N 沿着相同或相反的方向重复上一次的搜索
– f<char> 命令在当前行搜索指定的字符并将光标停在匹配字符上
– t<char> 命令在当前行搜索指定的字符并将光标停在匹配字符的左边
17
§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 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
18
§3.3 基本编辑命令• 重复前一命令: .• 取消上一命令: u• 重画屏幕: Ctrl-l• Ctrl_G 命令显示当前编辑文本的状态,包
括文本共有多少行、文件名以及目前光标停在多少行。
• 文件的保存:行方式下使用 w 命令
19
§3.3 基本编辑命令• 退出 vi :行方式下使用 q 命令将退出 vi ,
如果文件作过改动但还没有保存,系统将作出提示并取消此次退出动作。行命令 x相当于 :wq 命令。在命令方式下使用命令ZZ 等效于 :x 命令。
• 如果由于读写权限或是更新方面的问题,导致 vi拒绝执行保存文件或退出 vi 的命令,那么可以在命令后加一个 ! 号表示强制执行。
20
§3.4 高级命令• 文件操作命令
– [addr1,addr2]w[!] [filename] :将编辑缓冲区的 addr1 行到 addr2 行之间的内容写回到存储介质上的名为 filename 的文件中去, w 后的 ! 表示强制写入。
– r filename : 将文件 filename 读入编辑缓冲区
– e filename : 编辑已存在于缓冲区中的、名为 filename 的文件
– f filename : 将当前文件重命名为 filename
– f : 打印当前文件名称和状态,如文件的行数、光标所在的行号等
– 上述命令属于行方式
21
§3.4 高级命令• 文本的移动和复制
– [addr1,addr2]m[addr3]– [addr1,addr2]t[addr3]–上述行方式下的命令分别表示将第 addr1 行至
第 addr2 行之间的内容移动 /拷贝到第addr3 行的后面
• 行的合并–命令方式下的命令 J 将当前行的下面一行合并
到当前行的末尾
22
§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 表示放在当前位置之后
23
§3.4 高级命令• 在 vi 内使用 shell
– 用户在运行 vi 的过程中不用推出 vi 就可以运行任何 UNIX 命令::!<unix_cmds><CR>• 在 unix_cmds 参数中,可以使用%作为当前文
件名的缩写,用 # 作为上次编辑文件的缩写,用 !作为上次命令的缩写
24
§3.4 高级命令• 使用自定义的缩写
– :abbr|ab str1 str2 命令用用户自定义的字符串 str1 来代替字符串 str2
– :unab|una str1 取消缩写 str1– 上述四个命令都是行方式下的命令
25
§3.4 高级命令•宏
– :map key cmds_list• 此时 key 必须是一个单独的字母。或是一个 Ctrl 加
上一个字母• 此时定义的是宏命令
– :map! key string• 此时 key 必须是一个单独的字母。或是一个 Ctrl 加
上一个字母• 此时定义的是宏字符串,用于文本输入方式
– :unmap key 将取消 key 的宏定义
26
§3.4 高级命令– 要注意的是在输入 Ctrl+key 的转义序列时必
须先按下下列组合键: Ctrl-v 。– 如果 cmds_list 是行方式下的命令,那么在其
末尾必须加上一个回车,输入方法为先输入Ctrl-v ,然后输入 Ctrl-m 。 Ctrl-m 代表回车。
27
§3.5 vi的配置• vi 的配置共有三种方法,
– 一种是在运行 vi 时使用行命令 set 来设置;– 一种是使用 EXINIT环境变量;– 最后一种是使用用户主目录下的 .exrc 文件。
• vi 的显示是输出到终端上的,所以终端的类型会对 vi 的显示造成影响。– 终端类型设置是使用 TERM环境变量
• (ansi, vt100) :$TERM=ansi;export $TERM
28
一、行方式下的设置
• 为控制不同的编辑功能, vi 提供了很多内部选项。在行方式下使用命令 set 可以显示和修改 vi 的各种内部环境变量。
• 基本语法::set argument[=value]
29
一、行方式下的设置• 命令 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
30
二、永久设置方式• 上面所说的 :set 命令在退出 vi 后就失效了,
下次进入 vi还需要重新设置•我们可以将上述 :set 命令写在一个名为
~/.exrc 的文件中,这样每次进入 vi 就会自动执行。
• 或者将需要用到的 :set 命令保存在 EXINIT环境变量中。
31
§3.6 vim 和 gvim 的高级特色• vim 代表 Vi IMproved ,如同其名称所暗示的那样, vim 作为标准 UNIX 系统 vi 编辑器的提高版而存在。 vim 除提供和 vi 编辑器一样强大的功能外,还提供有多级恢复、命令行历史以及命令及文件名补全等功能。
• gvim 是 vi 的 X Window 版本,该版本支持鼠标选中,一些高级光标移动功能,并且带有菜单和工具按钮。
32
§3.6 小结• vi 必须经常使用才能够掌握•另外还有一些高级的操作方法,有兴趣的
同学可以参考 vi 的联机手册
AQ&Q U E S T I O N SQ U E S T I O N S
A N S W E R SA N S W E R S
Acegene IT Co. Ltd. 34
练习• 编辑一个文件
– 光标移动– 插入、修改、删除– 保存,推出
• 编辑文件 /etc/bashrc– [\u@\h \W] 替换成 [\u@\h:\w]– 保存