Je veux envelopper du code:

myObj.text;

Avec un appel de fonction où le code est passé en argument.

console.log(myObj.text);

J'ai pensé à utiliser surround.vim pour le faire mais je n'y suis pas parvenu.

Une idée si c'est possible? je

9
Florian F 27 juil. 2017 à 18:02

2 réponses

Meilleure réponse

Avec Surround en mode normal:

ysiwfconsole.log<CR>

Avec Surround en mode visuel:

Sfconsole.log<CR>

Sans Surround en mode normal:

ciwconsole.log(<C-r>")<Esc>

Sans Surround en mode visuel:

cconsole.log(<C-r>")<Esc>

Mais ce n'est pas très évolutif. Un mapping serait certainement plus utile car vous devrez certainement le faire souvent:

xnoremap <key> cconsole.log(<C-r>")<Esc>
nnoremap <key> ciwconsole.log(<C-r>")<Esc>
11
romainl 27 juil. 2017 à 21:57

Je connais et utilise deux façons différentes d'accomplir cela:


Variante 1:

  1. Sélectionnez le texte que vous souhaitez envelopper en mode visuel (appuyez sur v suivi des mouvements appropriés).

  2. Remplacez ce texte en appuyant sur c, puis saisissez votre appel de fonction console.log(). (L'ancien texte n'est pas parti, il est simplement déplacé dans un registre, d'où il sera rapidement récupéré à l'étape 3.) Appuyez sur <esc> pendant que vous êtes derrière la parenthèse fermante, cela devrait vous laisser sur le {{X3 }} personnage.

  3. Collez le texte remplacé entre parenthèses en appuyant sur P (ceci s'insère avant le caractère sur lequel vous vous trouvez actuellement, donc juste entre le ( et le )).

La séquence entière est v<movement>c<functionName>()<esc>P.


Variante 2:

Alternativement à quitter le mode insertion et à coller depuis le mode normal, vous pouvez tout aussi bien coller directement à partir du mode insertion en appuyant sur <strg>R suivi de ".

La séquence entière est v<movement>c<functionName>(<strg>R")<esc>.

2
Community 20 juin 2020 à 09:12