Vim global命令和重复操作

Vim global命令和重复操作

vim.ink

不是女神的女汉子

?关注她

8 人赞了该文章

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实用教程》第二版。

原文地址:https://www.cnblogs.com/timxgb/p/10422347.html

时间: 2024-10-09 02:28:02

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

vim global命令

global命令格式 : [range]global/{pattern}/{command} global命令在[range]指定的文本范围内(缺省为整个文件)查找{pattern},然后对匹配到的行执行命令{command},如果希望对没匹配上的行执行命令,则使用global!或vglobal命令. 一些例子: 1) 删除包含某字段(例如aaa)的行 :g/aaa/d 2) 删除不包含某字段(例如aaa)的行 :g!/aaa/d 3) 删除指定的行: :x,.d  #从x行删除到当前行: :.

substitute 命令与 global 命令

他们是很强大的EX命令: substitute的格式: :[range]s[ubstitute]/{pattern}/{string}/{flags} 其中的patttern 指的是正则表达式的匹配: flags:为标志位: 注意: 1.  所以呢,在缺省情况下,substitute命令仅仅作用于当前行, 而且只会修改第一处匹配: 2. 第二点: 当查找留空时,VIM 会重用上次的查找模式:所以,可以分开写成的下面的形式: :/{pattern} :[range]s[ubstitute]//{s

vim常用命令总结

vim常用命令总结 (转) 在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行.你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format.使用gg=G可对整篇代码进行排版.   vim 选择文本,删除,复制,粘贴   文本的选择,对于编辑器来说,是很基本的东西,也经常被用到,总结如下: v    从光标当前位置开始,光标所经过的地方会被选中,再按一下v结束. V    从光标当前行开始,光标经过的行都会被选中

vim相关命令单独记载

1. 无敌的可扩展性 1.1 可扩展性给了软件强大的生命 曾几何时,Windows用户对软件的可扩展性没有概念,他们只能对他们使用的软件进行非常有限的定制.扩展软件的权利保留在软件开发者手中.软件的使用者如果想要新的功能和特性,只能等待软件的升级.有能力的用户等不及了,为了添加自己想要的功能,从0开始写了一款新的软件.就这样,新的功能意味着新的软件,Windows下的软件前赴后继,迅速地更新换代着.因此, Windows下的软件都很短命. Emacs和Vim没有被时代淘汰,反而越发强大,也正是因

Vim 替换命令

一,":substitute"的使用 :substitute 命令可以对一个指定范围的区域执行替换操作,可以简写为:s ,它的通用形式如下: :[range]substitute/from/to/[flags] 该命令是有[range]指定范围中字符串"from"替换为"to"; 例如文本的每一行中第一次出现"linux"替换为"FreeBSD": :%s/linux/FreeBSD/ 注意:这里最后面没有

Vim 常用命令 一

今天第一次学习了 Vim编辑器的一些使用  拿出来和大家分享下. 1.首先 列出 常用快捷键 u 表示 撤销上一步 x 表示 删除光标位内容 dd 表示 删除光标所在行内容 >G   表示 光标所在行 增加缩进 .       表示 重复执行上一步操作 a      表示  在光标后插入内容 A      表示  在光标所在行最后插入内容 $ 表示  快速将光标移动到当千行最后 Vim 常用命令 一,布布扣,bubuko.com

VIM常用命令——快速入门,行走江湖

VIM详细命令有很多,我们选用一些常用的入门命令,足以对付日常的代码编辑工作了,如果日后有需要使用其他命令,再来查询也不迟. vim一般有3种编辑模式,分别是插入模式,正常模式(normal mode),末行模式. 以下主要是在正常模式下的操作,其他模式操作会注明相关模式 1.1  移动光标 h------>每次按下向左移动 j------>每次按下向下移动 k------>每次按下向上移动 l------>每次按下向右移动 1.2  vim的进入和退出 按<Esc>键

Linux vim 常用命令

命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filename 打开vim并创建名为filename的文件 文件命令 打开单个文件 vim file 同时打开多个文件 vim file1 file2 file3 ... 在vim窗口中打开一个新文件 :open file 在新窗口中打开文件 :split file 切换到下一个文件 :bn 切换到上一个文件 :bp 查看当

Unix Linux vi vim 使用手册|vi vim 常用命令 详解

Unix Linux vi vim 使用手册 Vi 简介 Vi 是 Unix 世界里极为普遍的全萤幕文书编辑器,几乎可以说任何一台 Unix 机器都 会提供这套软体.Linux 当然也有,它的 vi 其实是 elvis(版权问题),不过它们都 差不多.熟悉 DOS 下的文书处理後,也许会感到 vi 并不好用:Unix 上也已经发展出 许多更新.更好用的文书编辑器,但是并不一定每一台 Unix 机器上都会安装这些额外 的软体.所以,学习 vi 的基本操作还是有好处,让你在各个不同的机器上得心应手.