Je veux écrire une commande qui spécifie "le mot sous le curseur" dans VIM. Par exemple, disons que j'ai le curseur sur un mot et je le fais apparaître deux fois. Par exemple, si le mot est "abc" et que je veux "abcabc", je pourrais taper:
:s/\(abc\)/\1\1/
Mais alors j'aimerais pouvoir déplacer le curseur sur "def" et utiliser la même commande pour le changer en "defdef":
:s/\(def\)/\1\1/
Comment puis-je écrire la commande dans la ligne de commande pour qu'elle le fasse?
:s/\(*whatever is under the commandline*\)/\1\1
la source
yiw
finbyw
uniquement à cause de la mémoire musculaire. Dans le scénario où votre curseur se trouve déjà sur le premier caractère du mot, vous devez omettre leb
et tapez simplementyw
vs vous pouvez omettre lei
inyiw
. Des accidents peuvent survenir, et réparer une erreur est certainement plus de pressions sur les touches :)En mode ligne de commande, CTRL+ R CTRL+ Winsérera le mot sous le curseur.
Consultez l'aide de
c_CTRL-R
pour une liste de tous les autres registres spéciaux:la source
yiw
: Yank mot interne (le mot sous le curseur). Cette commande déplace également le curseur au début du mot.P
: Coller avant le curseur.Vous pouvez ensuite mapper le eg:
< ALT > - D
à cette commande:la source
Un autre moyen simple de le faire est d'utiliser la
*
commande.En mode normal, sur un mot, saisissez
*
fait du modèle de recherche le mot courant (par exemple \ <abc \>).:s//
effectue une substitution en utilisant le modèle de recherche actuel, et\0
dans la section de remplacement se trouve la chaîne correspondante.Vous pouvez ensuite répéter ce comportement, par-dessus le mot "def", soit en tapant à nouveau la même chose ou en tapant
@:
répète simplement la dernière commande ex, sans avoir besoin d'un <Entrée>, dans ce cas la substitution.Vous pouvez également enregistrer une macro rapide pour ce faire en utilisant la
q
commandePuis répétez-le à votre guise en tapant
quand sur un mot vous voulez doubler. Comme ce n'est qu'un caractère de moins que la solution précédente, cela ne vaut peut-être pas la peine pour vous - à moins que vous ne fassiez d'autres ex-commandes entre le doublage de mots, ce qui changerait le comportement
@:
la source
Vous devez échapper les contre-obliques dans le mappage. Vous pouvez également inclure la chaîne de substitution dans le mappage.
la source
fera ce que vous décrivez.
fera également avancer le curseur jusqu'au mot suivant.
la source
@ user11211 a le moyen le plus simple de dupliquer le mot sous le curseur:
yank mot interne (déplace le curseur au début du mot), collez (avant le curseur).
par exemple. droit [t] avant ----> simple [d] simple
[] est le curseur
Élaborer...
Vous souhaitez probablement que le curseur suive votre mot dupliqué:
droit [t] avant ----> simple droit avant []
REMARQUE:
est un mot intérieur extravagant (sans espace)
est de retirer tous les mots (y compris les espaces de fin).
est donc un mot en double comprenant les espaces et le curseur de position.
droit [t] avant ----> simple simple []
la source
la source
n
indicateur de la:substitute
commande pour afficher le nombre de fois où le mot sous le curseur apparaît dans le tampon actuel. Très intelligent, mais pas vraiment une réponse à cette question.