跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

技巧:Vim 的纵向编辑模式

张 曜民, 软件工程师, IBM
张曜民是一名软件工程师,目前从事数据中心解决方案的前期研究工作。在这之前,张从事过软件开发,软件测试,并创办过机械工厂及商务咨询公司。张业余时间喜欢阅读、烹饪、太极拳。
卢 丹, 软件工程师, IBM
卢丹,IBM CDL 软件工程师,所在团队目前从事 WAS CE/Apache Geronimo 产品相关的开发及测试工作。活跃于 Apache 开源社区。

简介: Vim 的纵向编辑模式功能强大。本文介绍了 Vim 纵向编辑模式并结合 VisIncr 这个插件在开发测试场景中的应用,让读者更直观了解 Vim 的纵向编辑模式这一功能。

发布日期: 2011 年 2 月 18 日
级别: 初级
访问情况 : 11629 次浏览
评论: 


开始之前

人类大脑对文字的处理是平面式的,所以我们浏览文章、查找资料或者重构代码,要么是横向读,要么是纵向读,要么使用搜索功能,将文字作为一个平面整体。而在编辑文字、编写代码的时候则不是横向就是纵向。常规文本编辑器都是横向编辑,而纵向编辑也常被作为特色功能。比如 Vim、EditPlus、UltraEdit 这些编辑器都有纵向编辑模式,或者称为列模式。像日常文字处理工具 MicroSoft Word、OpenOffice Writer 也可以通过按下功能键 ALT,实现纵向选中文本,然后对文本进行操作。纵向编辑不仅是编辑器的一种功能,更是人们思考问题的一种方式,项目符号、段落编号,都是纵向编辑的体现。

Vim 的纵向编辑模式启动方便,使用灵活,还可以配合上插件实现很实用的高级功能。


启动方法

在 Vim 命令模式下,移动游标定位于某一个位置,键入 ctrl-v后状态栏上出现 VISUAL BLOCK 字样,即进入纵向编辑模式。移动游标以按需选择待编辑的区域。注意:在 Windows 版本的 Vim 中,键组合 ctrl-v通常被映射为文本粘贴,所以 Window 版的 Vim 的纵向编辑模式由 ctrl-q启动。当然灵活的 Vim 也可以由用户自行定义组合键。


示例 1:纵向编辑在批量修改代码的应用演示

将数列:

 10.1.5.214 
 10.1.5.212 
 10.1.5.210 

编辑成序列:

 ping -c 4 10.5.5.214 >> result0 
 ping -c 4 10.5.5.212 >> result0 
 ping -c 4 10.5.5.210 >> result0 

这是一个将 IP 数列修改成可执行的 ping 命令序列的过程。

第一步:修改

将 IP 数列中第二段所有数字“1” 修改为“5”:

将游标定位第一个行 IP 地址第二段的“1”

ctrl-v 进入纵向编辑模式

G 移动游标到最后一行,可视块覆盖所要修改的列

r 进入修改模式

5 输入数字“5”

ESC 退出纵向编辑模式,同时所有被选中的数字都被改成了“5”,并回到命令模式

结果如下:

 10.5.5.214 
 10.5.5.212 
 10.5.5.210 

第二步:前添加

在所有行之前添加“ping – c 4 ”:

将游标定位到第一行第一列

ctrl-v 进入纵向编辑模式

G 移动游标到最后一行第一列,可视块覆盖了第一列

I 进入行首插入模式

ping -c 4 输入所要求字符“ping – c 4 ”

ESC 退出纵向编辑模式的同时所有选中的字符前都添加了“ping – c 4 ”,回到命令模式

结果如下:

 ping -c 4 10.5.5.214 
 ping -c 4 10.5.5.212 
 ping -c 4 10.5.5.210 

第三步:后添加

在所有行之后添加“>> result0”:

将游标定位到第一行最后一列

ctrl-v 进入纵向编辑模式

G 移动游标到最后一行最后一列,VISUAL   BLOCK  覆盖了最后一列

A 进入行尾插入模式

>> result 输入所要求字符“>> result0”

ESC 退出纵向编辑模式的同时所有选中的字符后都添加了“ >> result0”,回到命令模式

结果如下:

 ping -c 4 10.5.5.214 >> result0 
 ping -c 4 10.5.5.212 >> result0 
 ping -c 4 10.5.5.210 >> result0 

以上三个步骤有一个共同特点,就是都纵向为编辑方向。以上由三行代码为例的方法同样也可以适用于更多的行。


VisIncr 安装与操作

以上例子中所演示的对代码的纵向编辑,通过一般的代码重构功能或者结合正则表达式的查找替换也可以实现。然而 Vim 的纵向编辑模式还可以通过插件 VisIncr 的扩展,实现更丰富的功能,如纵向的生成数列。

Vim 的官方网站上搜索找到 VisIncr 插件的安装文件,并下载到 Vim 工作目录。执行以下命令即可安装该插件:

 vim visincr.vba.gz 
 :so % 
 :q 

操作方法以示例 1 的代码为例:

使用 ctrl-v和移动光标选择最后都为数字“0”的一列

:键入冒号触发 Vim 进入命令行模式

:I以第一个数字为出发点,纵向生成增量数列,幅度为 1

ENTER 键入驾车键执行命令

结果如下:

 ping -c 4 10.5.5.214 >> result0 
 ping -c 4 10.5.5.212 >> result1 
 ping -c 4 10.5.5.210 >> result2 


示例 2:VisIncr 在生成测试数据的应用演示

在应用程序开发过程中经常要生成一个简单有规律的测试数据。比如对一张表:

 testTable (”ipaddr” ,”filename”, ”owner”) 

生成如下 SQL 语句:

 insert into test values("10.5.5.214”,”result0”,”testa”); 
 insert into test values(”10.5.5.212”,”result1”,”testb”); 
 insert into test values(”10.5.5.210”,”result2”,”testc”); 

这个纵向有规律的语句序列,可以借助 VinIncr 应用纵向编辑功能来构造。

第一步:准备

打开一个新的 Vim 编辑页面,在命令模式下先输入一个“3”,然后键入“i”进入编辑模式。数字“3”代表本次输入的内容会重复输 3 遍。

在 VIM 中先输入第一行:

 insert into test values(”10.5.5.214”,”result0”,”testa”); 

以回车结束行输入并新开一行,按 ESC 键退出编辑模式。

如果如下:

 insert into test values(”10.5.5.214”,”result0”,”testa”); 
 insert into test values(”10.5.5.214”,”result0”,”testa”); 
 insert into test values(”10.5.5.214”,”result0”,”testa”); 

第二步:构造递减数列

对于 ipaddr 列,使用 ctrl-v和移动光标选择 IP 地址最后一段以 2 为幅度递减的部分:

: 键入冒号触发 Vim 进入命令行模式

:I - 2 以第一个数字为出发点,纵向生成递减数列,幅度为 2

ENTER 键入驾车键执行命令

结果如下:

 insert into test values(”10.5.5.214”,”result0”,”testa”); 
 insert into test values(”10.5.5.212”,”result0”,”testa”); 
 insert into test values(”10.5.5.210”,”result0”,”testa”); 

第三步:构造递增数列

对于 filename 列,使用上一节介绍的方式,结果如下:

 insert into test values(”10.5.5.214”,”result0”,”testa”); 
 insert into test values(”10.5.5.212”,”result1”,”testa”); 
 insert into test values(”10.5.5.210”,”result2”,”testa”); 

第四步:构造字母递增数列

对于 owner 列,使用 ctrl-v和移动光标选择英文字母将要递增的部分。

: 键入冒号触发 Vim 进入命令行模式

:IA 以第一个字母为出发点,纵向生成按字母表排序的序列

ENTER 键入回车键执行命令

结果如下:

 insert into test values(”10.5.5.214”,”result0”,”testa”); 
 insert into test values(”10.5.5.212”,”result1”,”testb”); 
 insert into test values(”10.5.5.210”,”result2”,”testc”); 

以上步骤即演示了借助 Vim 插件 VisIncr 对代码的纵向编辑,生成在纵向有逻辑规律的数列。


总结

Vim 不仅是一个编辑工具还是一套思考方法,Vim 有很多引导思维方向的技巧,让 Vim 在这个各种编辑器层出不穷的时候历久弥新。本文从纵向编辑为切入点,结合 VisIncr 演示了开发、测试过程中可以使用的实例。


参考资料

学习

讨论

作者简介

张曜民是一名软件工程师,目前从事数据中心解决方案的前期研究工作。在这之前,张从事过软件开发,软件测试,并创办过机械工厂及商务咨询公司。张业余时间喜欢阅读、烹饪、太极拳。

卢丹,IBM CDL 软件工程师,所在团队目前从事 WAS CE/Apache Geronimo 产品相关的开发及测试工作。活跃于 Apache 开源社区。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux
ArticleID=627583
ArticleTitle=技巧:Vim 的纵向编辑模式
publish-date=02182011
author1-email=mcuallen@gmail.com
author1-email-cc=
author2-email=ludanld@cn.ibm.com
author2-email-cc=

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。