Comment réutilisez-vous une sélection de mode visuel?


164

Souvent, lors de la modification de code, je sélectionne un bloc en mode visuel, puis je recherche et remplace le bloc. Après avoir apporté les modifications, cependant, il quitte le mode visuel. Comment faites-vous une nouvelle recherche et de remplacer sur la même sélection?


Eh bien, j'ai trouvé un moyen, mais c'est un peu lourd:: '<,'> s / ancien / nouveau / g Tout moyen de le faire sans avoir à taper dans le '<,'>?
labyrinthe

Réponses:


244

Vous pouvez resélectionner la dernière zone visuelle sélectionnée avec gv.


4
Impressionnant! @Heptite comment trouver cette commande moi-même avec Stackoverflow?
skywinder

6
@skywinder: aide gv
Heptite

4
@Heptite: Je ne suis pas sûr que vous soyez la langue dans la joue ici, mais cette commande vous montre ce que: gv fait une fois que vous savez à ce sujet. Mais si je ne le fais pas ? Apprenez à un (wo) homme à pêcher et tout ça.
Ben Thul

@BenThul: Je pense avoir mal compris la question. Je connais beaucoup de fonctionnalités de Vim en lisant la majeure partie de la documentation au fil du temps, en commençant par " :help".
Heptite

2
:help select-visualdevrait vous conduire au manuel correct à l’intérieur de vim @skywinder.

14

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 toute la méthode 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 ensuite récupérer cette sélection en tapant @a(lancez la macro dans le registre a). Répétez l'opération avec les registres, lignes ou sections de lignes que vous souhaitez. Évidemment, si vous apportez des modifications au fichier, la sélection peut également changer, vous pouvez donc envisager d'utiliser des repères au lieu des numéros de ligne "codés en dur".


zmpour indiquer que vous devez connaître les numéros de ligne. Je pense qu'il vaut mieux définir deux marques et ensuite utiliser: 'a,' b pour opérer sur la plage entre elles (ou remplacer 'par des backticks si vous voulez une
précision

Oui, la numérotation des lignes était idiote - je viens de l’utiliser comme exemple pour créer une macro de sélection. Utiliser une gamme de marques est une idée intéressante cependant ...
AlexMA

6

gvfonctionne très bien pour récupérer la dernière sélection. Mais on a parfois besoin d'un peu plus.

Si vous avez besoin d'un enregistrement plus persistant, jetez un coup d'œil à ce plugin sur lequel nous travaillons actuellement sur le GitHub.

VisualMarks vous permet de sauvegarder et de restaurer visuellement des zones sélectionnées, tout comme vous enregistrez et marquez des emplacements spécifiques dans vos fichiers m. Après l’installation et avec les options par défaut, utilisez:

ma

en mode visuel pour enregistrer votre sélection actuelle pour marquer a, puis

<a

en mode normal pour revenir à cette sélection.


Wow, ça a l'air vraiment cool. Je vais devoir essayer ce plugin! À propos, ces VisualMarks peuvent-ils persister avec mkview comme vous pouvez le faire avec des marques?
labyrinthe

@ Labyrinth Je ne sais pas mkviewmais .. Je suppose que oui puisque les marques sont enregistrées dans un fichier séparé et .. Je vous suggère d'essayer quand même :) Si elles ne persistent pas comme vous le souhaitez, nous serons heureux de recevoir votre article demande sur GitHub et try'da le traite.
iago-lito

1

Supposons que je souhaite 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 :s/Goodbye/Hello/taperais et vim remplacera toutes les instances de GoodbyeavecHello

C'est simplement une combinaison d'expressions régulières et de sélections de mode visuel de vim. Lorsque vous sélectionnez, il devrait remplir automatiquement'<,'>


1
Désolé, ce n'est pas ce que je demandais. Ce que je demande, c'est comment vous utilisez la sélection pour faire une autre recherche et la remplacer sur la même plage que celle sélectionnée auparavant?
labyrinthe

1
Après avoir remplacé, vous sortirez du mode visuel. tapez gvet votre mode visuel reviendra à l’état de sélection précédent.
Scott Nguyen
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.