3.2 文本编辑器

在使用Windows的过程中,很多人已经习惯了通过图形界面修改计算机的配置、配置各种服务等操作,而在Linux中大部分的配置工作都是通过修改Linux的各种配置文件实现。修改配置文件就需要使用文件编辑器,Linux下的文件编辑器非常多,有的是在字符界面下使用,有的是在图形界面下使用。本章中主要介绍一款在图形界面下使用的文件编辑器Gedit及一款在字符界面下使用的文件编辑器vi。

3.2.1 Gedit编辑器使用

Gedit(Gedit官方网站:http://www.gnome.org/projects/gedit/)是Linux下使用的一款纯文本编辑器,Gedit操作简单,具有一般文本编辑器所应该具有的所有功能。同时Gedit还支持插件功能,可以把Gedit用来当成是一个集成开发环境,通过插件Gedit会根据不同的语言高亮显现关键字和标识符。

很多Linux发行版在Gnome桌面环境下都包含了Gedit。在RHEL 5.x中进入GNOME桌面环境后,通过“应用程序”→“附件”→“文本编辑器”即可打开Gedit,如图3-34所示。

图3-34 启动Gedit

提示

在KDE桌面环境中提供的是KEdit,该软件与Gedit在功能上区别并不大。

Gedit使用时与一般Windows下的文本编辑器区别不大,这里就不一一介绍了。本章主要介绍Gedit插件的使用文件。通过丰富多彩的插件,可以让Gedit的功能变得非常强大。在RHEL 5.x中Gnome桌面环境的Gedit已经包含了很多的插件,可以通过“编辑”→“首选项”→“插件”勾选需要使用的插件,如图3-35所示。

图3-35 编辑插件

当然也可以访问http://live.gnome.org/Gedit/Plugins,能下载到很多插件,这些插件的安装方法也基本相同,下载插件将插件复制到“~/gnome2/gedit/plugins”目录(如果该目录不存在就手动建立),重新启动Gedit后即可以通过“Edit”→“Preferences”→“Plugins”勾选插件。

3.2.2 vi编辑器使用

1976年由Bill Joy完成编写vi,并由BSD发布。从2006年开始,作为“单一UNIX规范”的一部分,vi或vi的一种变形版本一定会在类UNIX系统中找到。直到现在,vi仍然被广泛地使用,vi比其他许多文本编辑器启动得更快,并且占内存更少。

vim(vim官方网站:http://www.vim.org/)是vi最著名的一种变形版本。Bram Moolenaar在20世纪80年代末购入Amiga计算机时,Amiga上还没有最常用的编辑器vi。Bram从一个开源的vi复制Stevie开始,开发了vim的1.0版本。最初的目标只是完全复制vi的功能,当时的vim是Vi IMitation的简称。1991年vim1.14版被“Fred Fish Disk#591”这个Amiga用的免费软体集所收录。1992年1.22版本的vim被移植到了UNIX和MSDOS上。从当时开始,vim的全名就变成Vi IMproved了,在这之后Vim加入了不计其数的新功能。作为第一个里程碑的是1994年的3.0版本加入了多视窗编辑模式。从那之后,同一屏幕可以显示的vim编辑文件数就不止一个了。1996年发布的Vim 4.0是第一个利用图形接口的版本。1998年5.0版本的vim加入了语法高亮功能。2001年的vim 6.0版本加入了代码折叠、插件、多国语言支持、垂直分割视窗等功能。2006年5月发布的Vim 7.0版更加入了拼字检查、上下文相关补完、标签页编辑等新功能。现在最新的版本是2008年8月发布的vim 7.2,该版本合并了vim 7.1以来的所有修正补丁,并且加入了脚本的浮点数支持。

1.vim基本操作

vim在日常管理中工作是非常重要的,作为一个合格的Linux系统工程师熟练地使用vim是一个基本的要求。

vim新手在使用时最麻烦的就是模式,因为在使用过程中经常忘记自己处于何种模式,或无意键入某个字符后切换到其他模式。不管当前处在什么模式,按下Esc键都会切换命令模式。在一些时候需要按两次Esc键,如果vim以一声蜂鸣回答,说明已经切换到命令模式。vim包括以下几种模式(在几种模式之间切换键如图3-36所示)。

图3-36 vim模式切换

(1)命令模式。vim编辑器启动后默认处于该模式,在其他任何一个模式下,用【Esc】键或者【Ctrl+C】组合键可以切换到命令模式。

(2)插入模式。在该模式下,vim就和其他编辑一样可以输入内容。在命令模式下,使用“i”、“o”或“a”可以进行该模式。

(3)可视模式。在该模式下,可以使用方向键进行内容选择,然后进行复制、粘贴或其他操作。在命令模式下,使用“v”进入可视模式。

(4)块操作模式。在该模式下,可以使用方向键进行内容选择,选择时可模拟鼠标选择的方式。在命令模式下,使用【Ctrl+V】组合键进入本模式。

(5)修改模式。在该模式下,vim类似于在其他很多软件法用【Insert】键来完成这个切换。在命令模式下,使用R进入该模式。

(6)扩展命令模式。在该模式下,可执行一些vim的扩展命令。进入命令模式后,可以使用“:”切换到此模式。

直接在命令行输入vim即可打开该编辑器,也可以在vim后接一个文件名,如“vim/charles.txt”,如果该文件存在则直接打开该文件,如果该文件不存在vim会新建一个空白文件。

图3-37 打开文件异常

vim在编辑文件时会产生一个临时的交换文件,在退出vim时该文件会自动删除。如果文件已被另一个vim会话编辑或上一次打开后未正常退出就会出现如图3-37所示的情况。vim使用的临时交换文件是一个隐藏文件,文件名是编辑文件名后加“.swp”,如编辑的文件是/etc/test.conf,那么其临时交换文件名为/etc/.test.conf.swp。在图3-37中vim提供了以下几种操作选择。

(1)输入“o”可以只读方式打开该文件。

(2)输入“e”可正常编辑该文件,使用该方式一定要注意,最后可以确定没有其他用户正在编辑这个文件。

(3)输入“r”可以从临时交换文件中恢复,如果可以确定临时交换文件是需要的内容,可以使用此项。

(4)输入“q”可以退出编辑该文件。如果有另一个vim会话正在编辑,最好是选择退出。如果是刚刚启动vim,这个选择会同时退出vim。如果启动时打开了好几个窗口,vim只有在第一个窗口遇到这种情况时才退出;如果是在使用一个编辑命令时选择退出,该文件就不会被继续载入,系统回到此前的编辑状态。

(5)输入“a”将放弃并同时会撤销对后续命令的执行,这在执行一个Shell脚本时非常有用。

(6)输入“d”可以删除临时交换文件。

在对文件编辑完成后,如果希望关闭首先需要切换到命令模式。vim提供以下几种退出方式。

(1):q:直接退出,如果文件内容发生改变vim会提示并不允许退出。

(2):q!:强行退出,如果文件内容发生改变则不会保存。

(3):wq或:x:保存并退出。

(4):wq!或x!:强行保存并退出。强行保存一般用于编辑文件是只读的情况下,但被编辑文件的拥有者必须是当前用户。

vim的功能非常强大,可以使用的操作键也非常多,但是常用的操作键并不多,对于一般使用都只需要记住一些常用操作键的使用即可。vim的使用没有什么特别的技巧,只有多多练习才能熟练地使用。下面是各模式下一些常用的操作键。

(1)命令模式常用操作键

● G:移动到文件最后一行。

● nG:n为数字,移动到文件的第n行。

● /word:向下查找关键字word。

● ?word:向上查找关键字word。

● n:重复前一个查找。

● N:反向重复前一个查找。

● :n,$s/a/b/:替换第n行开始到最后一行中每一行的第一个a为b。

● :n,$s/a/b/g:替换第n行开始到最后一行中每一行所有a为b,n为数字,若n为.,表示从当前行开始到最后一行。

● d$:删除光标所在位置到该行最后一个字符。

● dd:剪切当前行。

● yy:复制选内容。

● nyy:复制从光标开始n行内容。

● p:将已复制的数据粘贴到光标下一行。

● P:将已复制的数据粘贴到光标上一行。

● u:复原上一个操作。

● Ctrl+R:重复前一个操作。

● o:当前下插入空行,并进入插入模式。

● O:当前上插入空行,并进入插入模式。

● .:重复前一个动作。

● i:进入插入模式,从当前光标所在处插入。

● I:插入模式,从当前行第一个非空格处插入。

● r:插入模式,替换光标所在字符。

● R:进入修改模式。

● <Esc>键:返回命令模式。

(2)扩展命令模式常用操作键

● :w:保存。

● :w!:文件为只读时强制保存,不过能否保存还要看文件权限。

● :q:离开vim。

● :q!:强制离开。

● :wq:保存后离开。

● :x:保存后离开。

● :e!:将文件恢复到原始状态。

● :w[filename]:另存为新文件。

● v:进入可视模式。

● Ctrl+V:进块操作模式。

● :r[filename]:将filename的文件读到光标的后面。

● n1,n2 w[filename]:将n1到n2另存为新文件。

● :new:新增水平窗口。

● :new filename:新增水平窗口,并在新增的窗口加载filename的文件。

● :v new新增垂直窗口。

● :v filename:新增垂直窗口,并在新增的窗口加载filename的文件。

● Ctrl+W+[方向键]:切换窗口。

● :only:仅保留目前的窗口。

● :set nu:显示行号。

● :set nonu:不显示行号。

● :set readonly:文件只读,除非使用!可写。

● :set ic:查找时忽略大小写。

● :set noic:查找时不忽略大小写。

2.vim高级操作

vim成为Linux平台主流的文本编辑器,与其丰富的功能是分不开的。vim除在上面提到的基本功能外,还有许多高级功能。下面几种就是这些高级功能中的一部分。

(1)Shell切换

在vim中进入文件编辑时,利用vim命令模式所提供的Shell切换功能,可以在不退出vim的情况下执行Linux命令。使用该功能时只需在命令模式中输入“:! <Linux命令>”,当Linux命令执行完成后按回车就回到了vim环境中,如图3-38所示。

图3-38 Shell切换

(2)分割窗口

vim可以在分割多窗口环境下同时编辑多个文件。在vim进入了多窗口后,可以使用【Ctrl+W】组合键在不同窗口之间切换。要进入vim多窗口可以使用以下两种方法。

图3-39-o进入多窗口

● 在启动vim时使用“-o”或“-O”,并加上需要同时编辑的多个文件名,其中“-o”是使用水平分割的多窗口;“-O”是使用垂直分割的多窗口。使用如下命令时,vim就进入如图3-39所示的多窗口环境。

        [root@srv ~]# vim -o /etc/fstab /boot/grub/grub.conf

● 在已经打开vim的情况下,如果希望vim进入多窗口,打开另一个文件使vim可以在命令模式下输入“:split<文件名>”(水平分割)或“:vsplit<文件名>”(垂直分割)。

(3)键映射

键映射类似就是定义一个快捷键用于执行一个宏。下面是一个键映射的简单例子,将功能键F5定义为在行尾输入分号(;),在vim命令模式下输入以下内容。

        :map <F5> i<End>;<Esc>

上述定义完成后,当在命令模式下键入功能键<F5>时,vim会依次执行输入字母“i”(进行插入模式)、按【End】键(移动到当前行尾)、输入分号、按【Esc】键(返回命令模式)。

:map定义的键映射并不是在vim的所有模式下都可用,vim还可以定义其他模式的键映射见表3-1。

表3-1 定义键映射

提示

Operator-pending模式是指已经选择了一个作为命令的操作符,如“d”,接下来vim希望继续选择一个移动命令或是一个文本对象。vim希望继续接收命令而用户又尚未选择命令的状态,如命令“dw”,其中的“w”就是在Operator-pending模式下选择的。

在各种模式下定义键映射的命令虽然不一样,但方法是完全相同的,只是在定义的时候要注意映射的执行流程。如上述定义F5的例子如果希望定义在插入模式中就不能只将“:map”改为“:imap”了,因为上述例子中的“i”是进入插入模式,而“:imap”定义的映射在使用时已经处于该模式,所以如果希望实现相同的功能就需要修改为以下方式。

        :imap <F5> <Esc>i<End>;<Esc>

大家在使用Windows平台软件时已经习惯了使用组合键,通过映射功能也可以定义组合键,如将“Ctrl+O”定义为在行尾输入分号,在vim命令模式下输入以下内容即可。

        :map <C-o> <Esc>i<End>;<Esc>

对于不需要使用的键映射可以使用如下方法删除其映射关系,不同模式删除映射关系的命令见表3-2。

        :unmap <C-o>

表3-2 删除映射关系

4)插件

vim的功能可以通过向其增加插件的方式扩展。插件就是会被vim自动载入执行的脚本。在RHEL 5.x中,把插件的脚本放入/usr/share/vim/vim70/plugin目录即可。RHEL 5.x使用的vim已经自带了很多插件。如插件gzip,使得vim可以直接打开使用gzip、bzip2及compress压缩的文件,当文件打开时被动态解压缩,并在写操作时被自动重新压缩。

正是由于vim庞大的用户群,vim的插件的种类也相当丰富。用户可以在http://www.vim.org/scripts下载各种插件。