En algún momento mi Vim deshacería una palabra completa cuando golpeara u
.
[i]typing some words[C-c][u]
Resultaría en
typing some
Sin embargo, la granularidad de deshacer parece haber cambiado para eliminar una letra a la vez.
[i]typing some words[C-c][u]
Resultados en
typing some word
Recuerdo haber leído algo sobre la personalización de la granularidad de deshacer en Practical Vim, pero no recuerdo cómo controlarlo. Cualquier ayuda apreciada!
:help
archivos al respecto ... Vea: ¿Cómo depuro mi archivo vimrc? ... Además, usar<C-c>
para salir del modo de inserción puede tener efectos secundarios ( ver esto ) y puede ser parte del problema ... Sugeriría usarEsc
o<C-[>
( ver esto )Respuestas:
Romper manualmente la secuencia de deshacer
Puede romper manualmente la secuencia de deshacer en modo Insertar con
<C-G>u
. De la ayuda :Ejemplo
Esto te dejará con el texto
Desglose de comandos
Solución automática
Control de nivel de deshacer más fino
Aquí hay un pequeño fragmento de VimScript que se usa
<C-G>u
para crear saltos de deshacer cuando comienza a eliminar texto, y también cuando comienza a ingresar texto nuevamente después de una eliminación.Notas
Esto funcionará para
<BS>
,<C-W>
(eliminar una palabra), y<C-U>
(eliminar al principio de la línea). Si hay más formas de eliminar en el modo Insertar, se pueden admitir agregandoinoremap
llamadas adicionales al final.fuente
<C-G>u
, que ya es demasiado tarde.i
seguido de una oración larga seguida de retroceso para eliminar parte de lo que he escrito (todo en modo de inserción). Entonces me doy cuenta de que no debería haber retrocedido y lo que había escrito estaba bien. Deshago, pero luego todo el texto insertado se deshace. Entonces, o no me queda nada de la oración larga, o la parte que no tiene retroceso. Es imposible recuperar la parte de retroceso. ¿Hay alguna manera de decirle a Vim que rompa la secuencia de deshacer en el espacio de retroceso? (Ahora que lo digo,map
ing backspace es una opción, por supuesto).inoremap <CR> <C-G>u<CR>
para que cada deshacer esté contenido en una sola línea (no más deshacer todo el párrafo que estaba escribiendo sin parar).