全局命令 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/g
-
g
- global 全局命令
-
-
- 宰割符
-
-
//
- 查找的模式为 //
-
s/oeasy/o1z/g
- s 的意思是 subtitute
- 把这些行中的 oeasy 换成 o1z
- 并且是 global 替换,全都替换
- 实现批量替换
- 把所有蕴含 // 行中,把 oeasy 全副替换为 o1z
-
反转模式
-
:g/console/d
- 把所有带
console
的行都删除
- 把所有带
-
:v/console/d
- 把所有不带
console
的行都删除
- 把所有不带
-
:g!/console/d
g!
和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 @a
-
const
- 对于能够匹配
const
的行
- 对于能够匹配
-
normal @a
- 失常模式下执行宏 a
-
-
:2,$g/const/normal @a
-
2,$
- 从第 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 还能够执行外部命令呢!
- 怎么玩呢?🤔
- 下次再说!