unix 的文本编辑程序

29
UNIX 的的的的的的的 的的的的的的的的 1. 的的的 ed 2. 的的的的的 vi 的的的的 1. 的的的 ed 的的的的的的的的的 的的的的的的的的的的的的的的 ,,, 的的的的的 的的的的 2. vi 的的的的的的的的的的的的的

Upload: judd

Post on 26-Jan-2016

136 views

Category:

Documents


6 download

DESCRIPTION

UNIX 的文本编辑程序. 常用的文本编辑器 1. 行编辑 ed 2. 全屏幕编辑 vi 使用场合 1. 行编辑 ed 常用于批处理程序中,使用输入重定向,软件安装时,用来修改系统配置文件 2. vi 用于人机交互式编辑文本文件. vi 的启动方法. 命令格式: vi 文件名列表 后边可以指定 0 个或者多个文件 例如: vi try.c. 设置 vi 的选项:批命令文件. vi 有 40 多个选项控制 vi 的运行。 两种设定方法 1. 用 .exrc 文件控制 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: UNIX 的文本编辑程序

UNIX 的文本编辑程序常用的文本编辑器 1. 行编辑 ed 2. 全屏幕编辑 vi 使用场合 1. 行编辑 ed 常用于批处理程序中,使用输入重定向,软件安装时,用来修改系统配置文件 2. vi 用于人机交互式编辑文本文件

Page 2: UNIX 的文本编辑程序

vi 的启动方法

命令格式: vi 文件名列表 后边可以指定 0个或者多个文件例如: vi try.c

Page 3: UNIX 的文本编辑程序

设置 vi的选项:批命令文件vi 有 40 多个选项控制 vi的运行。两种设定方法 1. 用 .exrc 文件控制 vi 启动时自动读取用户主目录下文件 .exrc 获取自设定的 vi选项如:建立文件 .exrc, 其中含有如下两行: set number set showmode 其中第一条命令使得 vi 在列出每一行时,在左边列出行号。第二条命令使得 vi 在屏幕右下角标志出当前状态。

Page 4: UNIX 的文本编辑程序

设置 vi的选项:交互配置2. 在 vi 中使用 set 命令 :set number 每行左边列出行号 :set showmode 屏幕右下脚标出当前状态 :set nonumber 每行左边不列出行号 :set noshowmode屏幕右下脚不标出当前状态

:set all 列出所有开关的当前状态

一般的,设置选项的命令格式为 :set xxx 取消选项的命令格式分别为 :set noxxx

Page 5: UNIX 的文本编辑程序

vi 的工作方式命令方式和输入方式。 vi一启动就进入命令方式。

按Esc键命令方式

输入方式

命令i,a等

正文编辑命令

Page 6: UNIX 的文本编辑程序

vi 的工作方式的切换( 1)命令方式 用户键入的内容被当作 vi 的命令来解释,一般处于命令方式下按键无回显,以冒号打头引入的 ex 命令和查找命令除外( 2)文本输入方式 编辑命令 i, a等,可以从命令方式转到输入方式。 处于输入方式时,用户键入的所有内容全部作为输入的正文内容,用户可以输入多行,每输入完一行后按回车转入下一行,正文输入时有回显。 输入完毕按键盘左上角的 Esc 键,返回到命令方式。

Page 7: UNIX 的文本编辑程序

vi 的命令:正文插入命令 i: 在当前光标处插入正文段,直至按 Esc 键 (insert)命令 a: 在当前光标后插入正文段,直至按 Esc 键 (append)命令 o: 在当前行后插入正文段,直至按 Esc 键 (open)

Page 8: UNIX 的文本编辑程序

vi 命令:光标单字符移动. 单字符移动 h 光标左移一列 j 光标下移一行 k 光标上移一行 l 光标右移一列 这四个字母在键盘上是相邻的四个按键。 有的终端可以直接使用键盘上的方向键代替这四个字母.vi 许多命令可在命令前加上一个整数,标志这个命令连续执行多少遍,例: 5h 光标左移 5列 6j 光标下移 6行 23k 光标上移 23行 10l 光标右移 10列 注意:在 vi命令状态下的按键命令没有回显。

Page 9: UNIX 的文本编辑程序

vi 命令:翻页. 命令 Ctrl-b: 向后翻页 (Backward) Ctrl-f: 向前翻页 (Forward) Ctrl-u: 向上翻半页 (Up) Ctrl-d: 向下翻半页 (Down).vi 把文件尾方向定义为向前,文件头方向定义为向后.有的键盘用 PgDn 键代替 Ctrl-f, 用 PgUp 键代替 Ctrl-b. 也可以使用下面的命令: 6Ctrl-f : 向前翻 6页 15Ctrl-b: 向后翻 15页

Page 10: UNIX 的文本编辑程序

vi 命令:光标行内快速移动---- 将光标移至当前行首 ^ 将光标移至当前行尾 $---- 移到右一个单词 w W 移到左一个单词 b B 也可以使用 6w 3W 5b 10B 命令w,b 与 W,B 的区别:对“单词”分界符的定义不同 小写命令:非字母,数字,下划线之外的字符 大写命令:仅以空白符(空格 /制表符 /回车)

Page 11: UNIX 的文本编辑程序

vi 命令:光标移动到指定行---- 移到指定的行:476 将光标定位于第 476 行:1 将光标定位于第 1行(文件首):$ 将光标定位于文件尾:$-10将光标定位于文件倒数第 10行在描述行号时可以使用 圆点( .)代表当前行号, $ 代表最后一行的行号---- 括号配对 % 先把光标移到一个花括号(或圆括号,或方括号)上,按 %键,则光标自动定位到与它配对的那一个括号

Page 12: UNIX 的文本编辑程序

vi 命令:删除命令和剪贴板 被删除的内容进入剪贴版---- 删除当前字符的命令: x 类似的,命令 5x删除从当前光标开始的 5个字符。---- 删除当前行的命令: dd 类似的,命令 3dd删除从当前行开始的 3行。---- 删除到配对括号命令:先将光标定位在括号上 d% ---- yank: yy 与 y% 不删除,只拷贝到剪贴板---- paste 取出剪贴板中内容 : p

Page 13: UNIX 的文本编辑程序

vi 命令:字符替换---- 替换光标处字符: r 例: ra 命令将当前光标处字符替换为 a。 如果希望将当前光标处开始的三个字符依次替换为 abc,则需要按命令 rarbrc 。---- 替换若干字符 R 例:命令 Rabcdef ,然后按 Esc 键 该命令把从当前光标开始的字符依次替换为 abcdef ,用 Esc 来结束多字符替换命令。

Page 14: UNIX 的文本编辑程序

vi 命令:取消操作和重复操作取消上一次的编辑操作 (undo) 和重复上一次的编辑操作---- 命令 u 取消上一次的编辑操作例如:误删了一段正文,用 u命令可恢复到删除前的状态。再如:把文件中的所有 abc 字符串替换成 xyz字符串, 用 u命令可恢复到替换前状态。---- 命令 . 重复上一次的编辑操作 按圆点键,可以重复上一次的编辑操作。 例如:按 3dd 命令删除了三行,然后按圆点键就再删除三行,如果接着连续按圆点键,则每按一次删除三行。

Page 15: UNIX 的文本编辑程序

vi 命令:文件命令---- 存盘退出 ZZ 存盘退出 :wq<CR>---- 存盘不退出 :w<CR>

---- 不存盘退出 :q!<CR>---- 读入一个文件插入到当前行之下 :r a.c<CR>

---- 写文件 把第 50 行至文件尾的内容写到文件 xxx 中 :50,$w xxx<CR>

:50,$w! Xxx<CR> 强制覆盖

Page 16: UNIX 的文本编辑程序

vi 命令:块操作---- 删除,并拷贝到剪贴板 :10,50d<CR> 删除第 10-50 行 :1,.d<CR> 删除文件首至当前行的部分 :.,$d<CR> 删除当前行到文件尾---- 不删除,拷贝到剪贴板 :10,50y<CR>

---- 复制 :5,10co56<CR> 复制第 5-10 行到第 56行之下---- 移动 :8,34m78<CR> 移动第 8-34 行到第 78行之下。

Page 17: UNIX 的文本编辑程序

vi 命令:刷屏和状态显示

---- 两行合并 J 把当前行下面的行合并到当前行。---- 刷新屏幕显示 Ctrl-l---- 状态显示 Ctrl-g 在屏幕最下面一行列出正在编辑的文件的名字,总行数,当前行号,文件是否被修改过等信息。

Page 18: UNIX 的文本编辑程序

vi 命令:模式查找

使用“正则表达式”来描述一个字符串模式。---- 查找命令 格式 / 模式 例: /[0-9][0-9]*----继续查找命令 n: 向下查找下一个 next (循环搜索) 继续查找命令 N: 向上查找 循环搜索

Page 19: UNIX 的文本编辑程序

vi 命令:模式替换---- 替换命令 (substitution) 格式 :n1,n2s/ 模式 /替换字符串 /g例 1 :1,50s/abc/xyz/ :1,50s/abc/xyz/g 例 2 把一部分行右移 /左移四列 :50,80s/^/ / 第 50-75 行右移 4列:50,80s/^ // 第 50-75 行左移 4列---- 在替换字符串中字符 &代表被模式所匹配的那部分例 3 设文件当前只含有 2行,每行为一个整数,内容为 5 10执行下列命令之后:1,$s/[0-9][0-9]*/192.168.24.& host&/ 192.168.24.5 host5 192.168.24.10 host10

Page 20: UNIX 的文本编辑程序

vi 命令:模式替换中的转义符尤其是在编辑 C语言源程序时。下面的例子中的转义符 \是必不可少的。( 1)将 a[i]*b[j]替换为 x[k]*y[n]的命令为:1,$s/a\[i]\*b\[j]/x[k]*y[n]/g( 2 ) buf.len/1000 替为 buffer.size/1024 的命令: :1,$s/buf\.len\/1000/buffer.size\/1024/g 模式串和替换字符串中的斜线前加转义符 \, 以区别于替换命令格式中所必须的斜线( 3)将 *pointer 替换为 &record :1,$s/\*pointer/\&record/g

Page 21: UNIX 的文本编辑程序

UNIX 文件和目录的布局与系统有关的一些主要目录的取名和在层次结构中的位置 ,几乎在所有 UNIX 中都相同 (惯例 )

/unix 文件 : unix 内核/etc 目录 : 供系统维护管理用的命令和配置文件 . passwd,hosts 文件 : default 目录 : issue 文件 :登录前在 login之上的提示信息 motd 文件 : 登录成功后的显示信息 conf 目录:构成 UNIX 内核的各目标模块,重构内核所需要的工具 rc.d 目录 : 开机时自动执行的命令的集合 ,又分成 0,1,2,...,9 十个阶段 ,分别对应 10 个目录 系统维护命令: fsck,mount,shutdown ,。。。

Page 22: UNIX 的文本编辑程序

UNIX 文件和目录的布局 ( 续)/tmp : 存放临时文件/bin : 系统常用命令 ,如 ls,ln,cp,cat 等/dev : 存放设备文件 ,如终端设备 ,磁带机 ,打印机等 ./usr/include : C语言头文件存放目录/usr/tmp : 存放临时文件/usr/bin : 存放一些常用命令 ,如 ftp,make 等/lib,/usr/lib : 存放各种库文件 , 指 C语言的链接库文件 ,以及 terminfo 终端库等等。/usr/spool : 存放与用户有关的一些临时性文件 , 如 : 打印队列 ,已收到但未读的邮件等等。

Page 23: UNIX 的文本编辑程序

UNIX 文件和目录的命名命名规则 (1) 名字长度: 允许 1- 255 字符 有些 UNIX 不支持长文件名,但至少长度为 1-14(2) 取名的合法字符 除斜线外的所有字符都是命名的合法字符 甚至不可打印字符也可以做文件名 斜线留做路径名分割符(3)大小写字母有区别

Page 24: UNIX 的文本编辑程序

shell 的文件通配符规则 (1)* 匹配任意长度 (包括空字符串 )

点字符 (.) ,当它作为文件名或路径名分量的第一个字符时,必须显式匹配,斜线 (/) 也必须显式匹配。例: *file匹配 file,makefile, 不匹配 .profile 文件

try*c 匹配 try1.c try.c try.basic(2) ? 匹配任一单字符 [] 匹配括号内任一字符 ,也可以用减号指定一个范围 例 : [A-Z]* *.[ch] [Mm]akefile注意 :(1) 文件名通配符规则与正则表达式的规则不同 (2) 不同 shell通配符规则有差别

Page 25: UNIX 的文本编辑程序

与 DOS文件通 jh 配符的区别例 1:UNIX 的文件通配符要比 DOS中严谨 , 无二义性 设当前目录下有文件 xcom.exe xcom.c xcom.obj 在 DOS中 DIR XCOM* 会列出三个文件 DEL XCOM* 删不掉上述任何文件 在 UNIX 中不然 , 不存在二义性解释 ls xcom* 会列出三个文件 rm xcom* 会删除三个文件

例 2: DOS中 *.* 匹配所有文件 UNIX 中 *.* 要求文件名中必须含有圆点 ,否则不匹配 如: *.*与 makefile 不匹配

Page 26: UNIX 的文本编辑程序

与 DOS文件通配符的区别(续)

例 3: 在 DOS中 ,无法使用通配串 *temp* 在 UNIX 中对 *temp* 严格按前述规则去理解 ,而且 *temp*list*也可用的

例 4:在 UNIX 中可以使用 */*.[ch] 通配符 ,在 DOS中不许

例 5: 在 UNIX 中 , 文件通配符允许用于任何命令 ,而 DOS中只能用于 dir/del/copy 等有限的几个命令中 UNIX 中 , 命令 cat *.c 可以列出所有的 .C文件内容 DOS中 , 命令 TYPE *.c 不可

Page 27: UNIX 的文本编辑程序

shell 文件名通配的过程文件名通配由 shell 完成(1) 在 shell提示符下 ,从键盘输入命令 ,被 shell 接受(2)shell对所键入的内容作若干种加工处理 ,其中含有对文件通配符的扩展工作 (文件名生成 ),生成结果命令。(3) 执行 (2)生成的结果命令。

Page 28: UNIX 的文本编辑程序

shell 文件名通配举例

(1) 设当前目录下只有 try.c, zap.c, arc.c三文件, 键入内容 cat *.c 实际执行 cat arc.c try.c zap.c ( 按字典序 ) 对于命令 cat 来说 , 指定了 3 个文件(2) grep a*.c try.c 与 grep 'a*.c' try.c 的区别(3) vi m*e ---> vi makefile(4) cd *work.d ---> cd configure_network.d

Page 29: UNIX 的文本编辑程序

验证 shell 文件名通配的结果shell 文件名通配举例 ,文件 arg.c main(argc,argv)

int argc; char **argv; { int i; for(i=0;i<argc;i++ ) printf("%d:[%s]\n",i,argv[i]); }

执行: ./arg * ./arg /usr/include/* ./arg */* /usr/* 将执行结果与同样的 arg.c 在 DOS下执行结果相比较