【发布时间】:2011-10-02 09:58:47
【问题描述】:
执行. 会重复上一次更改。执行2. 将最后一次更改重复两次。
但想象一下,我想在最后一个之前重复更改。我如何在 Vim 中做到这一点?
【问题讨论】:
-
这似乎是一个非常棒的功能。 (vim.org/sponsor/vote_results.php);我想要像事后宏录制一样的“时间机器”
执行. 会重复上一次更改。执行2. 将最后一次更改重复两次。
但想象一下,我想在最后一个之前重复更改。我如何在 Vim 中做到这一点?
【问题讨论】:
不要认为你可以,见:help . 但是,你可以做的是录制一个宏来进行编辑,你有很多寄存器可供选择{0-9a-zA-Z"}(大写附加)。
然后使用例如@u 用于编辑 1,@t 用于编辑 2,依此类推。
关于从Best of VIM Tips录制的重要提示
" Recording (BEST TIP of ALL)
qq # record to q
your complex series of commands
q # end recording
@q to execute
@@ to Repeat
5@@ to Repeat 5 times
qQ@qq : Make an existing recording q recursive *N*
" editing a register/recording
"qp :display contents of register q (normal mode)
<ctrl-R>q :display contents of register q (insert mode)
" you can now see recording contents, edit as required
"qdd :put changed contacts back into q
@q :execute recording/register q
查看这些以获得更多重复提示:
:& last substitute
:%& last substitute every line
:%&gic last substitute every line confirm
g% normal mode repeat last substitute
g& last substitute on all lines
@@ last recording
@: last command-mode command
:!! last :! command
:~ last substitute
:help repeating
【讨论】:
. 命令简洁,简洁;对于宏需要更多击键而不是手动重做最后两个操作的小情况非常有用。虽然这是一个很好的答案,但它还没有被标记为正确。
我写了the RepeatLast.vim plugin 来解决这个确切的要求。它提供了5\. 键绑定以重复最后 5 次更改(包括移动)和2\D 以删除/忘记最后 2 次操作。
它通过始终启用宏录制来工作,这可能并不适合所有人。但如果你能接受,它适用于 99% 的用例。
最新版本:https://github.com/joeytwiddle/RepeatLast.vim(请反馈!)
注意事项:
请
:set ch=2,这样第一行输出就不会被“录音”消息隐藏。1% 的时间无法按预期工作通常是由于:
- 难以缓慢触发 CursorHold 事件而不会丢失 快速重复的击键
- [Space] 和 用户响应提示时的 [Enter] 键。
从长远来看,训练您的 q 肌肉以先发制人地录制宏可能是更好的方法。 ;-)
【讨论】:
根据 Fredrick Phil 的回答,这里有一个例子:
录制宏
下面展示了如何录制一个宏来删除所有包含在引号中的字符串,并存储在寄存器d中。删除字符串的命令是da"。因此,要将这个命令存储在宏寄存器 d 中,我们可以简单地这样做:
qdda"q
注意它以 q 开头和结尾。第二个字符是寄存器,在这种情况下d 用于删除。但我们可以给它任何字母或数字。其余字符da" 是我们的命令。
使用我们的宏
现在我们的宏被记录下来了,我们可以使用@符号和寄存器来调用它:
@d
重复上一个宏命令
再次使用最近调用的宏命令:
@@
无关信息:
在这个例子中,我们使用了da",它代表delete a quoted string。 (如果您想删除所有inside 引用的字符串,而不是引号本身,则可以改用di"。)。
【讨论】:
是的!你可以在 vim 中做到这一点! ?
Vim 最有用的功能之一是它能够记录您键入的内容以供以后回放。这对于使用 无法轻松完成的重复作业非常有用。
开始录制
停止录制
播放您的击键/录音
参考文献
【讨论】: