290 likes | 407 Views
UNIX 的文本编辑程序. 常用的文本编辑器 1. 行编辑 ed 2. 全屏幕编辑 vi 使用场合 1. 行编辑 ed 常用于批处理程序中,使用输入重定向,软件安装时,用来修改系统配置文件 2. vi 用于人机交互式编辑文本文件. vi 的启动方法. 命令格式: vi 文件名列表 后边可以指定 0 个或者多个文件 例如: vi try.c. 设置 vi 的选项:批命令文件. vi 有 40 多个选项控制 vi 的运行。 两种设定方法 1. 用 .exrc 文件控制
E N D
UNIX的文本编辑程序 常用的文本编辑器 1. 行编辑ed 2.全屏幕编辑vi 使用场合 1. 行编辑ed常用于批处理程序中,使用输入重定向,软件安装时,用来修改系统配置文件 2. vi用于人机交互式编辑文本文件
vi的启动方法 命令格式: vi 文件名列表 后边可以指定0个或者多个文件 例如: vi try.c
设置vi的选项:批命令文件 vi有40多个选项控制vi的运行。 两种设定方法 1. 用.exrc文件控制 vi启动时自动读取用户主目录下文件.exrc获取自设定的vi选项 如:建立文件.exrc,其中含有如下两行: set number set showmode 其中第一条命令使得vi在列出每一行时,在左边列出行号。第二条命令使得vi在屏幕右下角标志出当前状态。
设置vi的选项:交互配置 2.在vi中使用set命令 :set number 每行左边列出行号 :set showmode 屏幕右下脚标出当前状态 :set nonumber 每行左边不列出行号 :set noshowmode屏幕右下脚不标出当前状态 :set all 列出所有开关的当前状态 一般的,设置选项的命令格式为 :setxxx 取消选项的命令格式分别为 :set noxxx
vi的工作方式 命令方式和输入方式。vi一启动就进入命令方式。
vi的工作方式的切换 (1)命令方式 用户键入的内容被当作vi的命令来解释,一般处于命令方式下按键无回显,以冒号打头引入的ex命令和查找命令除外 (2)文本输入方式 编辑命令i,a等,可以从命令方式转到输入方式。 处于输入方式时,用户键入的所有内容全部作为输入的正文内容,用户可以输入多行,每输入完一行后按回车转入下一行,正文输入时有回显。 输入完毕按键盘左上角的Esc键,返回到命令方式。
vi的命令:正文插入 命令i: 在当前光标处插入正文段,直至按Esc键(insert) 命令a: 在当前光标后插入正文段,直至按Esc键(append) 命令o: 在当前行后插入正文段,直至按Esc键(open)
vi命令:光标单字符移动 .单字符移动 h 光标左移一列 j 光标下移一行 k 光标上移一行 l 光标右移一列 这四个字母在键盘上是相邻的四个按键。 有的终端可以直接使用键盘上的方向键代替这四个字母 .vi许多命令可在命令前加上一个整数,标志这个命令连续执行多少遍,例: 5h 光标左移5列 6j 光标下移6行 23k 光标上移23行 10l 光标右移10列 注意:在vi命令状态下的按键命令没有回显。
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页
vi命令:光标行内快速移动 ---- 将光标移至当前行首 ^ 将光标移至当前行尾 $ ---- 移到右一个单词 w W 移到左一个单词 b B 也可以使用6w 3W 5b 10B命令 w,b与W,B的区别:对“单词”分界符的定义不同 小写命令:非字母,数字,下划线之外的字符 大写命令:仅以空白符(空格/制表符/回车)
vi命令:光标移动到指定行 ---- 移到指定的行 :476 将光标定位于第476行 :1 将光标定位于第1行(文件首) :$ 将光标定位于文件尾 :$-10将光标定位于文件倒数第10行 在描述行号时可以使用 圆点(.)代表当前行号, $ 代表最后一行的行号 ---- 括号配对 % 先把光标移到一个花括号(或圆括号,或方括号)上,按%键,则光标自动定位到与它配对的那一个括号
vi命令:删除命令和剪贴板 被删除的内容进入剪贴版 ---- 删除当前字符的命令:x 类似的,命令5x删除从当前光标开始的5个字符。 ---- 删除当前行的命令:dd 类似的,命令3dd删除从当前行开始的3行。 ---- 删除到配对括号命令:先将光标定位在括号上 d% ---- yank: yy与y% 不删除,只拷贝到剪贴板 ---- paste取出剪贴板中内容: p
vi命令:字符替换 ---- 替换光标处字符:r 例:ra命令将当前光标处字符替换为a。 如果希望将当前光标处开始的三个字符依次替换为abc,则需要按命令rarbrc。 ---- 替换若干字符R 例:命令Rabcdef,然后按Esc键 该命令把从当前光标开始的字符依次替换为abcdef,用Esc来结束多字符替换命令。
vi命令:取消操作和重复操作 取消上一次的编辑操作(undo)和重复上一次的编辑操作 ---- 命令u 取消上一次的编辑操作 例如:误删了一段正文,用u命令可恢复到删除前的状态。 再如:把文件中的所有abc字符串替换成xyz字符串, 用u命令可恢复到替换前状态。 ---- 命令. 重复上一次的编辑操作 按圆点键,可以重复上一次的编辑操作。 例如:按3dd命令删除了三行,然后按圆点键就再删除三行,如果接着连续按圆点键,则每按一次删除三行。
vi命令:文件命令 ---- 存盘退出 ZZ 存盘退出 :wq<CR> ---- 存盘不退出 :w<CR> ---- 不存盘退出 :q!<CR> ---- 读入一个文件插入到当前行之下 :r a.c<CR> ---- 写文件 把第50行至文件尾的内容写到文件xxx中 :50,$w xxx<CR> :50,$w! Xxx<CR>强制覆盖
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行之下。
vi命令:刷屏和状态显示 ---- 两行合并J 把当前行下面的行合并到当前行。 ---- 刷新屏幕显示Ctrl-l ---- 状态显示 Ctrl-g 在屏幕最下面一行列出正在编辑的文件的名字,总行数,当前行号,文件是否被修改过等信息。
vi命令:模式查找 使用“正则表达式”来描述一个字符串模式。 ----查找命令 格式 /模式 例:/[0-9][0-9]* ----继续查找命令n: 向下查找下一个next(循环搜索) 继续查找命令N: 向上查找 循环搜索
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
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
UNIX文件和目录的布局 与系统有关的一些主要目录的取名和在层次结构中的位置,几乎在所有UNIX中都相同(惯例) /unix文件: unix内核 /etc目录: 供系统维护管理用的命令和配置文件. passwd,hosts文件: default目录: issue文件:登录前在login之上的提示信息 motd文件: 登录成功后的显示信息 conf目录:构成UNIX 内核的各目标模块,重构内核所需要的工具 rc.d目录: 开机时自动执行的命令的集合,又分成0,1,2,...,9十个阶段,分别对应10个目录 系统维护命令:fsck,mount,shutdown,。。。
UNIX文件和目录的布局(续) /tmp : 存放临时文件 /bin : 系统常用命令,如ls,ln,cp,cat等 /dev : 存放设备文件,如终端设备,磁带机,打印机等. /usr/include : C语言头文件存放目录 /usr/tmp : 存放临时文件 /usr/bin : 存放一些常用命令,如ftp,make等 /lib,/usr/lib : 存放各种库文件,指C语言的链接库文件,以及terminfo终端库等等。 /usr/spool : 存放与用户有关的一些临时性文件,如:打印队列,已收到但未读的邮件等等。
UNIX文件和目录的命名 命名规则 (1)名字长度: 允许1-255字符 有些UNIX不支持长文件名,但至少长度为1-14 (2)取名的合法字符 除斜线外的所有字符都是命名的合法字符 甚至不可打印字符也可以做文件名 斜线留做路径名分割符 (3)大小写字母有区别
shell的文件通配符规则 (1)* 匹配任意长度(包括空字符串) 点字符(.),当它作为文件名或路径名分量的第一个字符时,必须显式匹配,斜线(/)也必须显式匹配。例:*file匹配file,makefile,不匹配.profile文件 try*c 匹配try1.c try.c try.basic (2) ? 匹配任一单字符 [] 匹配括号内任一字符,也可以用减号指定一个范围 例: [A-Z]* *.[ch] [Mm]akefile 注意:(1)文件名通配符规则与正则表达式的规则不同 (2)不同shell通配符规则有差别
与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不匹配
与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不可
shell文件名通配的过程 文件名通配由shell完成 (1)在shell提示符下,从键盘输入命令,被shell接受 (2)shell对所键入的内容作若干种加工处理,其中含有对文件通配符的扩展工作(文件名生成),生成结果命令。 (3)执行(2)生成的结果命令。
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
验证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下执行结果相比较