Ajout de parenthèses autour du texte en surbrillance dans Vim

14

Existe-t-il une fonctionnalité dans Vim qui permet d'ajouter des parenthèses autour du texte en surbrillance?

Par exemple, si je souligne n = getchar()dans if (n = getchar() == '\n'), je voudrais mettre entre parenthèses autour de cela.

mrQWERTY
la source

Réponses:

18

Vous avez besoin d'un plugin surround génial et indispensable . Ensuite, il fera heureusement ce que vous voulez si vous sélectionnez du texte et tapez Sb(accolades), ou S)(notez le S majuscule!).

En fait, il peut faire beaucoup d'entourage: diverses guillemets, balises, etc. Il vous permet de placer le curseur dans le mot entre guillemets et de changer les guillemets doubles en guillemets simples en tapant: cs"'(change-surround "to '). Ou vous pouvez supprimer complètement les citations en tapant ds"(delete-surround ").

Lisez les documents par lien, c'est vraiment génial!

Dmitry Frank
la source
1
Cependant, vous n'avez pas expliqué comment procéder avec la sélection. Je me suis fait conduire ici parce que ce n'était pas immédiatement évident.
JackHasaKeyboard
@JackHasaKeyboard, que voulez-vous dire, je n'ai pas expliqué comment le faire avec la sélection? La deuxième phrase de ma réponse dit:> Ensuite, il fera volontiers ce que vous voulez si vous sélectionnez du texte et tapez sb(accolades), ou s).
Dmitry Frank
1
Vous l'avez fait. Ne fonctionne pas pour moi cependant, frapper ssupprime simplement la sélection et passe en mode insertion.
JackHasaKeyboard
1
Cela signifie que le plugin "surround" que j'ai mentionné dans ma réponse n'est pas correctement installé.
Dmitry Frank
Génial en effet. Je l'utilise depuis un moment et je peux parier.
biocyberman
20

En plus de la suggestion de Dmitry du plugin surround , l'ajout de parenthèses autour du texte en surbrillance peut être fait avec la commande suivante:

xi()<Esc>P

Vous pouvez définir une carte en mode visuel à l'aide (par exemple) \sen ajoutant ce qui suit à votre ~/.vimrcfichier:

xnoremap <leader>s xi()<Esc>P
dotancohen
la source
1
Cela ressemble à une solution simple et agréable. Si je ne trouve aucun problème avec cela à l'avenir, je préférerai cela à des plugins supplémentaires. Merci!
Zelphir Kaltstahl
3
C'est une bonne solution, mais pas aussi complète que l'utilisation du plugin surround car cela ne fonctionne pas si vous sélectionnez des lignes entières (en utilisant Vau lieu de v). Dans ce cas, il colle simplement les lignes sous vos parens.
Rohan Orton
1

lh-brackets se lie simplement (pour entourer la sélection avec les crochets. Contrairement au surround, il ne suit pas la philosophie habituelle de liaison de touches de Vim. Au lieu de cela, moins de clés sont nécessaires.

Sinon, il existe de nombreuses façons de procéder. Si cela ne vous dérange pas de gâcher le registre sans nom, vous utilisez également s(^R")<esc>( ^Rcomme CTRL-R)

Luc Hermitte
la source
0

S'appuyant sur la réponse de dotancohens, j'ai mis ce qui suit dans mon .vimrc:

xnoremap <leader>( <ESC>`>a)<ESC>`<i(<ESC>

Vous pouvez facilement faire des mappages similaires pour [], {}, etc. Cela fonctionne en sautant aux marqueurs de début et de fin définis implicitement après la fin du mode visuel. De cette façon, la sélection de lignes entières ajoutera les parens au début / à la fin de la première / dernière ligne; il n'écrasera pas votre registre yank; et il laissera le curseur juste avant la paren d'ouverture.

Vir
la source