2012-10-05 36 views
9

Tengo una función de Vimscript que se llama en BufWritePre para verificar la integridad del archivo. Por lo general, esto implica recortar el espacio en blanco y verificar que la estructura de pliegue sea "válida" (de acuerdo con las convenciones de mi empresa).Evitar que Vim actualice su árbol de deshacer

Mi problema es que si edito un archivo y luego lo guardo, el árbol de deshacer contiene las ediciones realizadas por la función de comprobación. ¿Hay una manera simple de decir que no quiero que una función modifique el árbol de deshacer? ¿O puedo guardar su estado al inicio de la función y restaurarlo al final?

Respuesta

6

Con :undojoin, puede unir sus cambios con los últimos cambios realizados por el usuario (aunque h Me resultaría más confuso que separarlos). En general, deshacer es una secuencia de pasos; no puede simplemente omitir los pasos en el medio, eso sería poco intuitivo y también difícil de implementar en el motor de deshacer.

De todos modos, ¿qué tiene de malo incluir el reformateo automático en el historial de deshacer? Según lo entiendo, se volverá a aplicar en el próximo guardado cuando el usuario deshaga sus últimas ediciones.

+0

Gracias, hacen algunos buenos puntos. Necesito repensar lo que estaba tratando de lograr. El comando 'undojoin' puede ser útil. –

3

Si su acción BufWritePre está llevando a cabo manipulaciones que en última instancia, dejan su archivo sin cambios, se puede:

:wundo <tmpfile> 

... Hacer cambios que salen de archivo de la misma después ...

:rundo <tmpfile> 

Esta voluntad le dejo con su historial de deshacer antes del cambio temporal; sin embargo, si el archivo no coincide con su estado anterior, obtendrá el error File contents changed, cannot use undo info.

Si desea hacer los cambios realizados durante el BufWritePre imposible deshacer, puede:

:set noundofile 

.. Realizar cambios ...

:set undofile 

Sin embargo, este perderá toda la historia antes del BufWritePre

+0

Esto se ve genial, gracias. ¿Por qué esto solo funciona si el archivo no se modifica? En general, el archivo cambiará, pero no quiero poder deshacer los cambios. –

+0

@PrinceGoulash ¿Desea poder deshacer los cambios antes de la acción 'BufWritePre'? – Benj

+0

Sí. Entonces, si agrego una palabra y luego la guardo, 'u' debería eliminarla, independientemente de los cambios en el espacio en blanco que haya provocado el guardado. –

Cuestiones relacionadas