search – Restringir operaciones a una sección de código

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.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım