2010-07-13 11 views
19

En Vim, generalmente quiero repetir algunas series de comandos algunas veces. Por ejemplo, quiero hacer un comentario 5 líneas, me gustaría utilizar¿Cómo repetir algunas acciones ciertas veces en Vim?

I//<Esc>j 
.j.j.j.j 

¿Hay alguna forma para repetir el último ".j" parte varias veces?

+1

¿Quieres decir algo como '5',' j'? –

+0

Esta es una respuesta redonda a sus necesidades, si no la pregunta directa. Lo que parece que estás haciendo aquí es comentar 5 líneas de código. Si este es su único requisito, debe usar el complemento NERD Commenter. Este complemento le permite escribir '5 \ cc', que comenta la línea actual y las 4 líneas siguientes de código. '5 \ cs' haría lo mismo, pero en lugar de agregar' // 'comentarios de línea agregará'/* 'y' */'para bloquear-comentar sus líneas. Mucho más versátil – cartbeforehorse

Respuesta

27

Una forma de hacerlo es asignar la secuencia de teclas a una macro, luego ejecutar la macro una vez seguido del comando @@ run-last-macro. Por ejemplo:

[email protected]@@ 

Si conoce el número de veces que desea repetir la macro, puede utilizar [email protected]@ o lo que sea.

+0

Curiosamente, obtengo resultados diferentes para '@@@@@@@@' y '4 @@' ... – Alex

+0

Respuesta de 8 años y esto todavía funciona. Un testimonio del poder de vim. –

3

Para su ejemplo en particular. también puede usar un rango .,.5s#^#//# (para hacer esto y las siguientes 5 líneas) o un bloque visual (presione v, luego seleccione el texto que desee) seguido de :%s#^#//#.

+0

También podría usar ": s #^# // # 5" (el recuento de líneas se encuentra al final). – Neil

2

Otra manera de hacerlo es establecer marcas y ejecutar sustituciones sobre ese rango:

ma 
jjjj 
mb 
:'a,'bs,^,// ,
8

En cuanto a su ejemplo específico, prefiero hacer la inserción de varias líneas utilizando el modo de bloque visual (visitada con Ctrl-v). Por ejemplo, si tuviera las siguientes líneas:

This should be a comment. 
So should this. 
This is definitely a comment. 
Is this a comment? Yes. 

me gustaría ir al primer carácter superior en la línea superior, golpeó Ctrl-v para entrar en modo de bloque visual, navegue hasta la última línea (tal vez usando 3j para bajar 3 líneas, tal vez utilizando 4g para ir directamente a cuarta línea, o tal vez simplemente G para ir al final), a continuación, escriba I// <esc> para insertar los comentarios en todas las líneas a la vez:

// This should be a comment. 
// So should this. 
// This is definitely a comment. 
// Is this a comment? Yes. 

Además, hay una muy útil plugin commenter/un-commenter que admite muchos idiomas here. Es más fácil que insertar/eliminar comentarios manualmente.

+0

Utilizo este: http://vim.sourceforge.net/scripts/script.php?script_id=1173 Muy bonito. – ThePosey

+0

Hmm, este método 'Ctrl-V' no funciona para mí ... Solo inserta en la primera línea. Tal vez es porque todavía estoy en vim 7.2 ... – weronika

+0

@weronika ¿Eres 'gvim'? – isomorphismes

13

Puede seleccionar visualmente las líneas que desea repetir, escriba :normal! . para que vim use . en cada línea. Debido a que usted comenzó con una selección visual, que termina pareciéndose a esto:

:'<,'>normal! . 

Sin embargo, si va a añadir y eliminar comentarios // mucho, es posible encontrar las siguientes asignaciones útil:

" add // comment with K 
noremap K :s,^\(//\)\=,//,e <BAR> nohls<CR>j 
" remove // comment with CTRL+K 
noremap <C-K> :s,^//,,e <BAR> nohls<CR>j 

Puede usar 5K para comentar 5 líneas, puede usar el modo visual para seleccionar sus líneas primero, o simplemente puede marcar K hasta que haya comentado todo lo que desea.

Cuestiones relacionadas