天天看点

2.7 使用vi文本编辑器

2.7  使用vi文本编辑器

只要使用Linux,那么不使用文本编辑器几乎是不可能的。这是因为多数Linux配置文件是纯文本文件,所以有时肯定需要进行手动修改。

如果正在使用GUI,那么可以运行gedit,编辑文本时使用它相当直观。还有一个简单的文本编辑器nano,可从shell运行它。但是多数Linux shell用户会使用vi或emacs命令来编辑文本文件。与图形编辑器相比,vi或emacs的优势在于可以在任何shell、字符终端或基于字符的网络连接(例如,使用telnet或ssh)中使用它们,而无须使用GUI。它们都具有强大的功能,所以可一直使用它们。

本节提供一个简单的vi文本编辑器教程,使用它可在任意shell中手动编辑配置文件(如果vi不适合您,请参阅选读部分“了解其他文本编辑器”了解其他选择)。

Vi编辑器在开始时很难学,可是一旦掌握了它,就永远不必使用鼠标或功能键了——使用键盘就可以快速高效地在文件中编辑和移动。

了解其他文本编辑器
可供Linux使用的文本编辑器有十几个。下面是Linux发行版中可能提供的,如果认为使用vi太费力,可以试用它们:
文本编辑器 描述
nano 一款流行的简单文本编辑器,用于很多可引导的Linux和其他空间有限的Linux环境。例如,nano通常用于在Linux安装过程中编辑文本文件
gedit 在GUI中运行的GNOME文本编辑器
jed 程序员使用的面向屏幕的编辑器。通过使用各种颜色,jed能够突出显示所创建的代码,这样就可以轻松阅读代码并找出语法错误。使用Alt键选择菜单来操纵文本
joe Joe编辑器与很多PC文本编辑器类似。使用Ctrl和方向键在文本中移动。按Ctrl+C不保存退出,按Ctrl+X保存后退出
kate kdebase软件包中很漂亮的编辑器。它有很多功能,例如为不同类型的编程语言突出显示和管理自动换行控制
kedit KDE桌面中基于GUI的文本编辑器
mcedit 使用mcedit时,其功能键可帮助我们浏览、保存、复制、移动和删除文本。与jed和joe一样,mcedit也是面向屏幕的
nedit 一款优秀的程序员编辑器。需要安装可选的nedit软件包才能获得该编辑器
如果使用ssh登录网络上的其他Linux计算机,就可以使用任意编辑器来编辑文件。屏幕上会弹出一个基于GUI的编辑器。如果没有GUI,则需要在shell中运行的文本编辑器,如vi、jed或joe。

2.7.1  运行vi

通常情况下,运行vi可打开特定的文件。例如,要打开/tmp/test文件,可输入下面的命令:

$ vi /tmp/test

如果这是一个新文件,应该看到和下面类似的内容:

~

~

~

~

~

"/tmp/test" [New File]

顶部的框表示光标的位置。底部的行通知编辑情况(此处只是打开了一个新文件)。在这两部分之间,波浪线(~)作为填充符,因为文件中还没有任何文本。现在这是令人害怕的部分:这里没有提示、菜单或图标告诉我们要做什么。不能只是从顶部开始输入。如果这样做,计算机就会发出蜂鸣声。所以有些人抱怨Linux并不友好。

首先需要了解的是不同的操作模式:命令或输入。vi编辑器始终启动到命令模式。在添加或修改文件中的文本前,必须输入命令(一个或者两个字母加上一个可选的数字)告诉vi您想要做什么。大小写很重要,所以要按例子所示精确地使用大写或小写字母!要进入输入模式,输入该输入命令。输入下面的命令开始操作:

·    a:添加命令。在它之后,可以从光标的右端开始输入文本。

·    i:插入命令。在它之后,可以从光标的左端开始输入文本。

输入一些单词,然后按Enter键。重复执行该操作数次,直到有几行文本为止。完成输入后,按Esc返回到命令模式。现在文件中有一些文本了,试用下面的键或字母在文本中移动:

2.7 使用vi文本编辑器
记住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!:退出当前文件,并且不保存对文件进行的修改。

2.7 使用vi文本编辑器
如果确实错误地修改了文件,那么: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命令应该相当精通了。

2.7 使用vi文本编辑器
在很多Linux系统中调用vi时,实际上正在调用vim文本编辑器,它运行在vi兼容模式下。进行大量编程工作的人可能更愿意使用vim,因为它以不同的颜色显示不同的代码层次。vim还有一些其他有用的功能,例如在打开文档时,将光标放在最后一次退出文件时光标所在的位置。

继续阅读