【转载】技巧:Vim 的纵向编辑模式
如果要我选一个Vim中让我觉得Life Changing功能的话,我一定会选Vim的块编辑功能,也就是Ctrl+V,虽然还有些别的编辑器也有这功能,但目前为止,我从中受益颇大
原文地址:技巧:Vim 的纵向编辑模式
Vim 的纵向编辑模式功能强大。本文介绍了 Vim 纵向编辑模式并结合 VisIncr 这个插件在开发测试场景中的应用,让读者更直观了解 Vim 的纵向编辑模式这一功能。
开始之前
人类大脑对文字的处理是平面式的,所以我们浏览文章、查找资料或者重构代码,要么是横向读,要么是纵向读,要么使用搜索功能,将文字作为一个平面整体。而在编辑文字、编写代码的时候则不是横向就是纵向。常规文本编辑器都是横向编辑,而纵向编辑也常被作为特色功能。比如 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 演示了开发、测试过程中可以使用的实例
【转载】技巧:Vim 的纵向编辑模式的更多相关文章
- 技巧:Vim 的纵向编辑模式【转】
转自:https://www.ibm.com/developerworks/cn/linux/l-cn-vimcolumn/ 张 曜民 和 卢 丹2011 年 2 月 18 日发布 WeiboGoog ...
- 技巧:Vim 的纵向编辑模式
https://www.ibm.com/developerworks/cn/linux/l-cn-vimcolumn/ 开始之前 人类大脑对文字的处理是平面式的,所以我们浏览文章.查找资料或者重构代码 ...
- 如何使用VIM的列编辑模式 [转]
如何使用VIM的列编辑模式? * windows 我使用的VIM FOR WINDOWS,一直都听说VIM有列编辑模式,一直没有使用过,试了几次都失败了.今天又因为工作需要,到网上查了一下,经过不断的 ...
- vim命令:编辑模式和命令模式
vim:编辑模式 从一般模式进入编辑模式,只需你按一个键即可(i,I,a,A,o,O,r,R).当进入编辑模式时,会在屏幕的最下一行出现“INSERT或REPLACE”的字样.从编辑模式回到一般模 ...
- VIM纵向编辑【转】
原文:https://www.ibm.com/developerworks/cn/linux/l-cn-vimcolumn/index.html Vim 的纵向编辑模式启动方便,使用灵活,还可以配合上 ...
- 5.5 进入编辑模式 5.6 vim命令模式 5.7 vim实践
5.5 进入编辑模式 5.6 vim命令模式 5.7 vim实践 进入编辑模式 小写i在当前字符前插入 大写I 在光标所在行的行首插入 大写O 在光标上面一行插入编辑 小写o在光标下面一行插入编辑 小 ...
- 转载: vim使用技巧
两篇很牛的vim使用技巧 来源: ChinaUnix博客 日期: 2009.07.06 10:18 (共有条评论) 我要评论 读本文之前请注意:1. 本文的目标是提供一些vim的使用技巧,利用 ...
- [转] vi/vim命令模式和编辑模式各种操作
摘要:vi 编辑器是最常用的文档创建和编辑工具,初学者应该学会简单应用vi ,学会在vi 中做简单的修改.删除.插入.搜索及替换作业:如果您是新手,不妨看看本文,或许这篇文档能让您在最短的时间内学会v ...
- vim 的编辑模式 命令模式
1.vim的编辑模式 进入编辑模式 按键: a i o a: 表示在光标当前的,后面开始插入,写数据 i : 则表示 前面 . o : 表面在光标当前的,下一行开始写入数据. O : 大写的 ...
随机推荐
- 谈一下Docker与Kubernetes集群的日志和日志管理
本文的测试环境为CentOS 7.3,Kubernetes集群为1.11.2,安装步骤参见kubeadm安装kubernetes V1.11.1 集群 日志对于我们管理Kubernetes集群及其上的 ...
- ASP.NET Core中使用Razor视图引擎渲染视图为字符串(转)
一.视图渲染说明 在有些项目需求上或许需要根据模板生产静态页面,那么你一样可以用Razor语法去直接解析你的页面从而把解析的页面生成静态页,这样的使用场景很多,不限于生成静态页面,视图引擎为我们提供了 ...
- Mac下的命令行自动补全功能
/usr/local/etc/bash_completion.d
- IE10、IE11使用 __doPostBack 出现未定义问题
在公司的老项目中分页控件使用了 __doPostBack 方式,在IE兼容模式下正常,在IE10.IE11中 __doPostBack 出现未定义问题. 百度查阅资料得知,这是微软NET环境下的一个B ...
- Win-Sshfs无法连ubuntu1404原因
ubunbtu 默认不允许root远程访问,设置为允许就可以了 1)vi /etc/ssh/sshd_config,将PermitRootLogin的值改成yes,并保存 PermitRootLogi ...
- swagger搭建(基于springBoot)详解
前后端分离后,api接口文档的维护就成了一个让人头疼的问题,api接口更新慢,或因开发工作量大,没时间整理文档,导致前后端分离后前端同学和后端同 学都纠结于文档的问题.而swagger的出现,不亚于一 ...
- SkinTK编译使用
简介 MFC这个东西已经落伍了,不建议使用.我就是吃饱了撑着,还在折腾这个. 平时写点带界面的小程序一般都用Qt来做,简单好用,也很容易做的比较漂亮.我觉得唯一一个算不得多大缺点的缺点就是Qt体积太大 ...
- redis-desktop-manager 的简单使用
1:安装比较简单,所有软件几乎都一样(下载.安装)我就从安装好后,怎么玩记录吧!如下图,双击对应的图标就能打开此软件了 2-1:连接redis服务器的方式之一——导入对应的redis信息 连接配置的样 ...
- Spark 论文篇-RDD:一种为内存化集群计算设计的容错抽象(中英双语)
论文内容: 待整理 参考文献: Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster C ...
- c 链表之 快慢指针 查找循环节点
参考:http://blog.csdn.net/wenqian1991/article/details/17452715 上面分析了 根据这张图 推倒出 数学公式. 刚接触 不能一下弄明白.下面结合上 ...