oeasy教您玩转vim - 85 - # 全局命令
"h",
"b",
"f",
"d",
"e",
"a",
"c",
]
```
- `:g/\[/+1,/\]/-1sort`
- 在这个中括号的范围内
- 排序
## 总结
- 这次研究的是global
- `:[range]global/{pattern}/{command}`
- range是执行的范围
- pattern是搜索的模式
- command执行的命令
- 命令有很多
- d 删除
- m 移动
- t 拷贝
- p 打印
- s 替换
- sort 排序
- update 更新
- global是很好用的内部命令
- vim还可以执行外部命令呢!
- 怎么玩呢?
- 下次再说!
全局命令 global
回忆
- 可以定义自己的命令
command - 也可以执行自定义的命令
- 可以修改删除命令
命令可以带上
- 参数
argument - 范围
range
- 参数
- 除了自定义命令之外
- 系统也有一些built-in的命令
- 系统有什么好玩的命令么?
global全局命令
:h global:[range]global/{pattern}/{command}range是执行的范围
:1,$
- pattern是搜索的模式
- command执行的命令

- 如果在这个范围里面
匹配这个模式
:global
或者不匹配这个模式
:g!或:v
- 就执行这个命令
- 我们来看个例子
先搜再删
- 源代码如下
const oeasy = 1;
console.log("oeasy: ", oeasy); const o2z = 2;
console.log("o2z: ", o2z); const o3z = 3;
console.log("o3z: ", o3z);
:g/console/d- 把所有带
console的行都删除
- 把所有带
:g/const/d- 把所有带
const的行都删除 - 整行删除
- 删完之后u回来
- 把所有带
:g/console/d _- 删除带
console行之后 _的意思是将结果放入黑洞寄存器
- 删除带
:g/console/d|update- 删除完成之后
|update进行保存
切换分割符
:g@console@d- 把分隔符从
/变成@`
- 把分隔符从
什么不能当分割符
- 大小写字符
- 数字
",|,\
什么可以当分隔符
:g=console=d:g?console?d
:g+//+s/oeasy/o1z/gg
- global全局命令
- 分割符
//
- 查找的模式为//
s/oeasy/o1z/g
- s的意思是subtitute
- 把这些行中的oeasy换成o1z
- 并且是global替换,全都替换
- 完成批量替换
- 把所有包含//行中,把oeasy全部替换为o1z
反转模式

:g/console/d- 把所有带
console的行都删除
- 把所有带
:v/console/d- 把所有不带
console的行都删除
- 把所有不带
:g!/console/dg!和v一样

匹配模式

- 我们猜猜下面的命令会删除那些行?
:g/o2z\|o3z/d:g/[0-9]/d或:g/\d/d
删除空行
:g/^$/d- ^$开头之后就是结束
- 没有任何字符的行
- 就delete删掉
:g/^\s*$/d^$开头结尾之间只有空格和tab- 没有任何其他字符
- 就delete删掉

配合范围range
:1,5g/console/d- 从1到5行
- 出现console的行
- 删除
:.,5g/console/d- 从当前行到第5行
:3,.g/console/d- 从3到当前行
:3g/console/d- 只搜索第3行
特定行
- . 当前行
- $ 末行
- +n 当前行之后的第n行
再来一个
const oneMillion = 1000000;
const oneThousand = 1000;
const one = 1;
:g/0\{3,6\}/d- 出现3到6个零的行
- u回来
可以把数值分别调整一下
:g/0\{4,6\}/d
执行命令command
- 除了d删除之外,还可以执行normal正常模式下命令

:g/.*/normal A;.*代表有0到任意多个非空字符- 空行
^$有0个字符也满足 normal A;每一行都在结尾加分号;
:g/./normal A;.代表有一个字符,任意字符都可以- 空行
^$一个字符都没有,不满足 - 非空行
normal A;在结尾加分号;
执行宏macro
const oeasy = 1
console.log("oeasy: ", oeasy); const o2z = 2
console.log("o2z: ", o2z); const o3z = 3
console.log("o3z: ", o3z);
qaA;<Esc>q- 定义一个宏macro叫做a
- a的功能就是A;<Esc>
- 在行尾插入分号然后退出回到正常模式
:reg a- 查看宏a
:g/const/normal @aconst- 对于可以匹配
const的行
- 对于可以匹配
normal @a- 正常模式下执行宏a
:2,$g/const/normal @a2,$- 从第2行到末行
const- 对于可以匹配
const的行
- 对于可以匹配
:normal @a- 正常模式下执行宏a
递归使用全局命令
const oeasy = 1
console.log("oeasy: ", oeasy); const o2z = 2
console.log("o2z: ", o2z); const o3z = 3
console.log("o3z: ", o3z);
:g/console/g/two/d- 先搜包含console的所有行
- 在搜索结果中搜o2z
- 找到的结果删除
- u回来
:g/console/v/two/d- 先搜包含console的所有行
- 在搜索结果中搜不包含o2z的
- 找到的结果删除
打印命令print

:g/const/p- 找到匹配
const模式的行 - 打印print
- 找到匹配

移动命令move
:g/^/m 0^行的开头,所有的行都符合,包括空行- m 移动 move
- 0 移动到第0行 最初
- 每一行都要挪到第一行
- 最后一行最后执行
- 整体就是上下颠倒
复制命令copy 或 t
const oeasy = 1
console.log("oeasy: ", oeasy);
// TODO oeasy const o2z = 2
console.log("o2z: ", o2z);
// TODO o2z const o3z = 3
console.log("o3z: ", o3z);
// TODO o3z
:g/TODO/t $- 包含TODO的行选中
- 执行t $ 拷贝到末行
:g/TODO/m 0- 把TODO行都移动到最上面
排序命令sort
const arrayA = [
"h",
"b",
"f",
"d",
"e",
"a",
"c",
]
:g/\[/+1,/\]/-1sort- 在这个中括号的范围内
- 排序
总结
- 这次研究的是global
:[range]global/{pattern}/{command}- range是执行的范围
- pattern是搜索的模式
- command执行的命令
命令有很多
- d 删除
- m 移动
- t 拷贝
- p 打印
- s 替换
- sort 排序
- update 更新
- global是很好用的内部命令
- vim还可以执行外部命令呢!
- 怎么玩呢?
- 下次再说!
oeasy教您玩转vim - 85 - # 全局命令的更多相关文章
- oeasy教您玩转vim - 56 - # 字符可视化模式
可视化编辑 回忆上节课内容 我们学习了关于模式匹配中使用参数 单个参数 :%s/<h2>\(.*\)</h2>/ - \1/g 多个参数 :%s/<img src=\ ...
- oeasy教您玩转vim - 57 - # 行可视化
可视化编辑 回忆上节课内容 上次我们了解到可视模式 其实可视化对应三种子模式 字符可视模式 v 行可视模式 大写V 块可视模式ctrl+v 我们先来了解字符可视化模式 快捷键 v 可配合各种mot ...
- oeasy教您玩转vim - 53 - # 批量替换
查找细节 回忆上节课内容 我们温习了关于搜索的相关内容 /正向,?反向 n保持方向,N改变方向 可以设置 是否忽略大写小写 是否从头开始查找 是否高亮显示 还有一些正则表达式的使用方法 行头行尾 ^$ ...
- oeasy教您玩转linux010203显示logo
我们来回顾一下 上一部分我们都讲了什么?
- oeasy 教您玩转linux010101查看内核uname
linux([?l?n?ks]) 是什么????? 咱们这次讲点什么呢?这次咱们讲讲这个 linux([?l?n?ks]),什么是 linux([?l?n?ks])呢?这linux([?l?n?ks] ...
- oeasy教您玩转linux010202软件包管理apt
顾一下 上一部分我们都讲了什么?
- oeasy教您玩转linux010201持续输出yes
我们来回顾一下 上一部分我们都讲了什么?
- oeasy教您玩转linux010108到底哪个which
到底哪个which 回忆上次内容 我们上次讲了查找命令位置whereis 我想找到whereis的位置怎么办?
- oeasy教您玩转python - 006 - # hello world
Hello World! 回忆上次内容 python3 的程序是一个 5.3M 的可执行文件 python3 里面全都是 cpu 指令 可以执行的那种指令 我们可以把指令对应的汇编找到 objdu ...
- oeasy教您玩转linux-010110内容回顾
我们来回顾一下 我们都讲了什么?
随机推荐
- 记一次 .NET某酒店后台服务 卡死分析
一:背景 1. 讲故事 停了一个月没有更新文章了,主要是忙于写 C#内功修炼系列的PPT,现在基本上接近尾声,可以回头继续更新这段时间分析dump的一些事故报告,有朋友微信上找到我,说他们的系统出现了 ...
- js 数组按指定字段转map-list结构
js 数组按指定字段转map-list结构 背景介绍 在开发过程中经常会出现接口返回整个数组,我们需要将数组进行二次处理,如下格式按照不同功能模块(type)进行数据拆分 原始数据 const lis ...
- Linux下tail -f,tail -F,tailf的区别
在Linux中,tail -f ,tail -F,tailf都是用来查看滚动日志的好方法,但是三者之间却有着细微的不同: tail -f 等同于--follow=descriptor,动态显示数据 ...
- Android 12(S) Binder(一)
今天开始了解一下binder,就先从ServiceManager开始学习. 网上的相关博文普遍是Android 11之前的,阅读时对比Android 11或12的代码发现有很多内容找不到了,比如 fr ...
- Winform程序在VS中打包成安装程序(带卸载)
场景 在VS中进行Winform开发时,可以直接在项目上右击选择生成 则会在项目的bin目录下直接生成exe等文件,此时将这个文件夹直接整个复制到别的地方就可以运行. 但是如果将其做成安装包安装的形式 ...
- C#使用WebView2替代Electron
C#想要实现Electron那样混合桌面程序可以用以下几个库.本文使用EdgeSharp NanUIgithub.com/NetDimension/NanUI Photinogithub.com/ ...
- Oracle使用序列和触发器设置自增字段
一.创建一张工作表 例: create table tv(ID NUMBER primary key,TVNAME VARCHAR(16),ISPASS NUMBER); 二.先创建一个序列 cr ...
- SQL索引优化,菜单列表优化
SQL索引优化,菜单列表优化 现象:在系统中几个数据量大的列表页面,首次进入页面未增加筛选条件,导致进入的列表查询速度非常慢.分析:通过SQL查看,是做了count求和查询,然后根据总的记录数来做分页 ...
- java8 lambda Predicate示例
import java.util.Arrays; import java.util.List; import java.util.function.Predicate; public class Pr ...
- idea为什么提示:Duplicated code fragment (**lines long)
idea为什么提示:Duplicated code fragment (**lines long) 原因是有相同的代码块在类里,可以把这部分代码封装成一个方法,提高代码可读性.