¿Cómo hago rehacer (es decir, "deshacer deshacer") en Vim?


697

En Vim, hice demasiado deshacer. ¿Cómo deshago esto (es decir, rehacer)?


106
Como ya obtuve 2 votos cercanos, creo que esto pertenece aquí ya que vim es el editor de un programador.
flybywire

28
Estoy de acuerdo, esto está relacionado con la programación y es una pregunta real.
DigitalRoss

41
Alguien por aquí da vueltas y marca cada pregunta de Vim como "pertenece a SU" a pesar de que la comunidad ha decidido hace mucho tiempo que Vim pertenece a SO, ya que es una herramienta de programación.
Brian Carper el

@Brian: ¿Tiene un enlace al documento donde se alcanzó este consenso?
demasiado php

12
meta.stackexchange.com/questions/20251/… pero recuerdo que esto surgió el año pasado en algún momento. Vim / Emacs son IDEs. Además, los idiomas utilizados en los archivos de configuración para ambos son lenguajes de secuencias de comandos completos de Turing, por lo que el acto de configurar Vim es, en sí mismo, la programación.
Brian Carper el

Respuestas:


907

Ctrl+r


2
Solo me gustaría lanzar el complemento undoTree, súper increíble para las veces que aparentemente te has jodido con una ráfaga de deshacer y rehacer.
Jake Sellers

3
Si estoy leyendo sobre vi, entonces mis dedos solo actúan por su cuenta. Los comandos vi no funcionan en stackoverflow. :-)
ciscogambo

2
Nota para los usuarios de Mac: Ctrl + r en un terminal Mac arruinará tu día en vim. No sé la combinación de teclas adecuada en la terminal de Mac para deshacer, ¡pero definitivamente NO es Ctrl + r!
tpartee el

@tpartee Acabo de usar Ctrl + r en vim en la aplicación Terminal de macOS, no hay problemas aquí.
Jase el

3
¿Tal vez @tpartee quiso decir Cmd + rcosas desordenadas? Ciertamente hace algo raro; pero Ctrl + rfuncionó bien para mí (Mac + tmux + vim)
dwanderson

133

También echa un vistazo :undolist, que ofrece múltiples rutas a través del historial de deshacer. Esto es útil si accidentalmente escribe algo después de deshacer demasiado.


22
@amindfv: tome el número :undolisty escriba :undo 178(digamos) para retroceder al paso 178.
Peter

¿Hay alguna manera de mostrar en qué se deshará exactamente :undolist?
csharpfolk

2
@csharpfolk Use el complemento undotree ( github.com/mbbill/undotree )

54

Use :earlier/ :later. Para rehacer todo lo que necesitas hacer

later 9999999d

(suponiendo que editó el archivo por primera vez hace 9999999 días como máximo) o, si recuerda la diferencia entre el estado de deshacer actual y el que necesitaba, use Nh, Nmo Nsdurante horas, minutos y segundos respectivamente. + :later N<CR><=> Ng+y :later Nfpara escrituras de archivos.


1
:laterfuncionó para mí en vi(no vim - busqué "vi" en google pero todos los resultados son para "vim"), ¡gracias!
Luc

@Luc Casi en todas partes donde tiene el vicomando es un enlace simbólico a un ejecutable vim o una copia del mismo. Aunque no completamente en todas partes.
ZyX

@ZyX Ojalá fuera cierto. Solo uso vi después de bash throws a vim: command not found. Lo siguiente que hago es alias vim=viporque lo escribo tan automáticamente, pero de todos modos es el viejo vi simple. Además, redo (ctrl + r) habría funcionado correctamente si vi hubiera sido un alias para vim.
Luc

2
9999999d es hace 27395 años. Supongo que la función de deshacer no se implementó en vi en ese entonces. Es posible que desee ahorrarse un esfuerzo de mecanografía exhaustivo y utilizar un número razonable. 9999d corresponde a unos 27 años, 999d a 2,7 años. Supongo que en la mayoría de los casos es suficiente ...
ChristophK

45

Documentación 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

Primero presione la Esctecla para salir del modo de edición.

Entonces,

Para deshacer , use la utecla tantas veces como desee deshacer.

Para rehacer , use la tecla Ctrl+r


11

Consulte la parte "deshacer" y "rehacer" del documento de Vim .

: rojo [o] (Rehacer un cambio que se deshizo) y {count} Ctrl+ r(Rehacer {count} cambios que se deshicieron) están bien.

Además, el : {count} anterior (ir al estado de texto anterior {count} veces) siempre podría ser un sustituto de deshacer y rehacer.


5

CTRL+r

La "r" es minúscula.


99
En realidad, no debería importar: las consolas tradicionales no tienen distinción entre ^ry ^R, y Vim sigue eso.
ephemient

@ephemient: de acuerdo. En MS-DOS, ni siquiera puede escribir una letra minúscula ^X(donde Xpuede haber cualquier letra).
nyuszika7h

En Vim, Ctrl-shift-R (ctrl con R mayúscula) es el modo de reemplazo.
Paul Stelian

5

¿Usa VsVim para Visual Studio?

Encontré esto al experimentar con VsVim, que proporciona enlaces para los comandos de Vim en Visual Studio .

Lo sé Ctrlren Vim, pero este enlace en particular no funciona en VsVim (¿al menos no en mi configuración?).

Lo que hace el trabajo sin embargo, es el comando :red. Esto es un poco más complicado que lo anterior, pero aún está bien cuando realmente lo necesita.


Votado negativamente porque la pregunta es específicamente sobre vim, no sobre Visual Studio.
John Von Neumann el

3
@JohnVonNeumann Esto está relacionado con Vim, o al menos los enlaces de vim, solo en el contexto de VS. Eso es lo que me trajo a esta pregunta, después de todo. Castigar a alguien por agregar un poco más de información parece un poco duro e innecesario, ¿no crees, incluso si tal vez se expande un poco más allá del alcance del OP?
Kjartán el

2

Hablando en términos prácticos, :undolistes difícil de usar y el seguimiento de cambios de Vim :earliery el :latertiempo solo se puede usar para arreglos generales .

Dado eso, recurro a un complemento que combina estas características para proporcionar un árbol visual de deshacer navegable, llamado "Gundo".

Obviamente, esto es algo para usar solo cuando necesita una solución detallada, o no está seguro del estado exacto del documento al que desea regresar. Ver: Gundo. Grafica tu árbol de deshacer Vim con estilo

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.