|
最近更新日期:2009年08月20日
3. vim 的额外功能
3.1 区块选择(Visual Block) 3.2 多档案编辑 3.3 多窗口功能 3.4 vim 环境设定与记录: ~/.vimrc, ~/.viminfo 3.5 vim 常用指令示意图 大标题的图示vim 的额外功能 其实,目前大部分的 distributions 都以 vim 取代 vi 的功能了!如果你使用 vi 后,却看到画面的右下角有显示目前光标所在的行列号码,那么你的 vi 已经被 vim 所取代啰〜 为什么要用 vim 呢?因为 vim 具有颜色显示的功能,并且还支持许多的程序语法 (syntax), 因此,当你使用 vim 编辑程序时( 不论是 C 语言,还是 shell script ), 我们的 vim 将可帮你直接进行『程序除错 (debug)』的功能!真的很不赖吧!^_^ 如果你在文本模式下,输入 alias 时,出现这样的画面: [root@www ~]# alias ....其他省略.... alias vi='vim' <==重点在这行啊! 这表示当你使用 vi 这个指令时,其实就是执行 vim 啦!如果你没有这一行,那么你就必须要使用 vim filename 来启动 vim 啰!基本上, vim 的一般用法与 vi 完全一模一样〜没有不同啦!那么我们就来看看 vim 的画面是怎样啰!假设我想要编辑 /etc/man.config ,则输入『vim /etc/man.config』 vim 的图示示意
图3.0.1、 vim 的图示示意 上面是 vim 的画面示意图,在这个画面中有几点特色要说明喔:
所以,如果你向下移动到其他位置时,出现的非批注的数据就会有点像这样: vim 的图示示意
图3.0.2、 vim 的图示示意 看到了喔!除了批注之外,其他的行就会有特别的颜色显示呢!可以避免你打错字啊!而且,
最右下角的 30% 代表目前这个画面占整体档案的 30% 之意!这样瞭乎? 小标题的图示区块选择(Visual Block) 刚刚我们提到的简单的 vi 操作过程中,几乎提到的都是以行为单位的操作。那么如果我想要搞定的是一个区块范围呢? 举例来说,像底下这种格式的档案: 192.168.1.1 host1.class.net 192.168.1.2 host2.class.net 192.168.1.3 host3.class.net 192.168.1.4 host4.class.net .....中间省略...... 这个档案我将他放置到 http://cn.linux.vbird.org/linux_basic/0310vi/hosts ,你可以自行下载来看一看这个档案啊!现在我们来玩一玩这个档案吧!假设我想要将 host1, host2... 等等复制起来, 并且加到每一行的后面,亦即每一行的结果要是『 192.168.1.2 host2.class.net host2 』这样的情况时, 在传统或现代的窗口型编辑器似乎不容易达到这个需求,但是咱们的 vim 是办的到的喔!那就使用区块选择 (Visual Block) 吧!当我们按下 v 或者 V 或者 [Ctrl]+v 时, 这个时候光标移动过的地方就会开始反白,这三个按键的意义分别是: 区块选择的按键意义
v 字符选择,会将光标经过的地方反白选择!
V 行选择,会将光标经过的行反白选择!
[Ctrl]+v 区块选择,可以用长方形的方式选择资料
y 将反白的地方复制起来
d 将反白的地方删除掉
来实际进行我们需要的动作吧!就是将 host 再加到每一行的最后面,你可以这样做:
透过上述的功能,你可以复制一个区块,并且是贴在某个『区块的范围』内,而不是以行为单位来处理你的整份文件喔!
鸟哥个人是觉得这玩意儿非常的有帮助啦!至少在进行排列整齐的文本文件中复制/删除区块时,会是一个非常棒的功能!
小标题的图示多档案编辑 假设一个例子,你想要将刚刚我们的 hosts 内的 IP 复制到你的 /etc/hosts 这个档案去, 那么该如何编辑?我们知道在 vi 内可以使用 :r filename 来读入某个档案的内容, 不过,这样毕竟是将整个档案读入啊!如果我只是想要部分内容呢?呵呵!这个时候多档案同时编辑就很有用了。 我们可以使用 vim 后面同时接好几个档案来同时开启喔!相关的按键有: 多档案编辑的按键
:n 编辑下一个档案
:N 编辑上一个档案
:files 列出目前这个 vim 的开启的所有档案
在过去,鸟哥想要将 A 档案内的十条消息『移动』到 B 档案去,通常要开两个 vim 窗口来复制, 偏偏每个 vim 都是独立的,因此并没有办法在 A 档案下达『 nyy 』再跑到 B 档案去『 p 』啦! 在这种情况下最常用的方法就是透过鼠标圈选, 复制后贴上。不过这样一来还是有问题,因为鸟哥超级喜欢使用 [Tab] 按键进行编排对齐动作, 透过鼠标却会将 [Tab] 转成空格键,这样内容就不一样了!此时这个多档案编辑就派上用场了! 现在你可以做一下练习看看说!假设你要将刚刚鸟哥提供的 hosts 内的前四行 IP 数据复制到你的 /etc/hosts 档案内,那可以怎么进行呢?可以这样啊:
看到了吧?利用多档案编辑的功能,可以让你很快速的就将需要的资料复制到正确的档案内。 当然啰,这个功能也可以利用窗口接口来达到,那就是底下要提到的多窗口功能。 小标题的图示多窗口功能 在开始这个小节前,先来想象两个情况:
在一般窗口接口下的编辑软件大多有『分割窗口』或者是『冻结窗口』的功能来将一个档案分割成多个窗口的展现, 那么 vim 能不能达到这个功能啊?可以啊!但是如何分割窗口并放入档案呢? 很简单啊!在指令列模式输入『:sp {filename}』即可!那个 filename 可有可无, 如果想要在新窗口启动另一个档案,就加入档名,否则仅输入 :sp 时, 出现的则是同一个档案在两个窗口间! 让我们来测试一下,你先使用『 vim /etc/man.config 』打开这个档案,然后『 1G 』去到第一行,之后输入『 :sp 』 再次的打开这个档案一次,然后再输入『 G 』,结果会变成底下这样喔: 窗口分割的示意图
图 3.3.1、窗口分割的示意图 万一你再输入『 :sp /etc/hosts 』时,就会变成下图这样喔: 窗口分割的示意图
图 3.3.2、窗口分割的示意图 怎样?帅吧!两个档案同时在一个屏幕上面显示,你还可以利用『[ctrl]+w+↑』及『[ctrl]+w+↓』 在两个窗口之间移动呢!这样的话,复制啊、查阅啊等等的,就变的很简单啰〜 分割窗口的相关指令功能有很多,不过你只要记得这几个就好了: 多窗口情况下的按键功能
:sp [filename] 开启一个新窗口,如果有加 filename,
表示在新窗口开启一个新档案,否则表示两个窗口为同一个档案内容(同步显示)。
[ctrl]+w+ j
[ctrl]+w+↓ 按键的按法是:先按下 [ctrl] 不放, 再按下 w 后放开所有的按键,然后再按下 j (或向下箭头键),则光标可移动到下方的窗口。 [ctrl]+w+ k
[ctrl]+w+↑ 同上,不过光标移动到上面的窗口。 [ctrl]+w+ q 其实就是 :q 结束离开啦!
举例来说,如果我想要结束下方的窗口,那么利用 [ctrl]+w+↓ 移动到下方窗口后,按下 :q 即可离开,
也可以按下 [ctrl]+w+q 啊!
鸟哥第一次玩 vim 的分割窗口时,真是很高兴啊!竟然有这种功能!太棒了! ^_^ 小标题的图示vim 环境设定与记录: ~/.vimrc, ~/.viminfo 有没有发现,如果我们以 vim 软件来搜寻一个档案内部的某个字符串时,这个字符串会被反白, 而下次我们再次以 vim 编辑这个档案时,该搜寻的字符串反白情况还是存在呢!甚至于在编辑其他档案时, 如果其他档案内也存在这个字符串,哇!竟然还是主动反白耶!真神奇! 另外,当我们重复编辑同一个档案时,当第二次进入该档案时, 游标竟然就在上次离开的那一行上头呢!真是好方便啊〜但是,怎么会这样呢? 这是因为我们的 vim 会主动的将你曾经做过的行为登录下来,好让你下次可以轻松的作业啊! 那个记录动作的档案就是: ~/.viminfo !如果你曾经使用过 vim, 那你的家目录应该会存在这个档案才对。这个档案是自动产生的, 你不必自行建立。而你在 vim 里头所做过的动作,就可以在这个档案内部查询到啰〜 ^_^ 此外,每个 distributions 对 vim 的预设环境都不太相同,举例来说,某些版本在搜寻到关键词时并不会高亮度反白, 有些版本则会主动的帮你进行缩排的行为。但这些其实都可以自行设定的,那就是 vim 的环境设定啰〜 vim 的环境设定参数有很多,如果你想要知道目前的设定值,可以在一般模式时输入『 :set all 』 来查阅,不过.....设定项目实在太多了〜所以,鸟哥在这里仅列出一些平时比较常用的一些简单的设定值, 提供给你参考啊。 Tips: 所谓的缩排,就是当你按下 Enter 编辑新的一行时,光标不会在行首,而是在与上一行的第一个非空格符处对齐! 鸟哥的图示 vim 的环境设定参数
:set nu
:set nonu 就是设定与取消行号啊! :set hlsearch
:set nohlsearch hlsearch 就是 high light search(高亮度搜寻)。 这个就是设定是否将搜寻的字符串反白的设定值。默认值是 hlsearch :set autoindent
:set noautoindent 是否自动缩排?autoindent 就是自动缩排。 :set backup 是否自动储存备份档?一般是 nobackup 的,
如果设定 backup 的话,那么当你更动任何一个档案时,则源文件会被另存成一个档名为 filename~ 的档案。
举例来说,我们编辑 hosts ,设定 :set backup ,那么当更动 hosts 时,在同目录下,就会产生 hosts~
文件名的档案,记录原始的 hosts 档案内容
:set ruler 还记得我们提到的右下角的一些状态栏说明吗?
这个 ruler 就是在显示或不显示该设定值的啦!
:set showmode 这个则是,是否要显示 --INSERT--
之类的字眼在左下角的状态栏。
:set backspace=(012) 一般来说,
如果我们按下 i 进入编辑模式后,可以利用退格键 (backspace) 来删除任意字符的。
但是,某些 distribution 则不许如此。此时,我们就可以透过 backspace 来设定啰〜
当 backspace 为 2 时,就是可以删除任意值;0 或 1 时,仅可删除刚刚输入的字符,
而无法删除原本就已经存在的文字了!
:set all 显示目前所有的环境参数设定值。
:set 显示与系统默认值不同的设定参数,
一般来说就是你有自行变动过的设定参数啦!
:syntax on
:syntax off 是否依据程序相关语法显示不同颜色? 举例来说,在编辑一个纯文本档时,如果开头是以 # 开始,那么该行就会变成蓝色。 如果你懂得写程序,那么这个 :syntax on 还会主动的帮你除错呢!但是, 如果你仅是编写纯文本档案,要避免颜色对你的屏幕产生的干扰,则可以取消这个设定 。 :set bg=dark
:set bg=light 可用以显示不同的颜色色调,预设是『 light 』。如果你常常发现批注的字体深蓝色实在很不容易看, 那么这里可以设定为 dark 喔!试看看,会有不同的样式呢! 总之,这些设定值很有用处的啦!但是......我是否每次使用 vim 都要重新设定一次各个参数值? 这不太合理吧?没错啊!所以,我们可以透过配置文件来直接规定我们习惯的 vim 操作环境呢! 整体 vim 的设定值一般是放置在 /etc/vimrc 这个档案,不过,不建议你修改他! 你可以修改 ~/.vimrc 这个档案 (预设不存在,请你自行手动建立!),将你所希望的设定值写入! 举例来说,可以是这样的一个档案: [root@www ~]# vim ~/.vimrc "这个档案的双引号 (") 是批注 set hlsearch "高亮度反白 set backspace=2 "可随时用退格键删除 set autoindent "自动缩排 set ruler "可显示最后一行的状态 set showmode "左下角那一行的状态 set nu "可以在每一行的最前面显示行号啦! set bg=dark "显示不同的底色色调 syntax on "进行语法检验,颜色显示。 在这个档案中,使用『 set hlsearch 』或『 :set hlsearch 』,亦即最前面有没有冒号『 : 』效果都是一样的! 至于双引号则是批注符号!不要用错批注符号,否则每次使用 vim 时都会发生警告讯息喔! 建立好这个档案后,当你下次重新以 vim 编辑某个档案时,该档案的预设环境设定就是上头写的啰〜 这样,是否很方便你的操作啊!多多利用 vim 的环境设定功能呢!^_^ 小标题的图示vim 常用指令示意图 为了方便大家查询在不同的模式下可以使用的 vim 指令,鸟哥查询了一些 vim 与 Linux 教育训练手册, 发现底下这张图非常值得大家参考!可以更快速有效的查询到需要的功能喔!看看吧! vim 常用指令示意图
图 3.5.1 、 vim 常用指令示意图 |
本网页主要以Firefox配合解析度 1024x768 作为设计依据 鸟哥自由软件整合应用研究室