Vim global命令和重复操作

Vim global命令允许我们在某个指定模式的所有匹配行上运行可执行的 Ex 命令,缩写形式为 :g,其处理重复工作的效率极高。

一、Vim global命令介绍

Vim global命令形式为 :[range]g[lobal][!]/{pattern}/[cmd],用于指示Vim在 [range] 界定范围内对 (不) 匹配模式 {pattern} 的文本行执行 Ex 命令 [cmd]。

range 表示操作范围,Vim :global 命令的默认作用范围是整个文件 (用%表示)

! 表示反转 :global 命令的行为,将在没有匹配到指定模式的行上执行 [cmd]

pattern 指定 :global 命令要匹配的目标模式,若将该域留空,Vim会自动使用当前(最近一次)的查找模式

cmd 除 :global 命令之外的任何 Ex 命令,Vim缺省使用 :print 命令 (缩写 :p)

二、Vim global命令使用技巧

2.1 删除所有包含模式的文本行

假设有以下一段html代码,每列表项均由主题的标题及其URL两部分数据构成,我们将利用一条 :global 命令分别取出这两组数据。

<ol>
    <li>
        <a href="/episodes/show-invisibles/" >
            Show invisibles
        </a>
    </li>
    <li>
        <a href="/episodes/tabs-and-spaces/" >
            Tabs and Spaces
        </a>
    </li>
    <li>
        <a href="/episodes/whitespace-preferences-and-filetypes/" >
            Whitespace preferences and filetypes
        </a>
    </li>
</ol>

如果想保留 <a> 标签内的标题内容而把其他行删掉,该怎么做?

首先,使用vim的搜索命令 /\v\<\/?\w+> 先匹配左尖括号 (\<),再匹配可选的正斜杠 (\/?),再匹配一个或多个单词型字符(\w+),最后匹配分隔符 (>),从而匹配到所有html标签。\v 表示使用正则表达式的 very magic 模式。

然后,在Vim命令行模式下使用global命令 :g//d 删除所有包含html标签的行。由于 :g//d 命令没有指定命令要匹配的目标模式,因此将默认使用上一次用到的搜索目标 /\v\<\/?\w+>

最后,为了删除剩余行所有行首的多余空格,可以使用Vim替换命令 :%s/^ *//

上述的Vim教程视频如下图所示。

如果想只包含 URL 的文本行,该如何操作?

在vim命令行模式下使用Vim命令 :v/href/d 可实现只保存包含 URL的所有文本行。

如前面所介绍,:vglobal 或简写的 :v命令用于执行与 :g 命令完全相反的操作,:v/href/d 表示在指定模式 href 的非匹配行上执行 d操作。

同样地,为了删除行首的多余空格,可以用vim替换命令 :%s/^ *// 实现。对应vim视频教程如下图所示。

彩蛋:如果想删除vim当前打开文件中的所有空白行,可使用vim命令 :g/^\s*$/d 实现。

PS: 文章首发于我的个人博客:Vim global命令和重复操作-Vim入门教程(31),主要内容参考自《Vim实用教程》第二版。

Vim global命令和重复操作的更多相关文章

  1. vim global命令

    global命令格式 : [range]global/{pattern}/{command} global命令在[range]指定的文本范围内(缺省为整个文件)查找{pattern},然后对匹配到的行 ...

  2. vim替换命令

    转载:http://blog.csdn.net/glorin/article/details/6317098 替換(substitute) :[range]s/pattern/string/[c,e, ...

  3. 【转】vim替换命令

    vim替换命令 free:此文后面涉及了正则表达式,随便看了一下,觉得正则表达式有时间学一学对于在Linux下操作也是方便许多 替換(substitute) :[range]s/pattern/str ...

  4. 11.vim编辑器命令

    VI中的多行删除与复制   方法一: 单行删除,:1(待删除行)d 多行删除 ,:1,10d   方法二: 光标所在行,dd 光标所在行以下的N行,Ndd   方法1: 光标放到第6行, 输入:2yy ...

  5. substitute 命令与 global 命令

    他们是很强大的EX命令: substitute的格式: :[range]s[ubstitute]/{pattern}/{string}/{flags} 其中的patttern 指的是正则表达式的匹配: ...

  6. Vim常用命令总结

    Vim常用命令总结: 下文是小编自己整理的关于日常linux vim编程过程中用的一些常用命令,资料参考鸟哥的 如果有需要的小伙伴可以参考一下!(底部有下载地址) 一. 一般模式可用的按钮说明 1.1 ...

  7. vim基础命令

    2015-06-04 by komilevim基础命令 打开一个文件 vim index.php 几种模式说明Normal Mode也就是最一般的普通模式,默认进入vim之后,处于这种模式.Inser ...

  8. vim常用命令(iOS)

    iOS下vim的使用: vim 的三种模式: .一般模式(默认) .插入模式(写文字) .命令行模式(保存) 各种模式的功能区分如下: .一般模式:控制屏幕光标的移动,字符和光标的删除,移动复制某区段 ...

  9. 实用手册:130+ 提高开发效率的 vim 常用命令

    Vim 是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用.和 Emacs 并列成为类 Unix 系统用户最喜欢的编辑器.这里收录了130+程 ...

随机推荐

  1. Web Api之Cors跨域以及其他跨域方式(三)

    我们知道ajax不能跨域访问,但是有时我们确实需要跨域访问获取数据,所以JSONP就此诞生了,其本质使用的是Script标签,除JSONP以外还有另外实现跨域方式 一.手动实现JSONP跨域 1.首先 ...

  2. React + Reflux 渲染性能优化原理

    作者:ManfredHu 链接:http://www.manfredhu.com/2016/11/08/23-reactRenderingPrinciple 声明:版权所有,转载请保留本段信息,否则请 ...

  3. O(n log log n)实现FGT和FLT(Fast GCD/LCM Transformation)

    本文是作者看不懂分治FFT之后开始娱乐一下自己写的 看到一道题时候询问了正解后,推出了一个奇怪的变换,发现这个很Transformation,我和正解推出来的奇怪的东西是一样的,但还是想写一下思路.. ...

  4. SIlkTest入门

    http://bbs.51testing.com/thread-983434-1-1.html

  5. vue.js 是如何做到数据响应的

    许多前端JavaScript框架(例如Angular,React和Vue)都有自己的数据相应引擎.通过了解相应性及其工作原理,您可以提高开发技能并更有效地使用JavaScript框架.在视频和下面的文 ...

  6. 百道CTF刷题记录(一)

    简介 最近在刷CTF题,主攻Web,兼职Misc Shiyanbar 0x01 简单的登陆题 简单概括: 考点: %00截断正则 CBC字节翻转攻击 难度: 难 WP:https://blog.csd ...

  7. 深入解释yield和Generators

    生成器和yield关键字可能是Python里面最强大的最难理解的概念之一(或许没有之一), 但是并不妨碍yield成为Python里面最强大的关键字,对于初学者来讲确实非常难于理解,来看一篇关于yie ...

  8. bzoj 2011

    决策单调性,对于一个1D/1D(状态是一维,转移也是一维)的DP,如果DP的决策具有单调性,那么就可以做到O(nlogn)的复杂度完成DP. 感谢<1D/1D  动态规划优化初步>的作者. ...

  9. django官方文档读书笔记

    写在前面:这算是第二次读英文原文文档,第一次是读scrapy,感觉还是要做笔记,好记性不如烂笔头,现在已经忘了scrapy文档讲了什么了,心疼.以后要多读多写 经过半年的基础学习(懒,拖延)终于来到w ...

  10. Ajax提交进度显示实例

    概述:ajax提交比较大的文件的时候,我们希望能够看到它上传的进度,代码放下面了. <!DOCTYPE html> <html> <head> <meta c ...