在使用Windows的过程中,很多人已经习惯了通过图形界面修改计算机的配置、配置各种服务等操作,而在Linux中大部分的配置工作都是通过修改Linux的各种配置文件实现。修改配置文件就需要使用文件编辑器,Linux下的文件编辑器非常多,有的是在字符界面下使用,有的是在图形界面下使用。本章中主要介绍一款在图形界面下使用的文件编辑器Gedit及一款在字符界面下使用的文件编辑器vi。
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后即可以通过“ E dit”→“Preferences”→“Plugins”勾选插件。
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以来的所有修正补丁,并且加入了脚本的浮点数支持。
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:查找时不忽略大小写。
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下载各种插件。