Vim global命令和重复操作
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命令和重复操作的更多相关文章
- vim global命令
global命令格式 : [range]global/{pattern}/{command} global命令在[range]指定的文本范围内(缺省为整个文件)查找{pattern},然后对匹配到的行 ...
- vim替换命令
转载:http://blog.csdn.net/glorin/article/details/6317098 替換(substitute) :[range]s/pattern/string/[c,e, ...
- 【转】vim替换命令
vim替换命令 free:此文后面涉及了正则表达式,随便看了一下,觉得正则表达式有时间学一学对于在Linux下操作也是方便许多 替換(substitute) :[range]s/pattern/str ...
- 11.vim编辑器命令
VI中的多行删除与复制 方法一: 单行删除,:1(待删除行)d 多行删除 ,:1,10d 方法二: 光标所在行,dd 光标所在行以下的N行,Ndd 方法1: 光标放到第6行, 输入:2yy ...
- substitute 命令与 global 命令
他们是很强大的EX命令: substitute的格式: :[range]s[ubstitute]/{pattern}/{string}/{flags} 其中的patttern 指的是正则表达式的匹配: ...
- Vim常用命令总结
Vim常用命令总结: 下文是小编自己整理的关于日常linux vim编程过程中用的一些常用命令,资料参考鸟哥的 如果有需要的小伙伴可以参考一下!(底部有下载地址) 一. 一般模式可用的按钮说明 1.1 ...
- vim基础命令
2015-06-04 by komilevim基础命令 打开一个文件 vim index.php 几种模式说明Normal Mode也就是最一般的普通模式,默认进入vim之后,处于这种模式.Inser ...
- vim常用命令(iOS)
iOS下vim的使用: vim 的三种模式: .一般模式(默认) .插入模式(写文字) .命令行模式(保存) 各种模式的功能区分如下: .一般模式:控制屏幕光标的移动,字符和光标的删除,移动复制某区段 ...
- 实用手册:130+ 提高开发效率的 vim 常用命令
Vim 是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用.和 Emacs 并列成为类 Unix 系统用户最喜欢的编辑器.这里收录了130+程 ...
随机推荐
- Codeforces Round #248 (Div. 1) D - Nanami's Power Plant 最小割
D - Nanami's Power Plant 思路:类似与bzoj切糕那道题的模型.. #include<bits/stdc++.h> #define LL long long #de ...
- Just a Hook (线段树)
给你n个数(初始时每个数的值为1),m个操作,每个操作把区间[l,r]里的数更新为c,问最后这n个数的和是多少. 区域更新用懒惰标记 #include<bits/stdc++.h> usi ...
- MySQL 20个经典面试题
1.MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联: 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中: 2. 从:io线程——在 ...
- 富文本是在modal框中弹出显示的问题
记录一下,在用tinymce富文本的时候,由于是用在modal 上的,始终无法获取焦点,后来才发现问题出在tinymce在modal前创建了,所以导致这个问题,解决方案就是用 v-if="v ...
- api设计 - php 接口 token 数据加密
最近在用php写app的接口,有一些疑问 首先关于token(令牌)token是用户登录的时候生成的 用户token在服务端保存入库 客户端则缓存在本地 大部分接口都要求客户端发送token 和服务端 ...
- React Native踩坑之The SDK directory 'xxxxx' does not exist
相信和我一样,自己摸索配置环境的过程中,第一次配,很可能就遇到了这个比较简单地错误,没有配置sdk环境 解决办法 在电脑,系统环境变量中,添加一个sdk的环境变量 uploading-image-95 ...
- eclipse 背景颜色
步骤阅读 3 本例使用的背景色是喜大普奔的豆沙绿,比较柔和 设置为:色调:85.饱和度:120.亮度:208 即可,据说长时间使用可以缓解眼疲劳哦. (吐槽:开什么玩笑,远离编程才能缓解眼疲劳好吗)
- NetCore控制台实现自定义CommandLine功能
命令行科普: 例如输入: trans 123 456 789 -r 123 -r 789上面例子中:trans是Command,123 456 789是CommandArgument,-r之后的都是C ...
- jQuery中bind,live,delegate,on的区别
bind(),live()都是调用on()函数,只不过传递的参数不同. 一.$(selector).bind(event,data,fn); $('#J_btn').bind('click',func ...
- 【洛谷】4310: 绝世好题【二进制DP】
P4310 绝世好题 题目描述 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len). 输入输出格式 输入格式: 输入文件共2行 ...