Desfazer no modo de inserção

23

Existe um comando para desfazer a última operação executada no modo de inserção?

Acabei de colar o texto do registro errado usando <C-r>e tenho duas opções:

  1. Exclua manualmente o que acabei de colar e comece novamente.
  2. Mude para o modo normal, pressione ue perca o texto que digitei antes de bater <C-r>.

Existe uma maneira melhor?

zool
fonte

Respostas:

16

O Vim oferece uma capacidade limitada de especificar o escopo de uma alteração que pode ser desfeita com o Ctrl-G ucomando, que interrompe a sequência de desfazer. Vejo

:help i_CTRL-G_u

No seu caso, a solução seria remapear <C-R>assim:

:inoremap <C-R> <C-G>u<C-R>

A digitação <C-O>udesfará apenas as alterações feitas desde que você digitou <C-R>. Vejo

:help i_CTRL-O
garyjohn
fonte
1
Isso é brilhante, eu não sabia sobre esse comando. Há um longo atraso entre digitar <C-O>ue ver o resultado na tela (cerca de 4 segundos), alguma idéia de como eu poderia me livrar disso?
Zool
Eu notei isso também. Eu não sei; Vou tentar descobrir.
precisa saber é o seguinte
Olá, é possível que você quis dizer <CR> (retorno de carro) em vez de <CR> (ctrl-r)?
Derwent
Não. A pergunta original tinha a ver com o comportamento de <CR>, e é isso que o mapeamento usa. No entanto, você pode substituir <CR> por <CR> nesse mapeamento para que a sequência de desfazer seja interrompida por um <CR>. Mais exemplos podem ser encontrados em :help i_CTRL-G_u.
garyjohn
6

No modo de inserção:

  1. Se o texto colado for menor que uma linha (que é o que o seu segundo ponto implica), basta pressionar <C-u>para remover todos os caracteres antes do cursor na linha atual.

  2. Se o texto colado é mais do que uma linha, o seu 2º solução poderia funcionar melhor, adaptado da seguinte forma: <C-o>u.

Os dois pontos acima iniciarão e permanecerão - ou terminarão - no modo de inserção; eles são realmente os mesmos com as soluções propostas, apenas diminuídas :)

VanLaser
fonte
6

Você pode tentar <C-w>(excluir uma palavra à esquerda) ou <C-u>(limpar caracteres antes do cursor quando pressionado uma vez, exclui quebra de linha quando pressionado uma segunda vez). Veja :help i_CTRL-We :help i_CTRL-U.

Se você cola muito em um registro, é claro que é mais rápido desfazer suas alterações, você pode usar o modo de inserção normal <C-o>para isso (execute um comando no modo normal e volte ao modo de inserção).

Em geral, é útil dividir suas edições em pedaços pequenos, muitas vezes voltando ao modo normal, para que você tenha possibilidades de desfazer refinadas.

cbaumhardt
fonte