2009-10-13 16 views
19

he utilizado mucho este atajo muy útil en vim:Making inserción de un solo carácter en Vim una operación atómica

nmap <space> i <esc>r 

esto significa que si presiono espaciof, por ejemplo, lo hará inserte un solo carácter f en la posición dada.

por desgracia, sin embargo, esto no es atómica, es decir, si presiono espaciof y vaya a otro lugar, a continuación, pulse ., consigo el equivalente de rf, no espaciof.

todo esto tiene sentido, pero aquí está la pregunta: ¿hay alguna manera de hacer que este atómico, por lo que . repetirá la operación 'insertar carácter', y para que deshacer, etc., ¿todos lo tratan como una sola operación también?

Respuesta

11

impresionante! La respuesta de Michael me indicó el complemento que necesitaba para terminar mi complemento, que ahora puede hacer lo que quiera. ¡Estuve tratando de descubrir cómo hacerlo durante años!

1) Instalar

2) Instalar my plugin

3) agregar una asignación a su .vimrc:

nnoremap <space> :<C-U>call InsertChar#insert(v:count1)<CR> 
+0

esto es mucho más complicado de lo que esperaba, pero hace que el cursor sea rojo (lo que es un gran toque), permite la cancelación con escape, y puede ser lo que uso de aquí en adelante ... – Peter

+1

Solo descubrí esto hoy, pero todavía comento, quiero decir: ¡esto cambiará la vida! ¡Gracias! – Umang

2

Disculpe, no puedo proporcionar una respuesta específica a su problema, pero notaré que tiendo a usar el . tecla cuando tengo que reproducir una gran cantidad de comandos (por ejemplo, quiero insertar f 5 o más veces).

Si ese es el caso aquí, no creo que valga la pena guardar el uso de su macro. Ahorrará un golpe de teclado mediante el uso de la macro en lugar de ifesc y que la operación es atómica por lo que podría entonces . a tu gusto.

Usaría la versión que no sea macro si sé que quiero repetirla mucho.

P.S. Sabes que estoy empezando a gustar bastante la etiqueta < kbd> :-)

+1

absolutamente, y este es mi comportamiento actual - pero utilizando este método abreviado es tan conveniente que quiero para que sea posible utilizar todo el tiempo. no se trata de guardar claves, y más acerca de la consistencia :) – Peter

+0

+1 para la posdata al azar (que supongo que no se burla de mí :)) – Peter

+0

No, en realidad nunca lo he usado antes, he tendido a usar el markquoting markup, pero kbd es mucho mejor para las claves. – paxdiablo

3

Es posible que desee echar un vistazo a este script de complemento. Es posible configurar su mapa para que pueda ser compatible. Lea la documentación de apoyo

http://www.vim.org/scripts/script.php?script_id=2136

+0

muchas gracias por esto. parece que el enfoque de @too much php es bastante bueno, y está basado en esto. – Peter

7

hace este trabajo para usted?

noremap <silent> <space> :exe "normal i".nr2char(getchar())<CR> 
+0

Es bueno, y definitivamente es una posible solución. Una desventaja de este enfoque es que el cursor desaparece cuando presiona el espacio, por lo que pierde la pista de dónde está insertando el carácter. El enfoque de @too much php es mucho más complicado, pero tiene la ventaja de dejar el cursor en su lugar. – Peter

+2

Si realiza inserciones rápidas, la falta de cursor no es tan molesta. –

+2

Esto es genial! Usé 'K' que está desatado, usa el mismo dedo' i', y Kim comienza con K. Creo que así es como los desarrolladores originales mapearon las claves. –

Cuestiones relacionadas