VI编辑器的使用 College of Information Science and Engineering Shandong Agricultural University
1. 了解关于vi的基本知识; 2. 熟悉vi的三种工作模式; 3.掌握vi下的文本编辑方法; 4.掌握vi操作的常用技巧。 学习目标
主要内容 VI的三种工作模式 VI的启动与保存退出 VI的文本编辑 其他模式下的操作
系统配置文件、shell脚本文件等都是文本文件,编辑它们都要使用文本编辑器。 在Linux系统中有多种文本编辑器,其中既有字符界面如的VI、EMACAS等,也有图形界面的如“附件”菜单下的“文本编辑器(gedit)”等,用户可以根据自己的喜好选择使用。 学习vi的方法: vi的命令太多且难以记忆,而实际上真正经常使用的命令并不是太多,只要掌握几个关键的并加以适当练习很快就可上手使用vi。
为什么选择VI 就使用的方便性而言,有比vi更好的编辑器,还有图形化的gedit,为什么还要用vi? 没有图形支持的情况下,如终端远程连接到服务器或者嵌入式设备,修改或者编制代码或者查看文件就需要vim,vi等工具了。 用户一旦熟悉后,使用非常方便;系统管理员使用正则表达式可以极大地提高工作效率,而学习vi也是掌握正则表达式的有效途径。 编辑器vi可以编辑各种无格式的文本文件,尤其便于编辑原程序。它可以实现输入、查找、替换、删除和块操作等许多基本的文本操作功能,而且用户可以根据自己的需要对其进行定制,以符合自己的习惯。在vim中,还有一些增强的功能,如撤消多行输入、参数高亮显示、命令行编辑和支持图形方式vi(gvim)的多窗口、多缓冲功能等。 由于vi是交互式的文本编辑器,它没有菜单,只有命令,而且命令非常多,所以很多初学者使用不习惯,但是在掌握了它的使用诀窍后很快会喜爱上它。 vi的更全面用法读者有需要可以查阅vi帮助手册或者其他的参考书籍。另外,由于vi的版本不同,其命令格式、功能和用法会有一些差别, 在vi中对文本文件所做的修改将被存放到内存缓冲区中,只要用户不输入存盘命令,那么随时都可以放弃这些修改。一般情况下,文件在存盘时vi不会自动保存备份文件;但是在打开文件时Linux系统会在磁盘相关目录下自动创建扩展名为.swp的文件,这个文件也称为交换文件,如果由于某些原因,如编辑崩溃、系统断电或非法关机等操作时,该文件就作为备份文件使用,用户在下次启动系统时会在自己的主目录下收到相关邮件,由用户决定是否通过命令来恢复该文件。
1.VI的三种工作模式 命令模式 输入模式(编辑模式) 底行命令模式 可进行文件的保存,退出,文本的删除、复制、搜索等操作。 输入模式(编辑模式) 命令模式下用编辑类命令i(sert),a(ppend),o,s等均可进入该模式。 按esc返回命令模式。 底行命令模式 实际上也是命令模式的一种,在命令模式下输入冒号进入一个命令行,可显示地输入命令(所以有些书认为是两种工作模式)。 三种模式可自由切换,一般切换命令就是操作的英文单词的首字母
三种模式间的转换关系 文本输入 模式 底行命令 命令模式 (默认) 按ESC键 按A,I,S,C,O等可做不同插入操作,同时转换模式 按“:”键 命令执行后自动返回(除退出命令)
sudo apt-get install vim 由于vi的版本不同,其命令格式、功能和用法会有一些差别。多数发行版上安装的是传统vi的增强版本vim(VI Improved)。输vi命令可看到版本提示信息。 如果编辑模式下按方向键出字母,用whereis vi查看会发现安装的一般是Vim-tiny。可再安装一下,执行: sudo apt-get install vim
2.VI的启动与保存退出 【启动】 执行vi命令即可如: vi my.txt 如果文件存在,则vi显示文件内容并等待用户的命令。如果指定的文件不存在,则vi将告知用户这是未命名的文件,并进入一个空白的界面。 启动vi后默认处于命令模式。 常用的启动参数(更多参数参考vi --help): -b 以二进制模式显示。 -d 打开多个文件,并显示文件之间的不同之处。 -m 被修改后的文件不允许被写入硬盘。 -M 禁止对文件进行修改。 -R 以只读方式打开文件 -e 以ex(一种UNIX系统中常见的文本编辑器)的操作方式运行vi。 vi –R /etc/passwd 以只读方式打开文件passwd 在linux下后缀名没有什么强制要求。对可执行文件,系统一般从文件的属性来区分。对源代码文件,一般要给出合适的后缀,gcc通过后缀来区别输入文件的类别。
【保存退出】(命令行模式下): 命令模式下也可退出:ZZ或ZQ(保存或不保存退出) :q 在文件未作修改的情况下退出。 :wq 保存文件修改并退出。或“:x”也可。 :w 保存文件。 :w file 将正文内容保存到file中。 :nw file 保存第n行到file中。 :m,nw file 保存第m行至第n行到file中。 :r file 读取file的内容输出到正文光标所在位置。 :recover 恢复文件。 命令模式下也可退出:ZZ或ZQ(保存或不保存退出)
3.文本编辑 【显示行号】——底行命令模式下输入set nu可设置vi显示行号。 命令模式转编辑模式的命令有: a 切换到插入模式,在光标右侧输入正文。 o 切换到插入模式,在光标所在行的下一行增添新行。 O 切换到插入模式,在光标所在行的上一行增添新行。 I 切换到插入模式,在光标所在行的开头输入正文。 A 切换到插入模式,在光标所在行的末尾输入正文。 s 切换到改写模式,用输入的正文替换光标指向的字符。
4、其他模式下的命令操作 命令的相关符号说明: 准备练习文件: cat –n /etc/passwd >vitest 若无特殊说明,n或m表示数字;c表示一个字符;str表示一个字符串;file表示文件名。 如:nd 表示删除n行。 vi中存在一些特殊字符表示行号,“.”表示当前光标所在行,$表示末尾行。 准备练习文件: cat –n /etc/passwd >vitest 利用重定向,新建一个有行号信息的文本内容的文件。
【光标移动】——命令模式下 k 光标上移一行。 j 光标下移移行。 h 光标左移一个字符。 l 光标右移一个字符。 数字0/$ 光标移动到行首/尾。 w/b 行内移动到下/前一个词的开头。 e 行内移动到单词的结尾。 ^ 移动到所在行的一个非空字符。 H 光标移到屏幕顶行。 M 光标移到屏幕中间。 L 光标移到屏幕底行。 nG:移动到第n行行首。(或用 :n) …… k h l j
【删除】——命令模式下 #表示数字 #x 删除几个字符,如3x #dw 删除几个单词,如3dw表示删除三个单词 #dd 删除多个行,如3dd 表示删除光标行及光标的下两行 d$ 删除光标到行尾的内容 x 删除光标所在字符 dw/db 删除光标后/前一单词 dd 删除光标所在的行 s 删除光标所在字节,并进入输入模式 d光标键: 左:删除光标前面的字符; 右:删除光标所在的字符; 上:将当前行与上一行删除; 下:当前行与下一行删除 nd上下光标键: 删除当前行之上、下的几行文本(包括当前行)
【撤销与重做】——命令模式下 u 撤销前一跳命令产生的结果。 . 重做最后一条命令的操作。
【文本复制、粘贴】——命令模式下 复制命令:y 粘贴命令 yy 复制整行 yw 复制光标所在的单词 nyw 复制包括光标所在的n个单词 nyy 复制包括当前行在内的n行 粘贴命令 p 当前光标后/行下粘贴。
【多个文件间操作】——底行模式 1)多文件间复制 vi file1 file2 同时打开两个文件。 默认在第一个文件file1的界面下。5yy,复制从当前光标行开始向下五行。 :next 切换到下一个打开文件file2(也可用:n切换)。移动光标到合适位置,p,复制。 :prev 切换到上一个打开文件file1。
关于复制使用的缓冲区 通用缓冲区 一般情况下,最近一次的抽取、删除、插入和修改的内容都将存放在通用缓冲区中。利用这些缓冲区可以非常方便地实现文本内容的剪切和粘贴。 专用缓冲区 名字采用双引号加单个字母表示,如”a,”b等等 命令模式下输入”ayy,可将当前行的内容复制到专用缓冲区a中。输入”ap,则将专用缓冲区中的内容粘贴到光标位置之后。 有些发行版从当前文件切换到下一个文件时通用缓冲区的内容会丢失,而使用专用缓冲区则复制的内容能保留。
删除使用通用缓冲区 例:将当前行开始的4行内容向后移动8行。 4dd是删除4行; 8j表示将光标向后移动8行; p会将删除的内容粘贴在光标后。可见vi自动将删除的4行内容保存在通用缓冲区中了。
2)文件间读写 :r file_name :1,5 w >>file_name 可导入文件内容添加到当前文件的光标所在行后 :1,5 w >>file_name 将当前文件第1行到5行的内容保存到文件file_name中。 :.,$-2 w >>file_name 当前行到倒数第三行的内容写入file_name文件中。 使用>或>>重定向符号,以免指定文件存在时vi的“File exists”的报错。
【查找替换字符串】——底行模式 :%s/str1/str2/g :/string 向后搜索指定的字符串,按n键继续找下一个。 :?string 向前搜索指定的字符串,按n键继续找下一个。 :s/str1/str2/ 用字符串str2替换当前行中首次出现的字符串str1。 :s/str1/str2/gc 用字符串str2替换当前行中所有出现的字符串str1,并依次提示是否替换。 :%s/str1/str2/g 把文档中所有str1替换成str2; :m,n s/str1/str2/g 用str2替换第m行到第n行所有出现的字符串str1。 :.,$-2 s/str1/str2/g 用str2替换当前行到倒数第3行所有出现的字符串str1。 :s#str1/#str2/# 替换当前行第一个str1/为str2/
【执行其他shell命令】——底行模式 用户在编辑文本文件过程中,可以在不退出vi的情况下执行shell命令,如: :!ls –l :!mount /dev/sda1 /mnt
练 习 复制passwd文件,对该文件做下页要求的练习。 用vi建立一个文件,输入一篇英文自我介绍,命名为myinfo.eng保存到用户主目录下。 用vi新建一个文件,录入你简要的个人信息,包括姓名、Email、座右铭等信息,保存成“~/myinfo.txt”,并将myinfo.eng的内容添加到myinfo.txt文件的尾部。
复制passwd文件做练习文件。 在 vi 中设定一下行号; 利用字符串搜索查找user用户信息所在的行。将该行复制后粘贴到文件第1行。并将该行第3个单词后的字符都删除。 将 10 到 20 行之间的 bin 改为 BIN,并且由用户一个个确认是否需要修改。 删除第10行以后的内容。复制前5行粘贴到文件最后。 将这个文件另存成一个mypasswd文件; 储存当前文件离开。