I frappé accidentellement Y a-t-il un moyen de p>
qq code> au lieu de @q code>, et mon VIM enregistre maintenant dans le registre q code>.
Si je tape q code> à nouveau, il écrasera la macro précédemment enregistrée. P>
3 Réponses :
Vous pouvez récupérer la macro dans un registre différent: puis la macro précédente sera stockée dans l'enregistrement A et disponible pour être exécutée sous @a code >. p> p>
Je viens de trouver une façon moins directe de faire la chose la même chose aussi, également basée sur l'observation que la macro n'est pas enregistrée tant que le second J'utilise simplement q p>. P>.
"qp code> pour coller la macro quelque part, puis utilisez " qyy code> pour y remonter après avoir annulé l'enregistrement. P>
Voici un mappage qui aborde l'enregistrement de macro actuel et restaure le contenu du registre d'origine. Il suffit d'utiliser q! Code> au lieu de q code> pour mettre fin à l'enregistrement macro. " 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>