当前位置:操作系统 > Unix/Linux >>

神奇的VIM

当今世界,文本编辑器种类繁多,大有"乱花渐欲迷人眼"之势。中国有句古语:手巧不如家什妙,作为IT业的专业人士,选择一款优秀的编辑软件至关重要。笔者认为:LINUX下的VIM※以其强大的功能和无穷的魅力将使您终生受益。

  由于被广泛移植,无论是PC机的DOS和WINDOWS,还是RISC/6000的AIX,乃至于IBM的大型机S/390,都能见到VIM的身影。然而,对于初学者,VIM的用户界面与使用方法非常不符合常规,甚至认为它比较混乱,无所适从。事实上,VIM编辑器是专门为经验丰富的用户设计的,它的界面和使用方法提供了更快的速度和更强的功能。对于熟知它的用户,VIM的许多特性节省了时间和击键次数,并可以完成一些其他编辑器无法完成的功能。

  学习的最好方法是实践,唯有如此,才能真正掌握其中的精髓。文中列举的实例,都是笔者在实际工作中遇到的,具有一定的代表性,请大家在阅读的过程中仔细体会。

  好了,现在让我们共同畅游神奇的VIM的世界!

  例一、两个常用的指令序列

  1. xp 左右交换光标处两字符的位置。

  2. ddp 上下交换光标处两行的位置。

  例二、重复输入同一字符

  有时,我们可能想多次输入同一字符,VIM的插入功能可以很好的完成这项工作

  命令 80i=^ESC 一次可以输入80个字符= ,当然,80a=^ESC 也可以完成上述功能。

  请注意:此处的^ESC表示键盘左上方上的ESC键。

  例三、将两个文本数据文件按行逐条合并,并给出标尺

  数据文件1内容如下:

  1-----

  2-----

  3-----

  数据文件2内容如下:

  1=====

  2=====

  3=====

  要求的结果如下:

  |--------1---------2---------3---------4---------5

  1-----

  1=====

  |--------1---------2---------3---------4---------5

  2-----

  2=====

  |--------1---------2---------3---------4---------5

  3-----

  3=====

  也许您会说,这还不简单,无非是反复拷贝、粘贴,任何一款文本编辑器都能完成上述功能。可是,如果这两个文件都很大,每个文件都成千上万行,恐怕简单的拷贝、粘贴就难以胜任了。因此,我们所关心的,是找到一种行之有效的方法,把枯燥乏味的工作留给计算机,我们只需发布指令。为达到此目的,请按以下步骤执行:

  ㈠、将两文件合并,结果如下

  1-----

  2-----

  3-----

  1=====

  2=====

  3=====

  ㈡、在两文件头尾相接的地方插入标志行,用以区分两个文件,本文采用的是一整行!字符

  1-----

  2-----

  3-----

  !!!!!!!!!!!!!!!!!!!!!!!!

  1=====

  2=====

  3=====

  ㈢、在标志行的下方输入标尺

  1-----

  2-----

  3-----

  !!!!!!!!!!!!!!!!!!!!!!!!

  |--------1---------2---------3---------4---------5

  1=====

  2=====

  3=====

  ㈣、执行宏命令脚本merge_2r.vim,即在VIM编辑器中按如下键 :so merge_2r.vim 回车

  ㈤、按下键盘上的=键,执行的结果如下

  |--------1---------2---------3---------4---------5

  1-----

  1=====

  |--------1---------2---------3---------4---------5

  2-----

  2=====

  |--------1---------2---------3---------4---------5

  3-----

  3=====

  |--------1---------2---------3---------4---------5

  !!!!!!!!!!!!!!!!!!!!!!!!

  |--------1---------2---------3---------4---------5

  ㈥、将最后三行删除,即可得到我们需要的结果

  |--------1---------2---------3---------4---------5

  1-----

  1=====

  |--------1---------2---------3---------4---------5

  2-----

  2=====

  |--------1---------2---------3---------4---------5

  3-----

  3=====

  怎么样,简单吗?请大家自己实际尝试一下。下面,我来详细讲解宏命令脚本merge_2r.vim 。

  该脚本内容如下:

  "--------------------------------------------------------------------

  "Macro Function : Merge File1 And File2,Have Ruler in every record

  " Date : 2001/12/01

  " Author : Yan Shi

  "--------------------------------------------------------------------

  "1-----

  "2----- } Sample File1

  "3-----

  "!!!!!!!!!!!!!!!!!!!!!!!! Flag Row

  "|--------1---------2---------3---------4---------5 Ruler

  "1=====

  "2===== } Sample File2

  "3=====

  "--------------------------------------------------------------------

  :1

  :map = ma/!!!!!^M+:.co 'a-1^M/!!!!!^M2+:.m'a^M+=

  前14行每行都以"开始,表明该行是注释行,实际并不执行,只是方便读者阅读,只有最后两行才是真正的代码行。请注意:本例中的^M表示键盘上的回车键,并非^和M两个字符。为了讲述清楚,我把命令行分解开,逐一说明。

  首先将第一行置为当前行,然后执行map命令,将一大串VIM指令映像给字符=。这一大串VIM指令共分9步执行:

  1.

  ma 将数据文件一的第一行标记为a

  1-----

  2-----

  3-----

  !!!!!!!!!!!!!!!!!!!!!!!!

  |--------1---------2---------3---------4---------5

  1=====

  2=====

  3=====

  2.

  /!!!!!^M 找到标志行,置为当前行

  1-----

  2-----

  3-----

  !!!!!!!!!!!!!!!!!!!!!!!!

  |--------1---------2---------3---------4---------5

  1=====

  2=====

  3=====

  3.

  + 光标下移一行,即把标尺行置为当前行

  1-----

  2-----

  3-----

  !!!!!!!!!!!!!!!!!!!!!!!!

  |--------1---------2---------3---------4---------5

  1=====

  2=====

  3=====

  4.

  :.co 'a-1^M 把标尺行复制到标记行(数据文件一的第一行)的上方

  |--------1---------2---------3---------4---------5

  1-----

  2-----

  3-----

  !!!!!!!!!!!!!!!!!!!!!!!!

  |--------1---------2---------3---------4---------5

  1=====

  2=====

  3=====

  5.

  /!!!!!^M 再次找到标志行,置为当前行

  |--------1---------2---------3---------4---------5

  1-----

  2-----

  3-----

  !!!!!!!!!!!!!!!!!!!!!!!!

  |--------1---------2---------3---------4---------5

  1=====

  2=====

  3=====

  6.

  2+ 光标下移2行,即数据文件二的第一行置为当前行

  |--------1---------2---------3---------4---------5

  1-----

  2-----

  3-----

  !!!!!!!!!!!!!!!!!!!!!!!!

  |--------1---------2---------3---------4---------5

  1=====

  2=====

  3=====

  7.

  :.m'a^M 把数据文件二的第一行移至标记行的下方

  |--------1---------2---------3---------4---------5

  1-----

  1=====

  2-----

  3-----

  !!!!!!!!!!!!!!!!!!!!!!!!

  |--------1---------2---------3---------4---------5

  2=====

  3=====

  8.

  + 光标下移一行,即数据文件一的第二行置为当前行

  |--------1---------2---------3---------4---------5

  1-----

  1=====

  2-----

  3-----
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,