En Vim, tengo el siguiente texto:
key => value1
key => value2
key => value1111
key => value12
key => value1122222
Me gustaría agregar "," al final de cada línea. El texto anterior pasará a ser el siguiente:
key => value1,
key => value2,
key => value1111,
key => value12,
key => value1122222,
¿Alguien sabe como hacer esto? ¿Es posible usar el modo de bloque visual para lograr esto?
Respuestas:
Esto lo hará con cada línea del archivo:
Si desea hacer un subconjunto de líneas en lugar de todo el archivo, puede especificarlas en lugar de
%
.Una forma es hacer una selección visual y luego escribir
:
. Se completará:'<,'>
por usted, luego escriba el resto (tenga en cuenta que solo necesita agregars/$/,/
)fuente
'
, debería ser:'<,'>s/$/,/
.g
? (:'<,'>s/$/,/g
)/$/
todos modos solo coincide una vez.De hecho, hay una forma de hacer esto usando el modo de bloque Visual. Simplemente presionando
$A
en el modo de bloque Visual se agrega al final de todas las líneas en la selección. El texto adjunto aparecerá en todas las líneas tan pronto como presione Esc.Entonces esta es una posible solución:
Es decir, en el modo Normal, Visual seleccione un párrafo
vip
, cambie al modo de bloque Visual CTRLV, agregue a todas las líneas$A
una coma,
, luego presione Escpara confirmar.La documentación está en
:h v_b_A
. Hay incluso una ilustración de cómo funciona en la sección de ejemplos::h v_b_A_example
.fuente
C-V
), luego mueva el cursor al final de la línea$
y agréguelas a todasA
. Te encantará:h v_b_A
, que es realmente completo.<C-V>ip
en lugar devip<C-V>
.'virtualedit'
, lo probé). Confirmo que no funciona en un vim limpio. ¡Gracias por la nota!Otra solución, usando otra gran característica:
Ver
:help :normal
.fuente
:normal
. ¡Lo encontré informativo!el modo ex es el más fácil:
fuente
El comando sustituto se puede aplicar a una selección visual. Hacer un bloque visual sobre las líneas que desea cambiar y escriba :, y el aviso de que la línea de comandos se inicia de esta manera:
:'<,'>
. Esto significa que el comando sustituto operará en la selección visual, así:Y esta es una sustitución que debería funcionar para su ejemplo, asumiendo que realmente desea la coma al final de cada línea como lo mencionó. Si hay espacios finales, es posible que deba ajustar el comando en consecuencia:
Esto reemplazará cualquier cantidad de espacio en blanco que preceda al final de la línea con una coma, eliminando efectivamente los espacios en blanco finales.
Los mismos comandos pueden operar en un rango de líneas, por ejemplo, para los próximos 5 líneas:
:,+5s/$/,/
, o para todo el buffer::%s/$/,/
.fuente
Si desea agregar ',' al final de las líneas que comienzan con 'clave', use:
fuente
:g/key/s/$/,
. Ver:help :global
.He
<M-DOWN>
asignado (flecha hacia abajo alt) para<DOWN>.
poder repetir el último comando en una serie de líneas muy rápidamente. con este mapeo puedo:Y luego mantenga presionada la tecla alt mientras presiona hacia abajo repetidamente para agregar la coma al final de cada línea.
Esto funciona bien para mí porque permite un muy buen control sobre qué líneas hacen y qué no reciben el cambio.
(También tengo las otras flechas mapeadas de manera similar para permitir una fácil repetición
.
)Aquí está la línea de mapeo para pegar en su vimrc:
fuente
$ coincide con el final de la línea
fuente
$
a la línea también, no solo,
./g
se utiliza para realizar la sustitución en cada aparición en una línea. Debido a que solo hay uno$
en una línea, puede soltarlo con seguridad.La siguiente macro también se puede utilizar para realizar su tarea.
fuente