Muchas veces en mi vida laboral cotidiana necesito operar en una función específica, como resaltar o buscar una variable, pero nunca he logrado limitar el alcance de las ediciones / búsquedas.
¿Hay alguna manera en vim de decir selectivamente, encontrar todas las referencias $color
dentro de estos conjuntos de llaves, o este pliegue, etc.?
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 se haría esto 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 solo a esta función (básicamente ajustando la búsqueda) opuesta al archivo completo que podría abarcar miles de líneas y perder su lugar, o reemplazando incorrectamente algo en otra función que no debería tener?
fuente
Si se siente cómodo tomando la ruta del complemento, está NrrwRgn .
Seleccionas visualmente un bloque, luego ejecutas el
:NR
comando, que abre un nuevo búfer (en una división) con el texto seleccionado. Puede realizar modificaciones en este búfer y, cuando lo guarde, también se guardará en el archivo original.En mi opinión, este complemento resuelve muy bien el problema, permitiéndole centrarse en las operaciones que desea realizar sin repensar cómo aplicarlas a un rango específico.
fuente
Selecciona el bloque que le interesa en el modo de línea visual (shift + v) y luego escribe
:
y su comando que ahora se aplicará al bloque.Entonces, si desea reemplazar en la selección, puede ejecutar
:s/string/replacement_string
fuente
VaB:s/\$color/replaced/g
Use el objeto de texto de llaves '}' y seleccione dentro de las llaves con 'i}'
en la línea con la llave de apertura de la función:
primero vaya al final de la línea (que estará dentro o dentro de la llave de apertura), luego vaya a selección visual, luego seleccione usando el objeto de texto de llaves. 'i}' está dentro de llaves 'a}' está alrededor de llaves.
Para los idiomas que carecen de llaves, Vim Text Object: The Definitive Guide sugiere algunos complementos:
ai
incluye el nivel de sangría actual y la línea anterior;ii
incluye el nivel de sangría actual, excluyendo la línea anterior.ar
yir
, según la presencia de laend
palabra clave.fuente