Il y a plusieurs fois dans ma vie professionnelle quotidienne que je dois opérer sur une fonction spécifique, des choses comme la mise en évidence ou la recherche d'une variable, mais je n'ai jamais réussi à limiter la portée des modifications / recherche.
Existe-t-il un moyen dans vim de dire de manière sélective, de trouver toutes les références à l' $color
intérieur de ces ensembles d'accolades, ou ce pli, etc. Si possible, il serait idéal que ce soit relativement générique, afin qu'il puisse être appliqué à l'édition / remplacement de texte.
Par exemple:
$color = "#fff";
function PickColor () {
$color = "#bbb";
$newColors = ["#000", "#fbf", $color];
foreach ($newColors as $c) {
if ($c == "#fff") {
break;
}
}
}
$differentColor = $color;
Ce code est un exemple relativement mauvais, cependant, si je devais remplacer toutes les instances de $ color, comment procéder dans le contexte de la fonction PickColor. Comme autre exemple, en utilisant #
et *
Vous pouvez passer à l'instance suivante de cet objet texte, comment limiteriez-vous la portée de la recherche à cette fonction (en gros, la recherche) opposée au fichier entier qui pourrait s'étendre sur des milliers de lignes et perdre votre place, ou remplacer incorrectement quelque chose dans une autre fonction que vous ne devriez pas avoir?
la source
Si vous êtes à l'aise de prendre la route du plugin, il y a NrrwRgn .
Vous sélectionnez visuellement un bloc, puis exécutez la
:NR
commande, qui ouvre un nouveau tampon (dans une division) avec le texte sélectionné. Vous pouvez apporter des modifications à ce tampon, et lorsque vous l'enregistrez, il est également enregistré dans le fichier d'origine.À mon avis, ce plugin résout très bien le problème, vous permettant de vous concentrer sur les opérations que vous souhaitez faire sans repenser comment les appliquer à une plage spécifique.
la source
Vous sélectionnez le bloc qui vous intéresse en mode ligne visuelle (shift + v) puis vous tapez
:
et votre commande qui s'appliquera désormais au bloc.Donc, si vous souhaitez remplacer dans la sélection, vous pouvez exécuter
:s/string/replacement_string
la source
VaB:s/\$color/replaced/g
Utilisez l'objet texte accolades '}' et sélectionnez à l'intérieur des accolades avec 'i}'
sur la ligne avec l'accolade ouvrante de la fonction:
allez d'abord à la fin de la ligne (qui sera sur ou à l'intérieur de l'accolade ouvrante) puis pour aller en sélection visuelle, puis sélectionnez en utilisant l'objet texte accolades. 'i}' est à l'intérieur des accolades 'a}' est autour des accolades.
Pour les langages sans accolades, Vim Text Object: The Definitive Guide suggère quelques plugins:
ai
inclut le niveau d'indentation actuel et la ligne ci-dessus;ii
comprend le niveau d'indentation actuel à l'exclusion de la ligne ci-dessus.ar
etir
, en fonction de la présence duend
mot - clé.la source