-
概述
- VIM 宏的基本操作
-
背景
- 之前退出, 查历史记录的时候, 偶然按错
- 某些动作, 不是单纯依靠 替换操作, 就做得出来的...
-
环境
- OS
- win10
- shell
- mintty-2.9.4
1. 宏
-
概述
- 什么是宏
-
宏
-
百度百科
宏就是一些命令组织在一起,作为一个单独命令完成一个特定任务
-
我的感觉
- 操作有序集合
- 一个宏通常含有多个 顺序关联的操作
- 小规模
- 操作的数量很小
- 使用场景通常受限
- office 宏
- wow 技能宏
2. 一些操作
- 概述
- 简单聊聊基本操作
1. 宏的查看
- 概述
- 查看当前宏的情况
1. 列表查看
-
操作
# 查看
:reg
# 退出查看
键盘上任意键即可
-
reg
-
寄存器
- 可以理解位 vim 的剪贴板
- 但实际上, 它的功能还挺强大...
- 这个我后面再说吧
-
宏
-
名称
- "a 开始, "z 结束都是宏
- 后文简称 宏a 到 宏z
- 这里不区分 大小写
- 最多只能有 26 个宏
- 其他的内容, 以后再讲
-
存在
- 已经录制的宏, 是可以在列表里查看到的
- 没有录制的宏, 是不会显示的
- 同一个用户下, 不同的 vim 窗口, 宏是可以共享的
- 存在 ~/.viminfo 里
- 不建议直接修改这个文件
2. 单独查看
-
命令
: reg a
-
结果
- 如果存在, 则只显示 宏a
- 如果不存在, 则宏内容显示位空
2. 宏的录制
-
概述
- 宏的录制
- 当然最开始是没有宏的
- 所以查看不到的话, 自己录制一个就行了
-
准备
-
文本
1
2
3
4
5
-
思路
- 给每一行的数值 +1
- 我想把这个宏, 录制到 宏a 里
-
操作
- 定位到 第一行 行首
- 使用 ctrl + a, 给数值 +1
- 将光标移到第二行行首
-
其他
- vim 处于 标准模式
-
录制步骤
-
定位到 第一行 行首
-
键盘依次输入
# 成功后, 左下角会有状态变化
# 显示 记录中/Recoding @a
q
a
-
使用 ctrl + a, 给数值 +1
-
将光标移到第二行行首
-
键盘输入
# 右下角提示消逝, 录制结束
q
-
查看
-
命令
- 用 :reg 查看
-
结果
-
能找到如下记录
"a ^Aj
-
疑问
-
问题1: 进入后, 按 q 退出, 那我要是需要按 q 了, 怎么办呢?
- 解答
- 标准模式下, q 只有 开始/结束 录制的功能
- 插入模式里, 输入 q 不会导致 录制退出
-
问题2: 26 个宏如果用完了, 还想再加怎么办
- 解答
- 26 个宏, 通常是够用的
- 如果还需要加, 只有覆盖之前用过的位置了
- 所以, 录制之前一定要先确定好, 不要让之前辛苦录制的宏, 被莫名其妙的覆盖了...
-
问题3: 这个录制能暂停吗?
- 我不知道...
-
问题4: 录制宏的时候, 可以使用别的宏吗?
- 解答
- 我试了试, 目前来看 VIM 并没有禁止这种 疑似套娃 的行为
- 或者说, 宏是可以相互调用的吧...
- 没试过自制死循环...
- 甚至可以专门定义一个宏, 来按顺序执行一个 或者 多个 其他宏
3. 宏的使用 - 简单
-
概述
- 宏的简单使用
-
目的
- 让第二行的数字, 也加上个1
- 当然是用宏操作, 而不是再来一次
-
确认
- reg 里宏, 就是我们想要的内容
-
操作
-
定位到 第二行 行首
-
依次输入
@
a
-
结果
- 第二行数字变成了 3
- 光标移动到了 第三行
-
疑问
- 问题1: 后面还有三个数, 我一个一下一下 @a 也不轻松啊
- 解答
- @@ 可以重复执行之前执行过的宏
- 可以有办法一次多行执行多次
4. 宏的使用 - 进阶
- 概述
- 宏的一些 进阶用法
- 其实这些进阶, 也没进多少, 先凑合用吧
1. 多次执行
-
概述
- 尝试多次执行同一个宏
-
目的
- 将 3 到 5 行的数字都加一
-
操作
-
光标定位到 第三行
-
依次输入内容
# 用 @@ 也是可以的
3
@
a
-
结果
- 宏执行了 3 次
- 后面的三行, 都加了1
-
问题
- 问题1: 这种手操, 感觉也是有局限性的
- 解答
- 我也是这么觉得
- 但是 VIM 肯定不会让你失望的
2. EX 命令行: normal
-
概述
- EX 命令行执行操作的示例
-
操作1: 指定单行
-
命令
# 假设我们想让 当前行 执行这个宏
: normal @a
# 假设我们想让 第4行 执行这个宏
:4 normal @a
# 结果我就略了
-
解释
- normal
- 在 EX 命令行关键字
- normal 后面的内容, 会被翻译为 标准模式 下的 指令
-
操作2: 多行执行
-
命令
# 我想让 1 到 4 行执行这个宏
: 1,4 normal @a
# 结果我就略了
-
操作3: 匹配执行
-
命令
# 假设想要匹配某个 4 执行宏
# ex 的全局匹配, 本来应该先讲的, 以后补上
# 匹配到后, 光标会自动停在 4 的前面
# 感觉这个是一个很实用的操作了
: g/4/ normal @a
3. v 模式 与 EX 命令
-
概述
- v 模式下的 EX 命令
-
操作1: v 模式下执行
- 操作
-
进入 v 模式
-
选定多行
-
进入 EX 命令行
-
命令
# ‘<,‘> 是 v 模式下自带的, 没有问题
‘<,‘> normal @a
# 结果我就略了
4. 问题
- 问题1: 宏可以编辑吗
- 解答
- 可以的
5. 宏的追加
-
概述
- 宏的追加
-
命令
# 对 宏a 追加
q + A
# 没错, 是 大写的A
# 输入追加操作
# q 退出
-
问题
- 问题1: 这种编辑, 感觉还是有局限性
- 解答
- 确实, 只能通过 标准模式 下的操作, 来执行
- 如果中间或者前面出现了问题, 又得重来
- 办法还是有的
6. 宏的导入导出
-
概述
- 宏的 导入 和 导出
-
准备
- 建议把光标移动到文件的最低端
- 新建一个空行
- 光标停留在空行, 并切回 标准模式
1. reg
-
概述
- 本质是 剪贴板 的操作
- 推荐这种
-
导出
# 导出 宏a
"ap
-
导入
# 光标放在行首
"ay$
2. EX 命令
-
概述
- 使用 ex 命令行
-
导出
# 导出 宏a
# 注意留意光标位置, 会额外生成一个 空行
put a
-
导入
# 有个坑, 就是 ctrl 直接复制过去, 会变成 ^, 无法生效
# 手动按会生效, 但是感觉这没啥意义...
let @a="<宏内容>"
# 但是如果这条路走通了, 就可以利用 vimrc 了
3. 后续
-
EX 命令里的 reg
- 这玩意我之前没用过...
-
通过 vimrc 可以将我们常用的宏, 导入到 vim 中
- 一上来就能直接用了...
- 当然那个 Ctrl 的转义, 我至今没搞明白
- 想想就带感, 但是我觉得自己还得努力找找...
ps
-
ref
- 百度百科 - 宏
- VIM中的寄存器简介
- reg 的简介, 有空看看
- vim 录制宏,自动循环执行组合操作
- vim 教程网
- 一个 vim 的教程网
- 我从知乎上找进去的
- 好像是个妹子独立维护
- vimtutor
- 不愧是北航的学生, 学渣给跪了...
- Vim寄存器与宏常用命令汇总
- 讲得不错
- 原文不在了, 只有贴转载了...
-
后续
-
:reg
- 一个强大的剪贴板
-
:normal
- 这么看来的话, EX 命令行应该是可以做 vim 里几乎所有的很多操作了
- 这么说的话, 脚本化这个东西, 应该会带来很大的便利
-
map/nmap
- 这是什么玩意
VIM - 宏 - 简单使用
原文:https://www.cnblogs.com/xy14/p/12804296.html