Cuando editamos un archivo, generalmente hacemos muchas UNDO seguidas, por ejemplo, 20 veces. En VIM, eso generalmente se realiza presionando u
20 veces, y eso hace que VIM "suba" en la pila de historial 20 posiciones. Si luego se asegura change
, todos los últimos 20 comandos del historial se pierden y se reemplazan por change
. Me gustaría hacer change
sin perder esas 20 posiciones. Así que supongo que me gustaría decirle a VIM que deje de grabar el historial antes de hacerlo change
y que reanude el historial después (no quiero change
en el historial).
EDITAR
Tratando de ser más claro: tengo una función FF
que actualiza las últimas líneas de un archivo cuando se escribe el búfer. Entonces, si realizo 20 undos + write
, el último write
abre una nueva rama de deshacer. Intenté agregar undojoin
dentro FF
(tratando de seguir una sugerencia de jlmg a continuación), pero una secuencia write-undo-write da un error: undojoint no está permitido después de deshacer . En cambio, podría hacer algo sed ....
después de irme vim
, pero como uso esto SSH
prefiero una solución solo vim (ejecutar un comando después de descargar el búfer no escribe en el archivo).
EDITAR 2 Intente hacer esto en VIM: abra un archivo en blanco y haga:
i1<ESC>:wa2<ESC>:wa3<ESC>:wa4<ESC>uu:w
Si ahora hace un <CTRL>R
, VIM escribirá el '3' de regreso, más <CTRL>R
obtendrá el 4
. Esto sucede INCLUSO si haces un :w
después de cada uno <CTRL>R
. Sin embargo, si cada vez que realiza una :w
ejecución a través de una función BufWritePre
, <CTRL>R
no escribirá la 3
respuesta. Y esto es lo que quiero hacer, es por eso que escribí para 'suspender la historia', pero tal vez lo que pido no sea posible, además de trabajar con todo undotree()
.
vim.se
, lo habría intentado. De todos modos, parece que Sato sabe cómo ayudar.
sed
, pero sed no puede deshacer las cosas, entonces, ¿cómo va a funcionar eso? Si pudieras "suspender el historial", ¿qué comportamiento amable esperarías de vim cuando hagas un deshacer después? El único comportamiento que podría visualizar es agrupar esos cambios (junto con los deshacer) en un bloque de deshacer, de ahí mi respuesta. Pero si no es así, ¿qué es?
vi
, pero para mívi
el comando deshacer se deshace una vez, y luego, cuando presionasu
nuevamente, deshace el deshacer ("rehacer"). Eso es real vi. Por lo tanto, yo y otros usuarios de este sitio podrían no saber la respuesta a su pregunta.