假设:
https://stackoverflow.com/questions/ask
在第一个字符的正常模式下,输入qaqqaf/xb@aq@a
会清除所有正斜杠。
但是运行normal qaqqaf/xb@aq@a
在b之后停止 - 它似乎在递归调用时保释。如果您尝试使用map命令,也会发生同样的情况。
我的语法有问题吗?或者用normal
记录递归宏是不可能的?
注意:我知道可以使用let
编写递归宏。我想知道这是否是编写递归宏而不手动记录的唯一方法:
let @a = "f/xb@a"
normal @a
(因为这个答案我问:Remove everything except regex match in Vim)
答案 0 :(得分:2)
如果你想创建一个递归宏的地图,我建议你先做这样的事情:
nmap <f2> :let @a = "f/xb@a"|normal @a
当然这会破坏@a注册,如果你发现自己做了很多这类映射,那么函数可能更适合你的需求。
这是制作递归宏映射的更安全的替代方法:
function! RecMacroExe(cmds)
let a = @a
let @a = a:cmds . "@a"
try
normal @a
finally
let @a = a
endtry
endfunction
nmap <f2> :call RecMacroExe("f/xb")<cr>
编辑:根据@Luc Hermitte评论
更改了功能