Pregunta:
Hay muchas veces en mi vida laboral diaria en las que necesito operar en una función específica, cosas como resaltar o buscar una variable, pero nunca he logrado limitar el alcance de las ediciones / búsqueda.
¿Hay alguna forma en vim de decir selectivamente, buscar todas las referencias a $color
dentro de estos conjuntos de llaves, o este pliegue, etc. Si es posible, sería ideal que esto sea relativamente genérico, de modo que pueda aplicarse a la edición / reemplazo de texto? .
Como ejemplo:
$color = "#fff";
function PickColor () {
$color = "#bbb";
$newColors = ["#000", "#fbf", $color];
foreach ($newColors as $c) {
if ($c == "#fff") {
break;
}
}
}
$differentColor = $color;
Este código es un ejemplo relativamente malo, sin embargo, si tuviera que reemplazar todas las instancias de $ color, ¿cómo haría uno en el contexto de la función PickColor? Como otro ejemplo, usando #
y *
Puede ir a la siguiente instancia de ese objeto de texto, ¿cómo limitaría el alcance de la búsqueda a solo esta función (básicamente envolviendo la búsqueda) en contraposición al archivo completo que podría abarcar miles de líneas? y perder su lugar, o reemplazar incorrectamente algo en otra función que no debería tener?
Respuesta:
A continuación, se muestran algunas formas de hacerlo.
1 | $color = "#fff";
2 | function PickColor () {
3 | $color = "#bbb";
4 | $newColors = ["#000", "#fbf", $color];
5 | foreach ($newColors as $c) {
6 | if ($c == "#fff") {
7 | break;
8 | }
9 | }
10 | }
11 | $differentColor = $color;
Modifiqué su ejemplo para incluir números de línea.
Así que ahora puede reemplazar instancias de $color
, por ejemplo, $newColor
, de las siguientes formas.
Rangos de números de línea
:1,11s/\$color/$newColor/g
Esto hace que la sustitución opere en las líneas 1-11 inclusive.
Rangos de línea relativos
Coloque el cursor en la línea 1, luego …
:.,11s/\$color/$newColor/g
Esto dice que el rango comienza con la línea actual y termina en la línea 11.
Rangos de selección visual
Vaya a la línea 1 y presione Shift+V
luego G
Esto selecciona visualmente la línea 1. Entonces …
:'<,'>:s/\$color/$newColor/g
Esto limita la sustitución al rango cubierto por su selección. Vim insertará automáticamente el rango '<,'>
cuando presione :
con una selección activa.