10
votes

Comment éditer plusieurs emplacements simultanément dans Vim

Dans certains éditeurs de texte, comme E, je peux sélectionner plusieurs emplacements et, comme je tape, tous les emplacements sélectionnés sont remplacés par les caractères que je saisis.

Par exemple, si j'ai: p>

<tag1 class=""></tag1>
<tag2><tag3 class=""></tag3></tag2>

vim

4 commentaires

Pouvez-vous expliquer plus sur ce que vous entendez par «tous les emplacements sélectionnés»? Ces emplacements sélectionnés sont-ils tous dans la même forme, comme une colonne? Ou contiennent-ils tous le même texte initial?


@Greg - j'ai édité la question de clarifier. J'espère que cela pourra aider.


Pour moi, cette fonctionnalité ressemble plus à la recherche et à remplacer mais de manière plus fantaisie


Voir aussi: Stackoverflow.com/Questtions/396495


6 Réponses :


5
votes

Vous recherchez peut-être le mode Visual Blockwise, qui permettra l'insertion, la suppression, etc. sur plusieurs lignes à la fois.

Le mode bloquant permettra des sélections carrées avec la colonne et la ligne du point initial dans un coin et du courant. Position du curseur définissant la colonne et la ligne de l'autre coin. Ceci, par opposition à la sélection de ligne qui est la valeur par défaut. p>

Ctrl-V vous placera en mode Visual bloqué. p>

Si vous avez plusieurs lignes, comme: P>

INSERT INTO Users VALUES(1, 0, 'Jim');
INSERT INTO Users VALUES(2, 0, 'Jack');
INSERT INTO Users VALUES(3, 0, 'Joseph');


4 commentaires

La limitation avec CTRL-V est que cela ne fait que des blocs contigus, si le texte que vous souhaitez modifier n'est pas aligné bien dans une colonne, vous ne pouvez pas l'utiliser!


Ah, dans ce cas, tu m'as. Il y a un plug-in multisélect, mais je ne l'ai jamais utilisé: vim.org/scripts /script.php?script_id=953


Est-ce vraiment , pas ?


Ctrl-i ne vous donne pas de capital i .



9
votes

Voici comment je voudrais probablement modifier ces lignes particulières (il existe de nombreuses façons): xxx

Premièrement, recherchez les citations vides pour mettre le curseur sur le premier. Utilisation de la commande "A" (APPEND), tapez le nouveau texte à mettre à l'intérieur des guillemets. Lorsque vous avez terminé, utilisez "N" (suivant) pour passer à l'instance suivante et "." (Répétez la dernière commande) pour insérer à nouveau le même texte. Répéter le "n." Autant de fois que nécessaire.

Cette méthode prend moins de préparation à l'avant et vous permet de commencer tout de suite sans identifier à l'avance tous les emplacements où vous voudrez peut-être ajouter le texte. < / p>


3 commentaires

C'est certainement un bon moyen d'obtenir du texte rapidement. Cependant, ce n'est pas un exemple d'édition simultanée de la même manière que l'e le fait. Peut-être que c'est la méthode «Vim» de faire des choses (et comme vous l'indiquez a l'avantage de ne pas avoir besoin de connaître tous les endroits à l'avance).


Vim ne peut pas faire des modifications simultanées (possible, il peut être émulé via Vimscript). La mise en place d'une commande répétable est un peu plus de travail imo, mais c'est la façon de le faire vim.


Je souhaite ajouter que la commande de la deuxième ligne peut être n'importe quelle autre action VIM comme: 5x, i



2
votes

Pour votre exemple, j'utiliserais une substitution:

:%s/class=""/class="something"/g


1 commentaires

Merci d'avoir répondu! Cependant, ma question ne consiste pas à trouver une solution à l'exemple certes intimement artificiellement, mais à la résolution de l'exemple en utilisant l'édition simultanée.



2
votes

regarder Snippetsemu . Cela devrait faire quelque chose de très similaire à ce dont vous avez besoin.

Il émule des extraits de Textmates. Vous devriez pouvoir avoir un extrait avec la même balise répétée et la modification fera la bonne chose, mettant à jour la même balise dans tous les emplacements, à mesure que vous tapez.


1 commentaires

Il s'avère que Ayman vous êtes exactement correct! Il y a aussi un autre script appelé Snipmate qui le fait aussi. Voir la casse à écran référencée ici: vim.org/scripts/script.php?script_id = 2540 . Il est presque identique aux caractéristiques de Screencast démorés dans E.



0
votes

Je cherche également quelque chose comme ça, plus spécifiquement une fonctionnalité très utile de ST2, où vous appuyez sur Ctrl + D pour sélectionner la prochaine occurrence, puis remplacez les deux occurrences en tapant simplement. < / p>


0 commentaires

0
votes

Essayez VIM-Multi-curseurs .

Appuyez sur CTRL + N autant de fois que nécessaire pour sélectionner les multiples occurrences.


0 commentaires