Quebre a sequência de desfazer no modo normal
Pergunta: Existe algo que funciona da mesma forma que i_CTRL-G_u , mas para o modo normal ?
Isso seria útil em mapeamentos (como nnoremap), porque (eu acho, mas fixme) no modo normal, se você estiver apenas digitando comandos (versus uma sequência mapeada para uma única tecla), cada comando conta como um bloco de desfazer separado.
Caso em questão: estou tentando resolver este exercício , em Learn Vimscript the Hard Way.
Foi isso que eu descobri e parece funcionar:
:nnoremap <leader>d ddi<C-G>u<esc>dd
Enquanto isso funciona, parece um pouco hackeado, entrar no modo de inserção apenas para quebrar a sequência de desfazer , então eu queria saber se é possível sem entrar no modo de inserção.
Claro, eu já tentei a seguinte variante, mas tudo o que ela faz é deletar uma única linha, então parece que a <C-G>parte meio que termina a sequência:
:nnoremap <leader>d dd<C-G>udd
Respostas
Fazer :let &ul=&ulquebra a seqüência de desfazer. Isso está documentado em :h :undojoin:
Definir o valor de 'undolevels' também interrompe o desfazer. Mesmo quando o novo valor é igual ao valor antigo.
Usando o método descrito, você pode fazer o seguinte:
nnoremap <leader>d dd:let &ul=&ul<CR>dd