出处:Linux宝典(第三版) 2.7 使用vi文本编辑器
只要使用Linux,那么不使用文本编辑器几乎是不可能的。这是因为多数Linux配置文件是纯文本文件,所以有时肯定需要进行手动修改。
如果正在使用GUI,那么可以运行gedit,编辑文本时使用它相当直观。还有一个简单的文本编辑器nano,可从shell运行它。但是多数Linux shell用户会使用vi或emacs命令来编辑文本文件。与图形编辑器相比,vi或emacs的优势在于可以在任何shell、字符终端或基于字符的网络连接(例如,使用telnet或ssh)中使用它们,而无须使用GUI。它们都具有强大的功能,所以可一直使用它们。
本节提供一个简单的vi文本编辑器教程,使用它可在任意shell中手动编辑配置文件(如果vi不适合您,请参阅选读部分“了解其他文本编辑器”了解其他选择)。
Vi编辑器在开始时很难学,可是一旦掌握了它,就永远不必使用鼠标或功能键了——使用键盘就可以快速高效地在文件中编辑和移动。
2.7.1 运行vi
通常情况下,运行vi可打开特定的文件。例如,要打开/tmp/test文件,可输入下面的命令:
$ vi /tmp/test
如果这是一个新文件,应该看到和下面类似的内容:
~
~
~
~
~
"/tmp/test" [New File]
顶部的框表示光标的位置。底部的行通知编辑情况(此处只是打开了一个新文件)。在这两部分之间,波浪线(~)作为填充符,因为文件中还没有任何文本。现在这是令人害怕的部分:这里没有提示、菜单或图标告诉我们要做什么。不能只是从顶部开始输入。如果这样做,计算机就会发出蜂鸣声。所以有些人抱怨Linux并不友好。
首先需要了解的是不同的操作模式:命令或输入。vi编辑器始终启动到命令模式。在添加或修改文件中的文本前,必须输入命令(一个或者两个字母加上一个可选的数字)告诉vi您想要做什么。大小写很重要,所以要按例子所示精确地使用大写或小写字母!要进入输入模式,输入该输入命令。输入下面的命令开始操作:
· a:添加命令。在它之后,可以从光标的右端开始输入文本。
· i:插入命令。在它之后,可以从光标的左端开始输入文本。
输入一些单词,然后按Enter键。重复执行该操作数次,直到有几行文本为止。完成输入后,按Esc返回到命令模式。现在文件中有一些文本了,试用下面的键或字母在文本中移动:
|
记住Esc键!它始终可以回到命令模式。
|
· 方向键:在文件中向上、下、左或右移动光标,一次一个字符。也可以使用退格键和空格键分别向左和向右移动。如果喜欢将手指放在键盘上,可使用h(左)、l(右)、j(下)或k(上)来移动光标。
· w:将光标移动到下个单词的开头。
· b:将光标移动到前个单词的开头。
· 0(zero):将光标移动到当前行的开头。
· $:将光标称动到当前行的末尾。
· H:将光标移动到屏幕的左上角(屏幕上的第一行)。
· M:将光标移动到屏幕中间行的第一个字符。
· L:将光标移动到屏幕的左下角(屏幕上的最后一行)。
其他编辑操作中惟一需要知道的是如何删除文本。下面是一些删除文本用的vi命令:
· x:删除光标下的字符。
· X:删除光标前字符。
· dw:删除从当前字符开始直到当前单词末尾的所有字符。
· d$:删除从当前字符开始直到当前行末尾的所有字符。
· d0:删除从前一个字符开始直到当前行开头的所有字符。
要结束编辑,可使用下列击键保存和退出文件:
· ZZ:将当前修改保存到文件并退出vi。
· :w:保存当前文件,但继续编辑。
· :wq:与ZZ相同。
· :q:退出当前文件。没有任何未保存的修改时该命令才会工作。
· :q!:退出当前文件,并且不保存对文件进行的修改。
|
如果确实错误地修改了文件,那么:q!命令是退出并且放弃修改的最好方法。文件会还原到最近修改的版本。所以如果只是使用:w,有时可能会陷入困境。如果只想取消一些错误的编辑,按u键即可撤销修改。
|
现在已学习了一些vi编辑命令。在后面的各节会介绍更多的命令。这里先列出首次试用vi的一些提示:
· Esc:记住,Esc用于回到命令模式(我曾看到有人按下键盘上的所有键来尝试退出文件)。在Esc后面键入ZZ可以退出命令模式、保存文件并退出vi。
· u:按u键可以撤销之前做的修改。连续按u可以撤销更前面的修改。
· Ctrl+R:如果决定不再撤销前面的命令,可使用Ctrl+R进行恢复。本质上,这个命令取消所做的撤销操作。
· Caps Lock:小心不要错按了Caps Lock键。处于大写状态时,在vi中输入的任何内容都有不同的含义。输入大写字母时不会出现警告,但事情却开始变得不可思议。
· :!命令:在vi中,可使用:!后跟命令名的方式来运行命令。例如,输入:!date查看当前的时间和日期,输入:!pwd查看当前目录,输入:!jobs查看后台是否有任务正在运行。命令运行完成时,按Enter键就可以返回继续编辑文件。甚至可以使用该技术从vi中启动shell(:!bash)、在该shell中运行几个命令,然后键入exit返回到vi(我建议转到shell前保存文件,防止回到vi后忘记保存)。
· --INSERT:处于插入模式时,INSERT一词会出现在屏幕底部。
· Ctrl+G:如果忘记了正在编辑的内容,按下这些键可在屏幕底部显示正在编辑的文件名和所在的行。它还显示文件的总行数、已浏览过的部分占该文件的百分比,以及光标所在的列号。这用来在下午停止工作一段时间后,帮助您确定编辑的位置。
2.7.2 在文件中移动
除了前面所述的几个移动命令外,还有其他方法可在vi文件中移动。要尝试这些方法,可打开一个不会对其进行太大破坏的大文件(把/var/log/messages复制到/tmp中,然后在vi中打开它)。下面是一些可用的移动命令:
· Ctrl+F:向前翻页,一次一页。
· Ctrl+B:向后翻页,一次一页。
· Ctrl+D:向前翻页,一次半页。
· Ctrl+U:向后翻页,一次半页。
· G:转到文件的末行。
· 1G:转到文件的首行(使用任意数字可转到文件中的该行)。
2.7.3 搜索文本
要搜索文本在文件中下次出现的位置,可使用斜线(/)或问号(?)字符。在斜线或问号后面加上模式(字符串或文本)可分别向前或向后搜索该模式。搜索时也可以使用元字符。下面是一些例子:
· /hello:向前搜索单词hello。
· ?goodbye:向后搜索单词goodbye。
· /The.*foot:向前搜索包括单词The,同时在The之后的某处有单词foot的行。
· ?[pP]rint:向后搜索print或Print。记住,Linux中是区分大小写的,所以可使用括号来搜索大小写不同的单词。
vi编辑器最初基于ex编辑器,而ex编辑器不能在全屏模式下运行。但是它允许运行命令,以便同时在一行或者多行中搜索和修改文本。输入冒号并且光标到达屏幕底部时,实际上就处于ex模式中。下面的例子用ex命令搜索和修改文本(我选择搜索Local和Remote,但也可使用其他合适的单词)。
· :g/Local:搜索单词Local,并且打印文件中它所出现的行(如果结果多于一个屏幕,则以管道形式将输出定向到more命令)。
· :s/Local/Remote:在当前行上用Remote代替Local。
· :g/Local/s//Remote:用Remote代替文件中每行第一次出现的Local。
· :g/Local/s//Remote/g:用Remote代替文件中出现的所有Local。
· :g/Local/s//Remote/gp:用Remote代替文件中出现所有的Local,然后打印每一行来查看进行的修改(如果输出多于一页,则以管道形式将输出定向到more命令)。
2.7.4 使用命令和数字
在多数vi命令前都可以使用数字,这样命令就能够重复执行该指定数目的次数。这是一次处理多行、多个单词或多个字符的便捷方法。下面是一些例子:
· 3dw:删除下面的3个单词。
· 5cl:修改下面的5个字母(即删除字母并进入输入模式)。
· 12j:向下移动12行。
在多数命令前加上数字只是重复执行这些命令。此时对于使用vi命令应该相当精通了。
|
在很多Linux系统中调用vi时,实际上正在调用vim文本编辑器,它运行在vi兼容模式下。进行大量编程工作的人可能更愿意使用vim,因为它以不同的颜色显示不同的代码层次。vim还有一些其他有用的功能,例如在打开文档时,将光标放在最后一次退出文件时光标所在的位置。
|
posted on 2007-10-24 10:22
小言身寸 阅读(990)
评论(0) 编辑 收藏