2011-03-28 6 views
5

en vim, ¿hay alguna manera de eliminar un bloque de texto escrito por un i (no) remap o un iab? por ejemplo, decir que tengovim undo (eliminar) caracteres escritos por un imap!

inoremap xx \ hat {x}

en mi archivo .vimrc, quiero ser capaz de eliminar \ hat {x} con uno de dos pulsaciones de teclas (pero no^w o dB .. Podría tener dos iabs consecutivos que consisten en solo texto, así que tengo que ser capaz de cortar abababcdcdcd en el medio, si cdcdcd es un iab de, por ejemplo, "cc")

cualquier ideas?

Respuesta

2

Finalmente una solución limpia

inoremap xx ^Gu\hat{x}^Gu 

(Eso es C-g allí)

efectos No más extraños. Incluso puede elegir si desea aislar el elemento de deshacer en ambos extremos o solo al principio (deje el ^Gu posterior si no le molesta que hat-x se deshaga junto con lo que vino después)

Ahora el solía información salvamento fue, finalmente, trivial:

:he undo|/break/;+3p 

salida:

de hacer lo contrario, romper un cambio en dos bloques de deshacer, en modo Insert uso CTRL-G u. Esto es útil si desea que un comando de inserción sea reversible en partes. Por ejemplo, para cada oración. | i_CTRL-G_u |

+0

lo siento, esto produce un resultado aún más divertido ... y el equivalente, aunque parece funcionar bien, si escribo xx, entonces yy, entonces uy luego xx otra vez, vuelve a mostrar el resultado de xx yy, no solo xx !!!! – sfranky

+0

ugh - gracias por los comentarios. Es como temía entonces ("podría tener efectos extraños con la historia ramificada") solo peor: una sola rama es suficiente para hacerlo portarse mal. Veré si puedo resolver algo en los próximos 10 minutos :) – sehe

+0

¡No lo vas a creer, pero lo hice! Era realmente simple, y no implica más hackers (solo más RTFM - ). Ok, 19 minutos, pero me interrumpieron por teléfono. Siéntete libre de aceptar esta respuesta después de convencerte a ti mismo :) – sehe

1

Como deshacer deshace la última inserción, con frecuencia coloco un <Esc>a al principio de mis asignaciones.

Por ejemplo:

inoremap xx <Esc>a\hat{x} 

Te hace salir y volvió al modo de inserción por lo que el deshacer puede funcionar correctamente. Si lo escribiste mal, puedes deshacerlo correctamente.

Sé que esto puede ser feo y sin sentido, pero funciona. Me encantaría saber si hay una mejor solución para "eliminar" el deshacer.

+0

gracias por la respuesta. Esperaba que me saliera con la suya sin cambiar mis imaps actuales (¡tengo algunos!). ¡Lo dejo abierto por un tiempo en caso de que una respuesta que los deje sin cambios haga lo que quiera! – sfranky

+0

¡por cierto esto no funciona! ¡Todavía obtengo el mismo resultado! Tal vez algo malo en mi vimrc? – sfranky

+0

Aha, no fue ... ¡Actualizando mi respuesta con una solución 'hack' que funciona! – sehe