vimamp;amp;gvim技巧大全.pdf

  1. 1、本文档共481页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
vimamp;amp;gvim技巧大全.pdf

vim gvim 技巧大全 标 题: global 命令详解 global 命令是Vim 最强大的命令之一 (个人认为是No.1),将其摸透用熟可以事 半功倍。本文总结了网上的一些经典问题,结合自己的使用和理解,试图通过 实例详细介绍一下其用法。示例难度不一,有些并没有多少实用性,为题而生, 读者各取所需吧。示例说明并不非常细致,以免罗唆。每节标题下列出了所 及的内容在Vim help 中的位置,以供查找。文中用词未必标准,观点也难免有 错,请大家指正! 1. global 命令形式 :h :g :h 12.4 :[range]global/ {pattern }/ {command } global 命令在[range]指定的文本范围内 (缺省为整个文件)查找{pattern} ,然后 对匹配到的行执行命令{command} ,如果希望对没匹配上的行执行命令,则使用 global!或vglobal 命令。 先来看Vim 用户手册里的一个经典例子。 【例1】倒序文件行 (即unix 下的tac 命令) :g/^/m 0 这条命令用行首标记/^/匹配文件的所有行(这是查找的一个常用技巧,如果用/./ 则是匹配非空行,不满足本例要求),然后用move 命令依次将每行移到第一行 (第0 行的下一行),从而实现了倒序功能。 global 命令实际上是分成两步执行:首先扫描[range]指定范围内的所有行,给匹 配{pattern} 的行打上标记;然后依次对打有标记的行执行{command}命令,如果 被标记的行在对之前匹配行的命令操作中被删除、移动或合并,则其标记自动 消 ,而不对该行执行{command}命令。标记的概念很重要,以例说明。 【例2 】删除偶数行 :g/^/+ 1 d 这条命令也是匹配所有行,然后隔行删除(其中+1 用以定位于当前行的下一行)。 为什么是隔行呢?因为在对第一行执行+ 1 d 命令时删除的是第二行,而第二行 虽然也被标记了,但已不存在了,因此不会执行删除第三行的命令。 本例也可以用normal 命令实现: :%norm j dd %指定整个文件,然后依次执行普通模式下的jdd ,即下移删除一行。 global 命令不同之处在于,%norm 是按照行号顺序执行,在第一行时删除了第二行, 后面的所有行号都减一,因此在第二行执行jdd 时删除的是原来的第四行。也就 是说,global 命令是通过偶数行标记的消 实现的,而normal 命令是通过后续 行的自动前移实现的。 【例3 】删除奇数行 :g/^/d|m. 光是:g/^/d 显然不行,这会删除所有行,我们需要用move 命令把偶数行的标记 去掉。当然,本例可以很简单的转换成【例2 】,在此只是用来强调标记的概念。 本例若想用 normal 命令实现比较有意思,%norm dd 也同样会删除整个文件, %norm jkdd 就可以,我不知道两者为什么不同,可能和normal 命令内部的运行 机制有关。 2. global substitute :h 10.4 :helpg ms-word\c 不少vimmer 觉得这两个命令差不多,的确,它们的形式很相似,都是要进行查 找匹配,只不过substitute 执行的是替换而global 执行的其它命令(当然,substitute 缺省的[range]是当前行,这点也不同)。先看两个例子,体会一下:s 和:g 不同的 思维方式。 【例4 】double 所有行 :%s/.*/\r/ :g/^/t. substitue 是查找任意行,然后替换为两行夹回车;global 是将每一行复制 (:t 就 是:copy )到自己下面,更加清晰明了。 【例5 】把以回车排版、以空行分段的文本变成以回车分段的文本 很多txt 格式的ebook,以及像vim help 这样的文本,每行的字 数受限,段之 间用空行分隔。若把它们拷贝到word 里,那些硬回车和空行就比较讨厌了,虽 然word 里也有自动调整格式的功能,不过在Vim 里搞定更是小菜一碟。先看看 用替换如何实现。 :s/\n\n\@!/ / \n\n\@!是查找后面不跟回车的回车 (关于\@!的用法请:h /\@!,在此不多说了), 然后替换为空格,也就是去掉用于排版的回车。global 命令则完全是另一种思路。 :g/./,/^$/j /./标

您可能关注的文档

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档