online metrologia mac for vim

metrologia - vim online



Repetición de caracteres en el modo de inserción VIM (10)

¿Hay alguna manera de repetir un personaje en el modo de inserción de Vim? Por ejemplo, digamos que me gustaría insertar 80 guiones, en algo como emacs escribiría:

Ctrl + U 8 0 -

La única forma en que sé cómo hacerlo en VIM es salir del modo normal para repetir el argumento, luego volver al modo insertar para escribir el guión, luego salir para insertar los guiones reales, Y luego volver al modo Insertar para continuar mecanografía. La secuencia es realmente larga:

Esc 8 0 a - Esc a

Sería bueno no cambiar entre modos.


Además de escribir la función que repetirá el texto varias veces, puede usar <Cx> <Cl> : si ya tiene una línea que contiene 80 guiones, escriba algunos guiones al comienzo de la nueva línea y luego presione <Cx> <Cl > completará líneas que comiencen con estos pocos guiones que probablemente se alineen con 80 guiones. Solía ​​escribir líneas horizontales (78 guiones) en archivos de ayuda de esa manera.


Dijiste que sería "agradable" permanecer en el modo "Insertar"; sin embargo, en el modo de comando, el siguiente método evitaría tu 2ª ESC : -

Aunque sé que esta publicación es antigua, me parece una lástima pasar por alto la opción obvia ''Cortar / copiar y pegar'' ...

x ... cortar

8 0 ... número de copias

p Pegar

Nota: Esto es similar al método sugerido por Martin Beckett; sin embargo, recibo un retraso al emitir ese comando, tal vez porque cambia de modo varias veces, este comando se ejecuta instantáneamente.


Hay muchas otras formas pero AFAIK, la que describes es la más corta. En vim se supone que debes pasar tu tiempo en el modo de comando, por lo que serían solo 3 pulsaciones de teclas + el número de repeticiones (80-).

Sin embargo, si encuentra que muy a menudo usa esta repetición, puede hacerse una función o macro para ese fin; tal vez algo como:

:function Repeat(char) : let counter = input("How many times?: ") : call feedkeys("i") : call feedkeys(repeat(a:char,counter)) :endfunction :imap <C-U> <ESC>h"ryl :call Repeat(@r)<CR>


Para una tarea tan sencilla, la abbreviation debería ser el truco. Agregue lo siguiente a su .vimrc

iab <expr> -- repeat(''-'', 80)

y a partir de ahora, cuando escriba -- seguido de un espacio (mientras se encuentre en el modo de inserción), el -- se convertirá automáticamente a - 80 veces.

Al usar la función de repeat , puede repetir la cadena tantas veces como desee.

Tenga en cuenta que puede probarlo antes de actualizar el .vimrc ingresando en modo command luego emitiendo lo siguiente :iab <expr> -- repeat(''-'', 80)


Respuesta tardía pero por lo que vale, si quieres entregar spam, puedes usar el comando "repetir el último comando":.

i "Frase" Esc - i to insert, enter phrase/character, esc to go normal mode

. - Spam till you are satisfied. Will repeatedly input the phrase you typed (it repeats your last command). Spam till you are satisfied. Will repeatedly input the phrase you typed (it repeats your last command).

Encuentro esto especialmente útil cuando no sé exactamente cuántas repeticiones quiero hacer, pero sé visualmente cuánto tiempo quiero que sea. Básicamente arruinar el . hasta que mis ojos estén contentos.


Si está de acuerdo con dejar el modo INSERT solo una vez (al final), esta secuencia funciona:

<C-o>80i-<Esc>

  • <Co> se usa para emitir comandos normales sin salir del modo INSERTAR
  • 80 la repetición,
  • i para insertar,
  • - el personaje que quieres insertar,
  • <Esc> para salir del modo INSERTAR.

Otro sin dejar el modo INSERTAR:

<C-o>:norm 8ia<CR>


También puede hacer, Esc n i hola allí Esc Esc

donde, n es el número de repeticiones.

por ejemplo, Esc 5i hola allí Esc Esc


Una versión ligeramente diferente de la solución de Eelvex:

function! Repeat() let times = input("Count: ") let char = input("Char: ") exe ":normal a" . repeat(char, times) endfunction imap <C-u> <C-o>:call Repeat()<cr>


Esc n i c Esc Esc .

Por ejemplo Esc 4 i J Esc Esc dará salida a JJJJ .


<ESC> <the number of times you want to repeat> i <the char you want to repeat> <ESC> for example: <ESC>12ia<ESC> will insert 12 a''s.