Souvent, lorsque je modifie du code, je sélectionne un bloc en mode visuel et je fais une recherche et un remplacement sur ce bloc. Cependant, après avoir effectué les modifications, je quitte le mode visuel. Comment effectuer une nouvelle recherche et un nouveau remplacement sur la même sélection ?
Réponses
Trop de publicités?gv
est certainement la méthode la plus rapide (utiliser la dernière sélection), mais si vous voulez une région de sélection enregistrée stable (ou plusieurs), vous pouvez toujours créer des macros.
Disons que je veux stocker une sélection de ma méthode actuelle, qui va des lignes 25-35. Je peux créer une macro qui sélectionne la méthode entière en tapant
q //start recording
a //use register a
25G //Go to line 25
V //visual-line mode
35G //Go to line 35
q // stop recording
Je peux alors récupérer cette sélection en tapant @a
(exécuter la macro dans le registre a). Répétez l'opération avec tous les registres, lignes ou sections de lignes que vous souhaitez. Il est évident que si vous modifiez le fichier, la sélection peut également changer. Vous pouvez donc envisager d'utiliser des marques au lieu de coder en dur les numéros de ligne.
gv
fonctionne très bien pour récupérer la dernière sélection. Mais on a parfois besoin d'un peu plus.
Si vous avez déjà eu besoin d'un enregistrement plus persistant, jetez un coup d'oeil à ce plugin sur lequel nous travaillons actuellement sur le GitHub.
VisualMarks vous permet de sauvegarder et de restaurer des zones sélectionnées visuellement, tout comme vous sauvegardez et marquez des emplacements spécifiques dans vos fichiers avec l'option m
. Après l'installation, et avec les options par défaut, utilisez :
ma
en mode visuel pour sauvegarder votre sélection actuelle pour marquer a
alors
<a
en mode normal pour revenir à cette sélection.
Vim se souvient de la dernière sélection.
Si vous saisissez : en mode visuel, il se remplit automatiquement :'<,'> pour vous afin que vous puissiez continuer à entrer la commande, par exemple
:'<,'>s/old/new/ # (Replace pattern in selected area)
Si vous voulez exécuter une autre commande sur la même sélection visuelle, vous pouvez simplement faire apparaître l'ancienne dans l'historique et la modifier.
:'<,>'s/abc/xyz/ # (This will run the replace command on the same selection area)
Une autre façon de dire à la commande replace et aux autres commandes qui prennent en charge match pattern d'utiliser la sélection précédente est d'ajouter \%V au motif, par exemple
:s/\%Vabc/xyz/ # (Same as above)
Pour plus d'informations, veuillez consulter :help \%V .
Pour sélectionner à nouveau la sélection précédente, utilisez gv .
Supposons que je veuille remplacer Goodbye par Hello et que le code ci-dessous soit sélectionné :
public static void main(String[] args){
System.out.println("Goodbye World");
}
Je taperais dans :s/Goodbye/Hello/
et vim remplacera toutes les instances de Goodbye
con Hello
Il s'agit simplement d'une combinaison des expressions régulières et des sélections en mode visuel de vim. Lorsque vous sélectionnez, il devrait remplir automatiquement '<,'>