我不小心点击qq
而不是@q
,而我的vim现在正在注册q
。
如果我再次输入q
,它将覆盖以前录制的宏。
有没有办法
答案 0 :(得分:7)
您可以将宏备份到另一个寄存器中:
:let @a=@q
然后,前一个宏将存储在寄存器a中,并可以@a
运行。
答案 1 :(得分:2)
我刚刚发现了一种不太直接的做同样事情的方法,也是基于观察到直到第二个q
才记录宏。
我只是使用"qp
将宏粘贴到某处,然后在我取消录制后使用"qyy
将其重新拉回来。
答案 2 :(得分:0)
这是一个映射,用于中止当前宏记录并恢复原始寄存器内容。只需使用q!
代替q
即可结束宏录制。
" q! Abort macro recording without changing the current one.
function! s:AbortMacroRecording()
" We don't know which register is being recorded, so save them all and find
" the one by comparing all values.
let l:registers = split('abcdefghijklmnopqrstuvwxyz', '\zs')
let l:savedRegisters = map(copy(l:registers), 'getreg(v:val)')
" Abort macro recording.
normal! q
for l:idx in range(len(l:registers))
let l:reg = l:registers[l:idx]
let l:contents = l:savedRegisters[l:idx]
if getreg(l:reg) !=# l:contents
call setreg(l:reg, l:contents)
echo printf('Aborted recording into register %s; macro is: %s', l:reg, strtrans(l:contents))
return
endif
endfor
echomsg "Couldn't detect recorded register"
endfunction
nnoremap <silent> q! :<C-u>call <SID>AbortMacroRecording()<CR>