Vim rechercher et remplacer le texte sélectionné
Disons que nous avons un texte, et j'ai entrer dans le mode visuel et sélectionnez du texte. Comment puis-je rapidement faire une recherche sur le texte en surbrillance et la remplacer par autre chose?
Vous devez vous connecter pour publier un commentaire.
Essayez d'exécuter ou de les mettre dans votre
.vimrc
En appuyant sur ctrl+r en mode visuel, vous serez invité à saisir le texte à remplacer. Appuyez sur la touche entrée, puis confirmez à chaque changement vous êtes d'accord avec y ou refuser avec n.
Cette commande permet de remplacer votre registre
h
de sorte que vous pouvez choisir un autre (par la modificationh
dans la commande ci-dessus pour une autre lettre minuscule) que vous n'utilisez pas.c
dansgc
, remplacer est fait à la fois dans l'ensemble de la mémoire tampon. Si vous avez fait une erreur et que vous voulez revenir, il suffit de taperu
en mode commande. J'aime cette approche de mieux que de confirmer chacun des remplacements (qui se passe avec lec
modificateur).vmap * y:let @/ = @"<CR>
sélectionné est mis en surbrillance.h
registre.<left><left><left>
?c
degc
, vous aurez également à éliminer l'un des<left>
'partir de l'extrémité de la ligne.gc
est que vous avez touchéy
de trop nombreuses fois, vous pouvez frappera
au lieu de confirmer tous les remplacements, ouq
- à-dire non pour le reste d'entre eux. pour plus de plaisir commandes de lecture:help :s_c
.vimrc
fichier?Cette simple et rapide de la cartographie de la recherche pour visuellement le texte en surbrillance (sans écraser les h de registre) et sans l'aide de la borne de charge + inscription:
Si vous n'aimez pas le ctrl-f modifier vos préférences
Une fois que le texte est mis en surbrillance, vous pouvez toujours faire un
s
ubstitution simplement en tapant:... parce qu'une vierge de recherche sur la
s
commande utilise la dernière cherché chaîne.control+f
sélectionne toujours le très prochain caractère, ainsi que je l'ai sélectionnées visuellement. Des idées?%s//<your-replacement-string>
ne semble pas fonctionner pour mettre en évidence quelque chose comme/tmp/file
. il devient juste<your-replacement-string>/tmp/file
La accepté de répondre fonctionne très bien, sauf si vous avez des caractères spéciaux dans votre sélection visual. J'ai bidouillé deux scripts (Jeremy Cantrell's posté ici & Peter Odding's) pour effectuer une commande qui va vous permettre de visual sélectionnez une chaîne que vous souhaitez à trouver, même si elle a un regex caractères.
J'ai inclus dans mon vimrc si c'est plus utile à personne.
vmap <C-r> <Esc>:%s/<c-r>=GetVisual()<cr>//g<left><left>
(qui remplace simplement le tout dans un fichier)Celui-ci fonctionne aussi (au moins pour les sélections en une seule ligne /les sélections qui ne contiennent pas de caractères spéciaux)
y
:s/<C-r>0/
0
est le yank registre.Que les autres personnes mentionnées, il y a des manières plus rapides pour ce faire, mais si vous avez juste commencé à apprendre Vim (comme moi), c'est l'un des "générique" des manières.
//edit: je viens de réaliser que le "registre" approche ne fonctionnera pas si il y a des personnages comme les onglets ou des retours à la ligne ou
/
les caractères de la sélection (j'aurais à traiter manuellement les caractères d'une certaine manière pour que le:s
commande fonctionne):De Vim 7.4, vous pouvez utiliser le
gn
mouvement qui sélectionne les zones de texte qui correspondent à l'actuel modèle de recherche.Après l'utilisation de
cgn
pour modifier le texte actuellement sélectionné match (oudgn
à supprimer), en mode normal, vous pouvez utiliser.
répéter la commande et fonctionner sur le prochain match.Il y a un épisode de Vimcast montrant cette fonctionnalité.
De http://vim.wikia.com/wiki/Search_and_replace_in_a_visual_selection:
Lorsque le texte est visuellement sélectionné, appuyez sur : pour entrer une commande. La ligne de commande seront automatiquement ajoutées à la gamme:
Vous pouvez entrer une commande telle que s/rouge/vert/g pour remplacer chaque rouge avec le vert dans toutes les lignes de la dernière sélection visual. La commande s'affiche comme:
Pour répéter une commande Ex sur un auparavant bloc sélectionné, utilisez l' : l'histoire. C'est, appuyez sur : puis , ensuite, de modifier une commande précédente.
Mykola Golubyev,
Merci pour l'astuce! Suivant utilise le "+" registre (en fonction de votre terminal) contient déjà le texte en surbrillance, enregistrement à partir de l'aide de la "h" s'inscrire.
J'ai cela dans mon vimrc:
Cela va saisir la sélection visuelle et de lancer une commande de substitution avec elle.
EDIT: je tiens à souligner que cela ne fonctionne pas avec multiligne visual sélections. Alors que GetVisual() n'a pas un problème de le retourner, je ne suis pas sûr de savoir comment bien le mettre dans la ligne de commande. Si quelqu'un a des conseils sur comment je pourrais faire cela, s'il vous plaît commentaire.
Je ne pense pas que vous pouvez faire hors de la boîte. Mais beaucoup de gens aiment cette fonctionnalité, donc il y a des tonnes de macros et de tel (je l'ai ajouté moi-même). Ici est celui que vous pouvez ajouter, par exemple; appuyez simplement sur
*
à la recherche pour le prochain match sur le visuellement le texte sélectionné.Mes préférés de la version courte de ce est
vnoremap s/y:s/"/
Ensuite, vous pouvez mettre en surbrillance un élément et appuyez simplement sur s/pour lancer une commande de substitution pour elle.
"
comme un littéral.<c-r>"
fonctionné bienJe n'ai pas de rep pour le commentaire, donc je suis en ajoutant encore une autre réponse...
vnoremap <C-r> "0y<Esc>:%s/<C-r>0//g<left><left>
@dmd et @dotancohen: cela a fonctionné pour moi sans utiliser de
"h
(utilise explicitement 0, qui est la dernière yank position de toute façon) et travaille avec putty ssh -> à la menthe (lmde); ne sait pas sur cent. Utilise aussi @Niloct et @Nathan Ami commentaires de confirmation de suppression.L'exemple 1. Citation de sélection avec les stars, garder le curseur au début de la sélection.
L'exemple 2. Pipe texte sélectionné avec base64:
Explication LHS:
Explication RHS: