Digamos que tengo diez líneas y quiero anteponer texto a alguna palabra que aparezca en esas líneas. No tiene que estar al principio de la línea.
De:
sdfsd foo sdfsd
sfsd foo fsdf
sdfsdf foo sdfsdf
a:
sdfsd bar(foo sdfsd
sfsd bar(foo fsdf
sdfsdf bar(foo sdfsdf
¿Es también posible no sólo precedidos por bar(
, pero en realidad envolvente foo
con bar(foo)
?
También me gustaría una forma rápida de agregar //
comentarios a varias líneas (comentarios de estilo C).
Yo uso Vim / GVim 7.2.
Respuestas:
Vaya al primero
foo
, presione Ctrl- vpara ingresar al modo de bloqueo visual y presione hacia abajo hasta que todas las líneas confoo
estén marcadas. Luego presione Shift- ipara insertar al principio (del bloque). Cuando haya terminado y presione Esc, los caracteres insertados se agregarán a cada línea a la izquierda del bloque marcado.Para insertar al final, presione nuevamente Ctrl- v, muévase hacia arriba / abajo para marcar todas las líneas afectadas y luego presione Endo $para extender la selección hasta el final de las líneas. Ahora puede presionar Shift- apara agregar al final de todas las líneas, como antes con Shift- i.
La selección visual también se puede realizar con comandos de movimiento normales. Entonces, para comentar un bloque completo en C, podría moverse a la llave de apertura y escribir Ctrl- v % Shift- i // Esc.
fuente
i
no pasa nada. Cuando presiono,shift+i
la selección desaparece pero puedo insertar texto (en el lugar actual donde está solo el cursor).Para responder a su primera pregunta, la siguiente
buscará
foo
y rodeará el patrón coincidente conbar()
. El/g
va a hacer esto varias veces en una sola línea.Ya que solo está haciendo coincidir
foo
, podría hacer un simple:s/foo/bar(foo)/g
. Sin embargo, lo anterior funcionará si decide hacer coincidir una expresión regular en lugar de una simple palabra (pf[a-z][a-z]
. Ej .). El '&' de arriba representa lo que ha hecho coincidir.fuente
:
ys
determina en qué líneas opera. Nada significa solo la línea actual.1,30
significa líneas 1 a 30 (inclusive).'<,'>
significa las líneas en la selección visual actual.Para prefijar un conjunto de líneas, utilizo uno de dos enfoques diferentes:
Un enfoque es la selección de bloque (mencionado por sth). En general, puede seleccionar una región rectangular ctrl-Vseguida del movimiento del cursor. Una vez que haya resaltado un rectángulo, al presionar shift-Ise insertarán caracteres en el lado izquierdo del rectángulo, o los shift-Aagregará en el lado derecho del rectángulo. Entonces, puede usar esta técnica para hacer un rectángulo que incluya la columna más a la izquierda de las líneas que desea prefijar, presione shift-I, escriba el prefijo y luego presione escape.
El otro enfoque es utilizar una sustitución (como lo menciona Brian Agnew). La sustitución de Brian afectará a todo el archivo (el% en el comando significa "todas las líneas"). Para afectar solo unas pocas líneas, el enfoque más fácil es presionar shift-V(que habilita el modo de línea visual) mientras está en la primera / última línea, y luego moverse a la última / primera línea. Luego escriba:
El ^ es una expresión regular (en este caso, el comienzo de la línea). Al escribir esto en el modo de línea visual, verá '<,'> insertado antes de la s automáticamente. Esto significa que el rango de la sustitución será la selección visual.
Consejo adicional: si su prefijo contiene barras, puede escapar de ellas con barra invertida o puede usar un carácter de puntuación diferente como separador en el comando. Por ejemplo, para agregar comentarios de línea de C ++, generalmente escribo:
Para agregar un sufijo, el método de sustitución es generalmente más fácil a menos que todas las líneas tengan exactamente la misma longitud. Simplemente use $ para el patrón en lugar de ^ y su cadena se agregará en lugar de agregarla.
Si desea agregar un prefijo y un sufijo simultáneamente, puede hacer algo como esto:
El. * Coincide con toda la línea. El & en el reemplazo devuelve el texto coincidente (la línea completa), pero ahora tendrá su prefijo y sufijo agregados.
Por cierto: al comentar el código, probablemente querrá descomentarlo más tarde. Puede usar visual-block ( ctrl-V) para seleccionar las barras y luego presionar d para eliminarlas, o puede usar una sustitución (probablemente con una selección de línea visual, hecha con shift-V) para eliminar las barras principales como esta:
fuente
: normal al rescate!
: norm (al) reproduce los comandos como si los hubiera escrito:
O en una línea:
Si está ejecutando Windows, escriba en ctrlqlugar de ctrlv.
fuente
Otra posibilidad (probablemente no tan útil en su caso de prueba, pero útil en otras situaciones) es acordonar el área que desea cambiar con marcas.
:'a,'b s/foo/bar(&)/
Por lo general, me gusta el modo de bloqueo visual si todo está visible en la pantalla, y generalmente prefiero las marcas si el inicio y el final están separados por muchas pantallas.
fuente
m
lugar de'
establecer un nuevo marcador.'
es para saltar a la línea de un marcador existente.`
salta a la línea y columna de ese marcador.Otra expresión regular simple es:
fuente
Para los comentarios de estilo C, use la respuesta de expresión regular de Brian, haga coincidir el final de la línea
$
e insértela.fuente