¿Cómo reemplazar solo dentro de la selección visual?


27

¿Cómo se obtiene vim para reemplazar un personaje dentro de la selección visual solamente y no en otra parte de la línea? Ejemplo:

  • Línea: int arr[] = { 00 01 02 03 04 05 05 /* ... lots more like this*/};
  • Selección visual: { 00 01 02 03 04 05 05 /*... lots more like this*/}
  • Mando: :'<,'>s/\ /\,0x/g
  • Esperado: int arr[] = {0x00,0x01,0x02,0x03 /* and so on*/};

Sin embargo, después de realizar estas acciones, el resultado real es:

int,0xarr[],0x=,0x{0x00,0x01,0x02,0x03 /* and so on*/};

¿Hay alguna forma de modificar el comando anterior para producir el resultado esperado? ¿No define '<y '>define el rango en el que funcionan los comandos de búsqueda (y reemplazo)?


2
No sé la respuesta, pero sé que :substituteoperatores línea por línea, lo que explica lo que está viendo en su ejemplo.
Karl Yngve Lervåg

Respuestas:


32
:'<,'>s/\%V\ /\,0x/g

%Vcoincide dentro del área visual. Ver :help %V.


1
Cabe mencionar, que esta solución solo verifica, que el inicio del partido está dentro de la selección visual .
Christian Brabandt

7

Hay \%Vpara eso, ver :h %V:

\% V

Emparejar dentro del área visual. Cuando el modo Visual ya se ha detenido, coincida en el área que gv volvería a seleccionar. Esta es una coincidencia / ancho cero. Para asegurarse de que todo el patrón esté dentro del área Visual , colóquelo al principio y al final del patrón , por ejemplo:> /\%Vfoo.*bar\%V

Para reemplazar foopor barla selección sólo, utilice:

:'<,'>s/\%Vfoo\%V/bar/
:'<,'>s/\%Vfoo\%V/bar/g
:'<,'>s/\%Vfoo\%V/bar/cg

En este caso particular:

:'<,'>s/\%V\ \%V/\,0x/g

4

Si desea sustituir dentro de un bloque visual , puede usar el vis.vimcomplemento .

http://vim.wikia.com/wiki/Applying_substitutes_to_a_visual_block

Instalar:

Descargue vis.vba.gz desde http://www.drchip.org/astronaut/vim/index.html#VIS

# Open vis.vba.gz in Vim 7.1 or later.
vim vis.vba.gz

# Source the open file.
:so %

# Quit Vim
:q

Una vez instalado:

ctrl-v to enter visual-block mode
Move to select the block you want
:B s/pattern/newtext/

Cuando escriba :B, verá esto

:'<,'>B 

Está bien, solo estoy diciendo que el comando se aplicará al bloque visual seleccionado actualmente.

Aún mejor, puede ejecutar cualquier comando Ex en el bloque visual, no solo sustituciones. Por ejemplo :B !sort.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.