2012-05-23 19 views
8

En vim, me gustaría deshacer a través todos los cambios en todos los tampones, en orden cronológico.vim - deshacer en todos los tampones/ventanas/abrir archivos etc

por ejemplo, en una sesión de vim normalmente tengo muchas pestañas abiertas, con muchas ventanas en cada pestaña. Usando u para deshacer (o g;/g, para moverse a través de la lista de cambios), vim se mueve a través de los cambios realizados en ese buffer, incluso si hay cambios realizados más recientes en otros almacenamientos intermedios. (Lo cual admito, es lo que quiero la mayoría del tiempo.)

¿Pero hay una forma de retroceder a través de los cambios en todos los buffers en orden cronológico? (Imagino que vim saltaba de una pestaña a otra, lo que estaría bien.)

¿Por qué sería útil? ... sobre todo cuando reanudo la codificación después de un descanso, puedo recordarme a mí mismo "dónde estoy haciendo", es decir, todos los cambios que hice la última vez.

(Usando MacVim 7.3)

ACTUALIZACIÓN: respuestas sobre el uso de git/mercurial hacer buenos puntos (gracias sobre todo para git stash), pero todavía me iba a encontrar esta característica muy útil, ya que me da un paso atrás a través de los cambios recientes, en orden, con coloreado de sintaxis, dentro de vim etc.)

+5

Argumentaría que los registros de confirmación son mejores indicadores de progreso que cualquier otra cosa. Incluso si tiene cambios sin terminar, es posible agregar un mensaje a 'git stash'. – derekerdmann

+0

FTR Estoy de acuerdo con el sentimiento general aquí: use VCS. Mejor aún, ¡use DVCS y microcommit! – sehe

+0

Otro caso de uso: Acabo de pasar 5 minutos refactorizando demasiado agresivamente. Ahora un montón de pruebas unitarias están fallando y no tengo idea de lo que rompí. Quiero deshacer hasta que las pruebas pasen nuevamente. Sí, si pensé en verificar el control de la versión antes de refactorizar, hubiera estado bien, pero no pensé en eso. – alexanderbird

Respuesta

4

Se podía recorrido un largo camino con undolist:

:bufdo echo expand('%') | undolist 

Resultados en, por ejemplo, por una simple sesión de edición:

SpiritParser.cpp 
number changes when    saved 
    1  1 13:57:51 
SpiritParser.h 
number changes when    saved 
    1  1 13:57:55 

Para hacer esto para todas las ventanas visibles, hacer windo en lugar de bufdo. Si tiene varias pestañas, haga que

:tabdo windo echo expand('%') | undolist 
1

usted debe estar utilizando algún tipo de control de versiones: Git, Mercurial, subversión, lo que sea ...

Cada mañana se puede leer el registro de su proyecto y pasar por compromete anteriores para ver qué cambió, puede crear ramas para trabajar en características específicas, escribe un mensaje de compromiso descriptivo y limpio para comprender mejor sus cambios previos, etc.

O podría hacer algo como :windo u. Pero eso suena desordenado.

Cuestiones relacionadas