web-dev-qa-db-fra.com

Comment puis-je faire un «changement de mot» dans Vim en utilisant le tampon de collage actuel?

J'ai du texte dans mon tampon de collage, par exemple J'ai fait un yw (yank Word) et maintenant j'ai "foo" dans mon tampon.

Je vais maintenant dans la barre de Word, et je veux le remplacer par mon tampon de collage.

Pour remplacer le texte manuellement, je pouvais faire cw puis taper le nouveau mot.

Comment puis-je faire un "changement de mot", mais utiliser le contenu de mon tampon de collage au lieu de taper manuellement le mot de remplacement?

La meilleure option que j'ai en ce moment est d'aller au début du mot que je veux remplacer et de faire dw (supprimer Word), d'aller à l'autre endroit et de faire yw (yank Mot). Revenez ensuite à la zone de remplacement et faites p (coller) ce qui est un peu maladroit, surtout si elles ne sont pas sur le même écran.

102
Michael Durrant

Option 1

Vous pouvez utiliser des registres pour le faire et effectuer une liaison de touches pour le processus.

Retirez le mot que vous souhaitez remplacer yw.

Le mot tiré est dans le 0 inscrivez-vous que vous pouvez voir en émettant :registers.

Accédez au mot que vous souhaitez remplacer et faites cw. Faire Ctrl+r suivi par  pour coller le 0 S'inscrire.

La carte pour cela ressemblerait à quelque chose comme ça (en supposant Ctrl+j comme notre combo clé):

:map <C-j> cw<C-r>0<ESC>

Option 2 (plus simple)

Avec votre mot tiré, placez le curseur sur le mot que vous souhaitez remplacer et faites viwp. Ce qui est visuel, sélectionnez Word et collez.

Avec l'aimable autorisation de @tlo dans les commentaires: vous pouvez également faire vep. Un caractère plus court. Les inconvénients doivent positionner le curseur au début de Word et (comme avec le mien) modifie le tampon.

Commentaire (de Michael):

C'est bon. Remarque supplémentaire: la deuxième méthode est en effet plus facile mais, en l'état, ne fonctionne que pour UNE substitution car après chaque substitution, le tampon est alors changé en le champ qui a été remplacé (ancien texte). La première méthode est un peu plus difficile à utiliser MAIS a l'avantage que le tampon 0 reste "tel quel", vous pouvez donc utiliser cette méthode pour faire plus d'un remplacement du même texte.

145
jmathew

La manière VIM est d'apprendre à intentionnellement utiliser le coup sec, supprimer et autres Une fois que vous les connaissez, vous trouverez facilement vos propres séquences de touches pour ce faire.

S'inscrire "0 est le registre yank. Tout ce que vous tirerez sera mis ici, mais ni les suppressions ni les suppressions de modifications ne toucheront jamais le registre "0.

Donc, dans votre exemple, vous veniez de tirer un mot. Pour remplacer un mot par ce que vous venez de tirer, vous profitez des suppressions qui ne touchent jamais le registre de tirage. Alors déplacez-vous vers le mot cible, supprimez-le avec dw, puis collez-le de votre registre de tirage avec "0p ou mieux encore, cw puis ^R0 (qui est répétable).

Le revers du registre yank est le registre des petites suppressions "-. Toute petite suppression ou suppression de modification est mise ici, mais les yanks ne touchent jamais "-. Une suppression compte comme petite si elle est inférieure à une ligne complète.

Registres "1-"9 sont les grands registres d'historique de suppression. Avec "1 contenant la dernière grande suppression ou suppression de modification, et "9 contenant la plus grande suppression ou suppression de modification la plus ancienne. Seules les suppressions qui ne sont pas petites, c'est-à-dire les suppressions d'une ligne complète ou plus, sont poussées sur "1-"9.

Pour toute opération qui modifie un registre, une copie est également toujours placée dans le registre par défaut, a.k.a. anonyme "". Il s'agit du registre utilisé lorsque vous ne nommez pas explicitement un registre.

S'inscrire "_ est le registre des trous noirs, et il est toujours vide. Si vous le supprimez, rien dans aucun registre n'est modifié du tout, pas même la valeur par défaut "" s'inscrire ou le trou noir s'enregistrer. Le texte supprimé a complètement disparu, à l'exception de votre historique d'annulation. Tirer ou coller du registre de trou noir ne fait rien du tout.

Le registre des trous noirs "_ vous permet de faire des choses comme une première petite suppression, puis un certain nombre d'autres suppressions dans "_ sans modifier votre registre de petites suppressions "-, puis collez votre première petite suppression.

Les autres registres sont le dernier registre inséré "., le nom de fichier enregistre "% et "#, le registre de commandes ":, recherche registre "/ et registre d'expression "=.

Vous pouvez obtenir une liste de tous ces registres ainsi que leur contenu par la commande :register. Parce qu'elle montre le contenu actuel des registres, la commande est très utile pour expérimenter et apprendre ce qui finit où.

12
00prometheus

yw pour extraire votre Word, puis déplacez le curseur sur le mot que vous souhaitez remplacer et utilisez "_dw pour le supprimer, en envoyant le texte au registre nul (afin qu'il n'écrase pas le contenu du " registre, où le texte extrait/coupé va par défaut), puis collez simplement avec p.

Vous pouvez utiliser le mappage suivant pour rendre les choses un peu plus faciles:

nnoremap <leader>d "_d

... donc en mode normal, vous pouvez utiliser \dw pour supprimer un mot, sans affecter le " S'inscrire.

12
evilsoup

J'en ai besoin si souvent, j'ai écrit un plugin pour simplifier et permettre une vitesse maximale: ReplaceWithRegister .

Ce plugin propose une commande deux-en-un gr qui remplace le texte couvert par un objet {motion}/text, des lignes entières ou la sélection actuelle par le contenu d'un registre; l'ancien texte est supprimé dans le registre des trous noirs, c'est-à-dire qu'il a disparu. Il gère de manière transparente de nombreux cas d'angle et permet une répétition rapide via le standard . commande. Si vous ne l'aimez pas, sa page contient des liens vers des alternatives.

3
Ingo Karkat

Passez en mode visuel en appuyant sur v pour capturer le texte intéressant et le copier en appuyant sur y. Maintenant, saisissez le texte que vous souhaitez supprimer et appuyez sur p pour coller.

Replacing text in Vim

2
Purkhalo Alex

Pour répéter le collage, utilisez la commande change.

cw^RESC (^ R = Contrôle + R; 0 pour le registre 0)

remplacera le Word avec le contenu de reg. 0 et vous répétez avec .

C'est super pour cgn (VIM 7.4) pour remplacer les modèles de recherche:

  • Première recherche avec / ou *
  • cgn^RESC
  • . à répéter lors du prochain match ou n passer
2
laktak

J'utilise habituellement ceci: yw pour tirer foo, puis supprimez bar avec dw, et comme étape finale, mettez foo dans le registre 0 qui contient du texte tiré en utilisant "0p. Répétez la mise avec le point (.) comme requis.

De plus, au lieu de yw et dw, vous pouvez utiliser yiw et diw (remarquez le supplément i - cela signifie à l'intérieur). Avec cela, vous pouvez tirer ou supprimer Word de n'importe quel endroit à l'intérieur, pas seulement au début de Word.

1
Nino

Comme il n'est pas encore inclus, vous remplacez généralement les chaînes par :%s/.../.../ et vous pouvez également le faire avec le mot sous votre curseur.

  1. Vous entrez la première partie de la commande, ce que vous recherchez: :s/find/
  2. Ensuite, vous cliquez sur <ctrl-r> et choisissez avec le curseur le mot avec lequel vous souhaitez le remplacer.
  3. Ensuite, vous cliquez sur <ctrl-w> (petit "Word") ou <ctrl-a> (grand "Word) pour coller le mot sous le curseur dans la ligne de commande
  4. Ensuite, vous terminez la commande.

Voir le lien sur la façon d'utiliser trucs de curseur dans la ligne de commande .

1
erikbwork

Ajout aux autres meilleures réponses. Un peu trop évident, mais vous pouvez simplement coller avant de supprimer. "Yw" puis choisissez le mot que vous souhaitez remplacer, "pldw" (collez, déplacez un caractère vers la droite, supprimez Word.

1
Ali Almoullim

Tout d'abord, accédez au début du mot que vous souhaitez extraire. Si vous êtes au milieu de Word, faites simplement b pour revenir au début. Ensuite, faites ye pour extraire le mot entier, sans tout espace de fin (yank vers end). Enfin, allez dans le mot que vous souhaitez remplacer - peut-être en faisant w plusieurs fois - et faites un vep pour entrer v mode de sélection visuel, sélectionnez le end du Word et paste le dernier contenu récupéré.

(Si quelqu'un veut savoir pourquoi je n'ai pas simplement commenté la réponse acceptée, pour la petite modification de l'utilisation de ye plutôt que yw, c'est parce que ma réputation sur cette pile est encore trop faible .)

0
Anomaly

J'utilise le mappage de touches ci-dessous pour remplacer le mot actuel par un mot copié.
" replace with Register 0
map <leader>rr ciw<C-r>0<Esc>

yiw copier un mot. Accédez à un mot. ,rr remplacez la Parole.
La touche de repère est mappée sur ,.

0
Fisher
  1. utilisez yw pour arracher le monde, allez dans le monde que vous voulez changer.
  2. utilisez v pour sélectionner le monde, ve ou vw selon votre situation.
  3. entrez p pour coller le monde que vous avez copié pour remplacer le bloc sélectionné
0
ramwin

Mon conseil/suggestion: plugin vim-exchange . cela aide à échanger des mots comme celui-ci:

Marquez le premier mot à échanger -> cxiw, puis appuyez sur le point ..

Si vous utilisez vim-plug, utilisez simplement:

Plug 'tommcdo/vim-exchange'

Alors

:PlugInstall

Dans le cas d'un autre gestionnaire de plugins, suivez la documentation

0
SergioAraujo

J'utilise ce plugin pour étendre la région de sélection: https://github.com/terryma/vim-expand-region

Donc ma combinaison pour changer un mot sera: vvpà n'importe quel endroit d'un mot.

J'ai également un hack pour enregistrer le contenu du registre sans nom après le collage afin que je puisse répéter cela.

vnoremap p p:let @"=@0 <CR>
vnoremap P P:let @"=@0 <CR>

(mon presse-papiers est à sélection automatique)

0
user2656799