Como faço para refazer (ou seja, "desfazer desfazer") no Vim?


697

No Vim, eu desfiz muitas coisas. Como desfazer isso (ou seja, refazer)?


106
como eu já colecionei 2 votos, acho que isso pertence aqui, pois o vim é o editor de um programador.
22139 flybywire

28
Eu concordo, isso é relacionado à programação e é uma pergunta real.
DigitalRoss

41
Alguém por aqui anda por aí e marca todas as perguntas do Vim como "pertencem ao SU", apesar de a comunidade ter decidido há muito tempo que o Vim pertence ao SO, sendo uma ferramenta de programação.
22430 Brian Carper

@ Brian: Você tem um link para o documento em que esse consenso foi alcançado?
demasiado php

12
meta.stackexchange.com/questions/20251/…, mas eu lembro disso chegando no ano passado. Vim / Emacs são IDEs. Além disso, as linguagens usadas nos arquivos de configuração para ambas são linguagens de script completas de Turing, portanto, o ato de configurar o Vim é, por si só, uma programação.
22430 Brian Carper

Respostas:


907

Ctrl+r


2
Gostaria apenas de lançar o plugin undoTree por aí, super impressionante para as vezes em que você aparentemente se ferrou com uma enxurrada de desfazer e refazer.
Vendedores Jake

3
Se estou lendo sobre o vi, então meus dedos agem por conta própria. Os comandos vi não funcionam no stackoverflow. :-)
ciscogambo

2
Nota para usuários de Mac: Ctrl + r em um terminal Mac estragará seu dia no vim. Não conheço a combinação adequada de teclas no terminal Mac para desfazer, mas definitivamente NÃO é Ctrl + r!
Novidade

@tpartee Acabei de usar Ctrl + r no vim no aplicativo Terminal do macOS - sem problemas aqui.
Jase

3
Talvez @tpartee significasse bagunçar as Cmd + rcoisas? Certamente faz algo estranho; mas Ctrl + rapenas funcionou bem para mim (Mac + tmux + vim)
dwanderson

133

Verifique também :undolist, que oferece vários caminhos ao longo do histórico de desfazer. Isso é útil se você digitar algo acidentalmente depois de desfazer muito.


22
@amindfv: pegue o número de :undoliste digite :undo 178(digamos) para retroceder para a etapa 178.
Peter

existe alguma maneira de mostrar exatamente o que será desfeito :undolist?
precisa saber é o seguinte

2
@csharpfolk Use o plug-in undotree ( github.com/mbbill/undotree )

54

Use :earlier/ :later. Para refazer tudo o que você precisa fazer

later 9999999d

(supondo que você editado pela primeira vez o arquivo, no máximo 9999999 dias atrás), ou, se você se lembrar a diferença entre estado atual desfazer e precisava de um, uso Nh, Nmou Nspor horas, minutos e segundos, respectivamente. + :later N<CR><=> Ng+e :later Nfpara gravações de arquivo.


1
:latertrabalhou para mim em vi(não vim - procurou por "vi" no google, mas todos os resultados são para "vim"), obrigado!
Luc

@ Luc Em quase todos os lugares onde você vicomanda, há um link simbólico para um executável do vim ou uma cópia dele. Não completamente em toda parte embora.
Zyx

@ZyX Eu gostaria que isso fosse verdade. Eu só uso o vi após o bash lança a vim: command not found. A próxima coisa que faço é alias vim=viporque eu o digito automaticamente, mas, mesmo assim, é o velho e simples vi. Além disso, refazer (ctrl + r) teria funcionado corretamente se vi fosse um alias para o vim.
Luc

2
9999999d é 27395 anos atrás. Presumo que o recurso desfazer não foi implementado no vi naquela época. Você pode economizar um esforço exaustivo de digitação e usar um número razoável. O 9999d corresponde a cerca de 27 anos, 999d a 2,7 anos. Eu acho que na maioria dos casos isso é suficiente ...
ChristophK

45

Documentação do Vim

<Undo>      or                  *undo* *<Undo>* *u*
u           Undo [count] changes.  {Vi: only one level}

                            *:u* *:un* *:undo*
:u[ndo]         Undo one change.  {Vi: only one level}

                            *CTRL-R*
CTRL-R          Redo [count] changes which were undone.  {Vi: redraw screen}

                            *:red* *:redo* *redo*
:red[o]         Redo one change which was undone.  {Vi: no redo}

                            *U*
U           Undo all latest changes on one line.  {Vi: while not
            moved off of it}


14

Primeiro, pressione a Esctecla para sair do modo de edição.

Então,

Para desfazer , use a utecla quantas vezes quiser desfazer.

Para refazer , use a tecla Ctrl+r


11

Consulte a parte "desfazer" e "refazer" do documento Vim .

: red [o] (refazer uma alteração desfeita) e {count} Ctrl+ r(refazer {contagem} alterações desfeitas) estão ok.

Além disso, o {count} anterior (vá para o estado do texto mais antigo {count} vezes) sempre pode ser um substituto para desfazer e refazer.


5

CTRL+r

O "r" é minúsculo.


9
Na verdade, isso não deveria importar - os consoles tradicionais não fazem distinção entre ^re ^R, e Vim segue isso.
ephemient

@ ephemient: concordou. No MS-DOS, você não pode nem digitar uma letra minúscula ^X(onde Xpode haver qualquer letra).
usar o seguinte código

No Vim, Ctrl-shift-R (ctrl com R maiúsculo) é o modo de substituição.
Paul Stelian

5

Usando o VsVim para Visual Studio?

Me deparei com isso ao experimentar o VsVim, que fornece ligações para comandos do Vim no Visual Studio .

Eu sei sobre Ctrlr próprio Vim, mas essa ligação específica não funciona no VsVim (pelo menos não na minha instalação?).

O que funciona, no entanto, é o comando :red. Isso é um pouco mais complicado do que o descrito acima, mas ainda é bom quando você realmente precisa.


Voto negativo porque a pergunta está perguntando especificamente sobre o vim, não o Visual Studio.
John Von Neumann

3
@JohnVonNeumann Isso está relacionado ao Vim, ou pelo menos às ligações do vim, apenas no contexto do VS. Foi isso que me levou a essa pergunta, afinal. Punir alguém por adicionar um pouco mais de informação parece um pouco duro e desnecessário, você não acha, mesmo que isso talvez se expanda um pouco além do escopo do OP?
Kjartan #

2

Na prática, :undolisté difícil usar o Vim :earliere o :latercontrole de tempo das alterações, que só podem ser utilizados para correções de grãos do curso.

Dado isso, recorro a um plug-in que combina esses recursos para fornecer uma árvore visual de desfazer navegáveis, chamada "Gundo".

Obviamente, isso é algo a ser usado somente quando você precisar de uma correção refinada ou não tiver certeza do estado exato do documento ao qual deseja retornar. Veja: Gundo. Faça um gráfico da sua árvore de desfazer do Vim com estilo

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.