Un modèle d'édition que je rencontre fréquemment est le suivant: Je veux extraire un morceau de texte entre guillemets ou crochets et remplacer ce morceau de texte dans une autre paire de guillemets / crochets.
Par exemple, si je veux copier le nom de la classe foo bar
et le coller ailleurs:
<span class="foo bar">
<div class="this-should-be-replaced-with-foo-and-bar">
Ce que je sais, c'est ceci: si je me déplace à l'intérieur de la classe du span, j'utilise yi"
pour tirer le texte à l'intérieur des guillemets.
Maintenant, je l'ai dans mon registre, je devrais donc être en mesure de remplacer le contenu de la classe du div par lui. Mais je ne trouve pas de moyen pratique de le faire.
Si j'utilise ciw
cela finit par écraser mon registre avec du contenu à changer, alors je perds mon texte tiré.
La meilleure chose que je puisse trouver est de passer à la première citation de la classe du div, de frapper p
, puis de supprimer la citation suivante avec dt"
.
Habituellement, je fous ma position, et je la colle quelque part dans les guillemets fusionnant les deux chaînes, et ça gâche les choses.
J'espère qu'il existe un moyen de faire une combinaison "remplacer le texte intérieur par mon contenu tiré s'il vous plaît" pour rendre cela plus facile.
la source
Vous pouvez utiliser le registre numéroté. Commencez par "foo-bar"
yi"
, qui remplira le"0
registre, voir:h "0
. Faites ensuiteci"<c-r>0
pour remplacer par le contenu du registre 0.Voir
:h i_CTRL-R
pour une description de la dernière partie.la source
yi"
) et le coller du registre0
où il est stocké après avoir supprimé le texte à modifier (ci"<c-r>0
)? En terme de vimgolf vous gagnez 2 frappes et vous ne jouez pas avec vos registres.CTRL+r
avanta
, c'est ce que cela<c-r>
signifie.ciw
fait, met le texte supprimé dans le registre sans nom mais les registres sont décalés, c'est pourquoi vous devez utiliser à la<c-r>0
place de<c-r>"
. Tu vois:h quote_number
."0
registre n'est rempli que par la commande yank et ne sera pas perturbé par exemplec
.Voici une autre solution. Ce n'est pas le meilleur en terme de Vimgolf, mais il utilise le registre des trous noirs:
Une fois que vous êtes sur la
foo bar
chaîne, vous pouvez le tirer normalement en utilisantyi"
.Puis à l'intérieur des crochets pour changer:
"_di"P
Lequel est:
L'avantage du registre de trou noir est qu'il ne gâchera pas vos autres registres. Voir
:h quote_
pour plus de détails.(Notez que cette réponse n'est là que pour parler du registre d'interruption. J'utilise personnellement la sélection visuelle comme suggéré par @grodzik.)
la source
P
pour celui-là. Lorsque vousdi"
votre curseur sera laissé sur les dernières citations etp
collera après, où commeP
collera avant la position actuelle.J'en ai besoin si souvent, j'ai écrit un plugin pour simplifier et permettre une vitesse maximale: ReplaceWithRegister .
Ce plugin offre 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 la.
commande standard . Si vous ne l'aimez pas, sa page contient des liens vers des alternatives.la source