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-09-08

Vim 技巧 - 重复上次的 Ex 命令

. 命令可以重复上次的普通模式命令。然而,如果想重复上次的 Ex 命令的话,我们得使用 @: 才行。知道如何回退上次的命令永远是有价值的,因此本节也会讨论这一点。

我们知道如何用 . 命令重复上次的修改。但是,. 命令不会重复由 Vim 命令行中做出的修改。作为替代,我们可以用 @: 来重复上次的 Ex 命令(参见 :h @:)。

例如,下面两条命令在遍历缓冲区列表的条目时非常有用,用 :bn[ext] 可以在列表中逐项正向移动,而 :bp[revious] 命令则进行反向移动。假设缓冲区列表中有大约十几个条目,而我们打算逐个查看每个缓冲区,因此可以输入一次下面的命令:

➾:bnext

然后再用 @: 重复执行此命令。留意一下这和运行宏的相似之处,另外也需注意,: 寄存器总是保存着最后执行的命令行命令(参见:h quote_:)。在运行过一次 @: 后,后面就可以用 @@ 命令来重复它。

假设我们按得忘乎所以,执行了太多次 @: 命令以致于错过了目标。那要怎样才能改变方向往回跳呢?当然,我们可以执行:bprevious 命令,但是想想如果以后再次执行 @: 命令会发生什么?没错,它会反向遍历缓冲区列表,恰恰与最初的方向相反。这会把人搞糊涂的。

在这种情况下,更好的选择是使用 <C-o> 命令。每次运行 :bnext 命令(或用 @: 命令重复执行它)时,它都会在跳转列表中添加一条记录,而 <C-o>命令会回到跳转列表的上条记录。

我们可以执行一次 :bnext,然后用 @: 重复任意多次;如果想往回跳,就用<C-o> 命令。这样一来,如果接下来还想继续正向遍历缓冲区列表,就可以继续用 @:命令。请牢记技巧口诀:执行、重复、回退。

Vim 为几乎所有功能都提供了相应的 Ex 命令。虽然用 @: 总是可以重复上一条 Ex 命令,但如果想回退其影响,却没有这种直截了当的方式。用本节提到的 <C-o> 命令,只能够回退 :next、:tnext 等命令的执行结果;然而对于那些用来编辑文本的 Ex 命令,则要用 u 键才能撤销其影响。

编辑 (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
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式