如果你在文字模式下,输入 alias 时,出现这样的画面:

    这表示当你使用 vi 这个指令时,其实就是执行 vim 啦!如果你没有这一列,那么你就必须要使用 vim filename 来启动 vim 啰!基本上, vim 的一般用法与 vi 完全一模一样~没有不同啦!那么我们就来看看 vim 的画面是怎样啰!假设我想要编辑 /etc/services ,则输入“vim /etc/services”看看吧:

    图9.3.1、使用 vim 编辑系统配置文件的示范

    上面是 vim 的画面示意图,在这个画面中有几点特色要说明喔:

    • 由于 /etc/services 是系统规划的配置文件,因此 vim 会进行语法检验,所以你会看到画面中内部主要为深蓝色, 且深蓝色那一列是以注解符号 (#) 为开头;
    • 最下面一列的右边出现的 1,1 表示光标所在为第一列, 第一个字符位置之意(请看上图中的光标所在);
      所以,如果你向下移动到其他位置时,出现的非注解的数据就会有点像这样:

    使用 vim 编辑系统配置文件的示范图9.3.2、使用 vim 编辑系统配置文件的示范

    看到了喔!除了注解之外,其他的列就会有特别的颜色显示呢!可以避免你打错字啊!而且, 最右下角的 1% 代表目前这个画面占整体文件的 1% 之意!这样瞭乎?

    刚刚我们提到的简单的 vi 操作过程中,几乎提到的都是以列为单位的操作。那么如果我想要搞定的是一个区块范围呢? 举例来说,像下面这种格式的文件:

    这个文件我将他放置到 ,你可以自行下载来看一看这个文件啊!现在我们来玩一玩这个文件吧!假设我想要将 host1, host2… 等等复制起来, 并且加到每一列的后面,亦即每一列的结果要是“ 192.168.1.2 host2.class.net host2 ”这样的情况时, 在传统或现代的窗口型编辑器似乎不容易达到这个需求,但是咱们的 vim 是办的到的喔!那就使用区块选择 (Visual Block) 吧!当我们按下 v 或者 V 或者 [Ctrl]+v 时, 这个时候光标移动过的地方就会开始反白,这三个按键的意义分别是:

    来实际进行我们需要的动作吧!就是将 host 再加到每一列的最后面,你可以这样做:

    • 使用 vim hosts 来打开该文件,记得该文件请由上述的链接下载先!
    • 将光标移动到第一列的 host 那个 h 上头,然后按下 [ctrl]-v ,左下角出现区块示意字样:

    图9.3.3、vim 的区块选择、复制、贴上等功能操作

    • 将光标移动到最底部,此时光标移动过的区域会反白!如下图所示:

    vim 的区块选择、复制、贴上等操作功能图9.3.4、vim 的区块选择、复制、贴上等功能操作

    • 此时你可以按下“ y ”来进行复制,当你按下 y 之后,反白的区块就会消失不见啰!
    • 最后,将光标移动到第一列的最右边,并且再用编辑模式向右按两个空白键,回到一般指令模式后, 再按下“ p ”后,你会发现很有趣!如下图所示:

    图9.3.5、vim 的区块选择、复制、贴上等功能操作

    通过上述的功能,你可以复制一个区块,并且是贴在某个“区块的范围”内,而不是以列为单位来处理你的整份文件喔! 鸟哥个人是觉得这玩意儿非常的有帮助啦!至少在进行排列整齐的文字文件中复制/删除区块时,会是一个非常棒的功能!

    9.3.2 多文件编辑

    假设一个例子,你想要将刚刚我们的 hosts 内的 IP 复制到你的 /etc/hosts 这个文件去, 那么该如何编辑?我们知道在 vi 内可以使用 :r filename 来读入某个文件的内容, 不过,这样毕竟是将整个文件读入啊!如果我只是想要部分内容呢?呵呵!这个时候多文件同时编辑就很有用了。 我们可以使用 vim 后面同时接好几个文件来同时打开喔!相关的按键有:

    现在你可以做一下练习看看说!假设你要将刚刚鸟哥提供的 hosts 内的前四列 IP 数据复制到你的 /etc/hosts 文件内,那可以怎么进行呢?可以这样啊:

    • 通过“ vim hosts /etc/hosts ”指令来使用一个 vim 打开两个文件;

    vim 的多文件编辑中,查看同时编辑的文件数据图9.3.6、vim 的多文件编辑中,查看同时编辑的文件数据

    • 在第一列输入“ 4yy ”复制四列;
    • 在 vim 的环境下输入“ :n ”会来到第二个编辑的文件,亦即 /etc/hosts 内;
    • 在 /etc/hosts 下按“ G ”到最后一列,再输入“ p ”贴上;
    • 按下多次的“ u ”来还原原本的文件数据;
    • 最终按下“ :q ”来离开 vim 的多文件编辑吧!
      看到了吧?利用多文件编辑的功能,可以让你很快速的就将需要的数据复制到正确的文件内。 当然啰,这个功能也可以利用窗口接口来达到,那就是下面要提到的多窗口功能。

    在开始这个小节前,先来想像两个情况:

    • 当我有一个文件非常的大,我查阅到后面的数据时,想要“对照”前面的数据, 是否需要使用 [ctrl]+f 与 [ctrl]+b (或 pageup, pagedown 功能键) 来跑前跑后查阅?

    • 我有两个需要对照着看的文件,不想使用前一小节提到的多文件编辑功能;

    在一般窗口接口下的编辑软件大多有“分区窗口”或者是“冻结窗口”的功能来将一个文件分区成多个窗口的展现, 那么 vim 能不能达到这个功能啊?可以啊!但是如何分区窗口并放入文件呢? 很简单啊!在命令行界面输入“:sp {filename}”即可!那个 filename 可有可无, 如果想要在新窗口启动另一个文件,就加入文件名,否则仅输入 :sp 时, 出现的则是同一个文件在两个窗口间!

    让我们来测试一下,你先使用“ vim /etc/man_db.conf ”打开这个文件,然后“ 1G ”去到第一列,之后输入“ :sp ” 再次的打开这个文件一次,然后再输入“ G ”,结果会变成下面这样喔:

    图9.3.7、vim 的窗口分区示意图

    万一你再输入“ :sp /etc/hosts ”时,就会变成下图这样喔:

    vim 的窗口分区示意图图9.3.8、vim 的窗口分区示意图

    怎样?帅吧!两个文件同时在一个屏幕上面显示,你还可以利用“[ctrl]+w+↑”及“[ctrl]+w+↓” 在两个窗口之间移动呢!这样的话,复制啊、查阅啊等等的,就变的很简单啰~ 分区窗口的相关指令功能有很多,不过你只要记得这几个就好了:

    鸟哥第一次玩 vim 的分区窗口时,真是很高兴啊!竟然有这种功能!太棒了! ^_^

    9.3.4 vim 的挑字补全功能

    我们知道 bash 的环境下面可以按下 [tab] 按钮来达成指令/参数/文件名的补全功能,而我们也知道很多的程序编辑器,例如鸟哥用来在 windows 系统上面教网页设计、java script 等很好用的 notepad++ () 这种类的程序编辑器,都会有 (1)可以进行语法检验及 (2)可以根据扩展名来挑字的功能!这两个功能对于程序设计者来说, 是很有帮助的!毕竟偶尔某些特定的关键字老是背不起来…

    在语法检验方面,vim 已经使用颜色来达成了!这部份不用伤脑筋的!比较伤脑筋的应该是在挑字补全上面!就是上面谈到的可以根据语法来挑选可能的关键字, 包括程序语言的语法以及特定的语法关键字等等。既然 notepad ++ 都有支持了,没道理 vim 不支持吧?呵呵!没错! 是有支持的~只是你可能要多背两个组合按钮就是了!

    在鸟哥的认知中,比较有用的是第1, 3 这两个组合键,第一个组合按键中,你可能会在同一个文件里面重复出现许多相同的关键字, 那么就能够通过这个补全的功能来处理。如果你是想要使用 vim 内置的语法检验功能来处理取得关键字的补全,那么第三个项目就很有用了。 不过要注意,如果你想要使用第三个功能,就得要注意你编辑的文件的扩展名。我们下面来做个简单测试好了。

    假设你想要编写网页,正要使用到 CSS 的美化功能时,突然想到有个背景的东西要处理,但是突然忘记掉背景的 CSS 关键语法,那可以使用如下的模样来处置! 请注意,一定要使用 .html 或 .php 的扩展名,否则 vim 不会调用正确的语法检验功能喔!因此下面我们创建的文件名为 html.html 啰!

    图9.3.9、vim 的挑字补全功能

    由于网页通常会支持 CSS 的语法,而 CSS 的美化语法使用的是 style 这个关键字,这个关键字后面接的就是 CSS 的元素与元素值。 若想要取得可能的元素有哪些,例如背景 (background) 的语法中,想要了解有哪些跟它有关的内置元素,如上图, 直接输入 b 然后按下 [crtl]+x 再按下 [crtl]+o 就会出现如上的相关字词可以选择,此时你就能够使用上下按钮来挑选所需要的关键元素! 这样使用上当然方便很多啊!只是要注意,一定要使用正确的扩展名,否则会无法出现任何关键字词喔!

    有没有发现,如果我们以 vim 软件来搜寻一个文件内部的某个字串时,这个字串会被反白, 而下次我们再次以 vim 编辑这个文件时,该搜寻的字串反白情况还是存在呢!甚至于在编辑其他文件时, 如果其他文件内也存在这个字串,哇!竟然还是主动反白耶!真神奇! 另外,当我们重复编辑同一个文件时,当第二次进入该文件时, 光标竟然就在上次离开的那一列上头呢!真是好方便啊~但是,怎么会这样呢?

    这是因为我们的 vim 会主动的将你曾经做过的行为登录下来,好让你下次可以轻松的作业啊! 那个记录动作的文件就是: ~/.viminfo !如果你曾经使用过 vim, 那你的主文件夹应该会存在这个文件才对。这个文件是自动产生的, 你不必自行创建。而你在 vim 里头所做过的动作,就可以在这个文件内部查询到啰~ ^_^

    此外,每个 distributions 对 vim 的默认环境都不太相同,举例来说,某些版本在搜寻到关键字时并不会高亮度反白, 有些版本则会主动的帮你进行缩排的行为。但这些其实都可以自行设置的,那就是 vim 的环境设置啰~ vim 的环境设置参数有很多,如果你想要知道目前的设置值,可以在一般指令模式时输入“ :set all ” 来查阅,不过…..设置项目实在太多了~所以,鸟哥在这里仅列出一些平时比较常用的一些简单的设置值, 提供给你参考啊。

    鸟哥的图示

    Tips 所谓的缩排,就是当你按下 Enter 编辑新的一列时,光标不会在行首,而是在与上一列的第一个非空白字符处对齐!

    总之,这些设置值很有用处的啦!但是……我是否每次使用 vim 都要重新设置一次各个参数值? 这不太合理吧?没错啊!所以,我们可以通过配置文件来直接规定我们习惯的 vim 操作环境呢! 整体 vim 的设置值一般是放置在 /etc/vimrc 这个文件,不过,不建议你修改他! 你可以修改 ~/.vimrc 这个文件 (默认不存在,请你自行手动创建!),将你所希望的设置值写入! 举例来说,可以是这样的一个文件:

    在这个文件中,使用“ set hlsearch ”或“ :set hlsearch ”,亦即最前面有没有冒号“ : ”效果都是一样的! 至于双引号则是注解符号!不要用错注解符号,否则每次使用 vim 时都会发生警告讯息喔! 创建好这个文件后,当你下次重新以 vim 编辑某个文件时,该文件的默认环境设置就是上头写的啰~ 这样,是否很方便你的操作啊!多多利用 vim 的环境设置功能呢!^_^

    9.3.6 vim 常用指令示意图

    为了方便大家查询在不同的模式下可以使用的 vim 指令,鸟哥查询了一些 vim 与 Linux 教育训练手册, 发现下面这张图非常值得大家参考!可以更快速有效的查询到需要的功能喔!看看吧!

    图9.3.10、vim 常用指令示意图