Comment spécifier «le mot sous le curseur» sur la ligne de commande de VIM?

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 que je le fais apparaître deux fois. Par exemple, si le mot est “abc” et que je veux “abcabc” alors je pourrais taper:

:s/\(abc\)/\1\1/ 

Mais alors je voudrais pouvoir déplacer le curseur sur “def” et utiliser la même commande pour la changer en “defdef”:

 :s/\(def\)/\1\1/ 

Comment puis-je écrire la commande dans la ligne de commande pour que cela se fasse?

 :s/\(*whatever is under the commandline*\)/\1\1 

est le mot sous le curseur (: help ).

Désolé, j’aurais dû être plus complet dans cette réponse.

Vous pouvez y assigner une commande nmap, ou cette série de frappes au clavier pour le paresseux fonctionnera:

 b #go to beginning of current word yw #yank to register 

Ensuite, lorsque vous tapez votre modèle, vous pouvez appuyer sur 0 qui va coller dans votre commande le contenu du registre 0-th.

Vous pouvez aussi faire une commande comme ceci:

 :nmap w :s/\(=expand("")\)/ 

Qui va mapper en frappant ‘\’ et ‘w’ en même temps pour remplacer votre ligne de commande par

 :s/\(\)/ 

En mode ligne de commande, CTRL + R CTRL + W insère le mot sous le curseur.

Voir l’aide de c_CTRL-R pour une liste de tous les autres registres spéciaux:

 :help c_CTRL-R 
 yiwP 

yiw : Yank mot intérieur (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 par exemple: < ALT > - D sur cette commande:

 :nmap < ALT >-D yiwP 

Une autre façon simple de procéder consiste à utiliser la commande * .

En mode normal, sur un mot, tapez

 *:s//\0\0 

* rend le motif de recherche le mot actuel (par exemple, \ ).

:s// fait une substitution à l’aide du modèle de recherche actuel et \0 dans la section de remplacement correspond à la chaîne correspondante.

Vous pouvez alors répéter ce comportement, dire le mot “def”, soit en le tapant à nouveau, soit en tapant

 *@: 

@: répète simplement la dernière commande ex, sans avoir besoin d’un , dans ce cas la substitution.

Vous pouvez également enregistrer une macro rapide pour ce faire en utilisant la commande q

 qd*:s//\0\0q 

Ensuite, répétez le contenu de votre coeur en tapant

 @d 

quand sur un mot vous voulez doubler. Comme il ne s’agit que d’un caractère inférieur à la solution précédente, cela ne vaut peut-être pas la peine – à moins que vous ne fassiez d’autres commandes entre le doublage de mots, ce qui changerait le comportement de @:

Vous devez échapper aux barres obliques inverses dans le mappage. Vous pouvez également inclure la chaîne de substitution dans le mappage.

 :nmap w :s/\\(=expand("")\\)/\\1\\1 
 ywPx 

fera ce que vous décrivez.

 ywPxw 

fera également avancer le curseur au mot suivant.

@ user11211 a le moyen le plus simple de dupliquer le mot sous le curseur:

 yiwP 

yank mot interne (déplace le curseur au début du mot), coller (avant le curseur).

par exemple. straigh [t] forward —-> straightforwar [d] simple

[] est le curseur

Élaborer…

Vous voulez probablement avoir le curseur suivant votre mot dupliqué:

 yiwPea 

straigh [t] avant —-> simple directement []

REMARQUE:

 yiw 

est un mot intérieur vide (sans espace)

 yaw 

est tout mot (y compris les espaces).

 yawPea 

est donc un mot dupliqué incluant un espace et un curseur de position.

straigh [t] avant —-> simple, direct []

 " count word (case sensitive) nmap  :%s/\(=expand("")\)//gn