Henry Henry
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)

Henry

小学生中的前端大佬
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)
  • 说明
  • Vim

  • VSCode

  • Chrome

  • iTerm

  • mac

  • Obsidian

  • lazygit

  • 学习双拼
  • Vim 技巧

    • Vim 技巧 - 说明
    • Vim 技巧 - 以退为进
    • Vim 技巧 - 点范式
    • Vim 技巧 - 把撤销单元切成块
    • Vim 技巧 - 构造可重复的修改
    • Vim 技巧 - 用次数做简单的算术运算
    • Vim 技巧 - 能够重复,就别用次数
    • Vim 技巧 - 在插入模式中可即时更正错误
    • Vim 技巧 - 结识插入 - 普通模式
    • Vim 技巧 - 不离开插入模式,粘贴寄存器中的文本
    • Vim 技巧 - 重复执行面向行的可视命令
    • Vim 技巧 - 只要可能,最好用操作符命令,而不是可视命令
    • Vim 技巧 - 结识 Vim 的命令行模式
    • Vim 技巧 - 在一行或多个连续行上执行命令
    • Vim 技巧 - 使用‘:t’和‘:m’命令复制和移动行
    • Vim 技巧 - 在指定范围上执行普通模式命令
    • Vim 技巧 - 重复上次的 Ex 命令
    • Vim 技巧 - 把当前单词插入到命令行
    • Vim 技巧 - 回溯历史命令
    • Vim 技巧 - 运行 Shell 命令
    • Vim 技巧 - 将工作区切分成窗
    • Vim 技巧 - 区分实际行与屏幕行
    • Vim 技巧 - 通过查找进行移动
    • Vim 技巧 - 遍历改变列表
    • Vim 技巧 - 用无名寄存器实现删除、复制与粘贴操作
    • Vim 技巧 - 深入理解 Vim 寄存器
    • Vim 技巧 - 用寄存器中的内容替换高亮选区的文本
    • Vim 技巧 - 把寄存器的内容粘贴出来
    • Vim 技巧 - 宏的读取与执行
    • Vim 技巧 - 规范光标位置、直达目标以及中止宏
    • Vim 技巧 - 加次数回放宏
    • Vim 技巧 - 在连续的文本行上重复修改
    • Vim 技巧 - 给宏追加命令
    • Vim 技巧 - 编辑宏的内容
    • Vim 技巧 - 调整查找模式的大小写敏感性
    • Vim 技巧 - 查找使用 v 或 V 模式
    • Vim 技巧 - 界定单词的边界
    • Vim 技巧 - 转义问题字符
    • Vim 技巧 - 结识查找命令
    • Vim 技巧 - 在执行查找前预览第一处匹配
    • Vim 技巧 - 将光标偏移到查找匹配的结尾
    • Vim 技巧 - 利用查找历史,迭代完成复杂的模式
    • Vim 技巧 - 结识 substitute 命令
    • Vim 技巧 - 在文件范围内查找并替换每一处匹配
    • Vim 技巧 - 手动控制每一次替换操作
    • Vim 技巧 - 重用上次的查找模式
    • Vim 技巧 - 用寄存器的内容替换
    • Vim 技巧 - 重复上一次 substitute 命令
    • Vim 技巧 - 使用子匹配重排 CSV 文件的字段
    • Vim 技巧 - 自动补全整行文本
    • Vim 技巧 - 以 g 开头的命令
    • Vim 技巧 - 以 z 开头的命令
    • Vim 技巧-ctrl 命令
    • Vim 技巧
    • 每日一 Vim 笔记
  • 键盘侠
  • Vim 技巧
Henry
2022-10-01

Vim 技巧 - 加次数回放宏

对于重复次数不多的工作,点范式是一种高效的编辑策略,但它不能指定执行的次数。为了克服该限制,我们可以录制一个简单的、一次性的宏,然后再加次数进行回放。

在技巧以退为进中,我们用点范式处理过这行文本:

现在,我们打算把它变成这个样子:

使用点范式,意味着完成这个任务只需简单地重复执行几次 ;. 命令。但如果在更大范围内遇到这种问题,该怎么办呢?

当然,我们仍然可以使用点范式,但这需要调用那么多次 ;. 命令才能完成任务,工作量似乎也不小。有什么方法能让我们用次数的方式执行呢?

人们很自然地想到 11;. 应该能完成这项工作,但实际上它不管用。因为 Vim 会先运行 11 次 ; 命令,再运行 1 次 . 命令。类似地,如果我们运行 ;11. 的话,错误会更明显,因为它会指示 Vim 先调用 1 次 ;,再调用 11 次 .。而我们的真正目的是要运行 11 次 ;.。

通过录制一个最简单的宏,我们可以模拟执行 11 次的 ;.,即 qq;.q。首先,qq 将指示 Vim 录制后续的按键操作并将它们保存至寄存器 q 中。然后,我们再输入命令 ;.。最后,我们按下 q 键结束宏的录制。现在可以加上次数 11 执行这个宏 11@q,即执行 11 次 ;.。

让我们归纳一下步骤

; 命令会重复 f+ 的查找动作。当光标移到文本行最后一个字符 + 后面时,动作命令 ; 将会执行失败,宏随即中止执行。

在本例中,我们打算将这个宏执行 10 次。但如果回放 11 次的话,最后一次执行将会被中止。换句话说,只要我们用大于或等于 10 的次数调用该宏就可以完成任务了。

谁愿意坐在那里精确计算一个宏需要被执行多少次呢?反正我不愿意。为了完成该任务,我宁愿估算一个足够大的次数。出于懒惰的缘故,我通常用 22 这个数字,因为在我的键盘上,字符 @ 与 2 在同一个键上,容易输入。

注意:不是每个宏都能用估算次数的方法调用。本例之所以可以这样,是因为该宏本身隐含了一种内置的安全捕获机制。如果在当前行找不到下一个 + 号时,; 动作命令会失败。

编辑 (opens new window)
#Vim
上次更新: 5/27/2023, 1:02:05 PM
Vim 技巧 - 规范光标位置、直达目标以及中止宏
Vim 技巧 - 在连续的文本行上重复修改

← Vim 技巧 - 规范光标位置、直达目标以及中止宏 Vim 技巧 - 在连续的文本行上重复修改→

最近更新
01
version 1.15
07-01
02
version 1.14
06-27
03
version 1.13
06-27
更多文章>
Theme by Vdoing | Copyright © 2017-2023 HenryTSZ | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式