Comment sélectionner entre parenthèses (ou guillemets ou ...) dans Vim?

je suis sûr qu'il y avait un plugin pour ce genre de choses, mais maintenant que j'en ai besoin, Je ne peux pas sembler le trouver (naturellement), donc je vais juste demander gentiment et simplement.

Quelle est la façon la plus facile de sélectionner entre parenthèses, ou entre guillemets, ou généralement une liste de caractères correspondants?

   write ( *, '(a)' ) 'Computed solution coefficients:'

par exemple, ici je voudrais sélectionner (a) , ou Computed solution coefficients: .

Je ne suis pas intéressé par multiligne, juste les cas qui se produisent sur une seule ligne.

191
demandé sur Randall 2009-06-30 09:54:31

9 réponses

utilisez n'importe quelle clé de navigation que vous voulez obtenir à l'intérieur des parenthèses, alors vous pouvez utiliser soit yi( ou yi) pour copier tout ce qui se trouve dans les paren correspondants. Cela fonctionne également avec des crochets (par exemple yi] ) et des accolades. En plus de y , vous pouvez également supprimer ou modifier le texte (par exemple ci) , di] ).

j'ai essayé cela avec simple et double-guillemets et il semble fonctionner. Pour vos données, je ne:

write (*, '(a)') 'Computed solution coefficients:'

déplacez le curseur sur le C , puis tapez yi' . Déplacez le curseur sur une ligne vide, appuyez sur p , et obtenez

Computed solution coefficients:

comme CMS a noté , cela fonctionne pour la sélection de mode visuel ainsi - juste l'utilisation vi) , vi} , vi' , etc.

243
répondu Tim Whitcomb 2017-05-23 12:10:43

pour sélectionner entre les guillemets simples, je fais habituellement un vi' ("sélectionner les guillemets simples").

dans un bloc entre parenthèses, j'utilise vib ("sélectionner le bloc intérieur")

dans un bloc de bretelles bouclées vous pouvez utiliser viB ("capital B")

pour rendre les sélections" inclusives "(sélectionnez également les guillemets, les parenthèses ou les accolades), vous pouvez utiliser a au lieu de i .

Vous pouvez en savoir plus sur le text object selections dans le manuel.

216
répondu CMS 2016-03-31 17:25:42

cette méthode de sélection est intégrée et bien couverte dans L'aide Vim. Il couvre les balises XML et plus.

voir :help text-objects .

26
répondu michael 2016-03-31 17:33:04

pour sélectionner entre guillemets, utilisez vi' .

pour sélectionner entre parenthèses utiliser vi( .

17
répondu Canopus 2016-03-31 17:26:54

utilisez les flèches ou hjkl pour accéder à l'une des expressions entre crochets, puis v pour sélectionner le mode visuel (sélection), puis % pour passer à l'autre bracket.

7
répondu Stobor 2016-03-31 17:27:39

Ecrire une fonction Vim .vimrc utilisant la fonction searchpair intégrée:

searchpair({start}, {middle}, {end} [, {flags} [, {skip}
            [, {stopline} [, {timeout}]]]])
    Search for the match of a nested start-end pair.  This can be
    used to find the "endif" that matches an "if", while other
    if/endif pairs in between are ignored.
    [...]

( http://vimdoc.sourceforge.net/htmldoc/eval.html )

3
répondu Adrian Panasiuk 2016-03-31 17:33:31

j'ajouterais un détail à la réponse la plus votée:

si vous utilisez gvim et que vous voulez copier sur le bloc-notes, utilisez

"+<command>

pour copier tout le contenu entre parenthèses (ou entre parenthèses ou entre crochets)

par exemple: "+yi} copiera dans le presse-papiers tout le contenu entre les crochets que votre curseur est.

2
répondu yuriploc 2017-02-09 19:48:35

j'ai fait un plugin vim-textobj-quotes : https://github.com/beloglazov/vim-textobj-quotes

il fournit des objets de texte pour les paires les plus proches de citations de n'importe quel type. En utilisant seulement iq ou aq il vous permet d'opérer sur le contenu des guillemets simples ('), doubles ( " ), ou en arrière (`) qui entourent actuellement le curseur, sont en face du curseur, ou en arrière (dans cet ordre de préférence). En d'autres termes, il saute en avant ou en arrière quand il le faut pour atteindre les guillemets.

c'est plus facile à comprendre en regardant des exemples (le curseur est montré avec | ):

  1. avant: foo '1, |2, 3' bar ; après pressage diq : foo '|' bar
  2. avant: foo| '1, 2, 3' bar ; après pressage diq : foo '|' bar
  3. avant: foo '1, 2, 3' |bar ; après pressage diq : foo '|' bar
  4. Avant: foo '1, |2, 3' bar ; après pressage daq : foo | bar
  5. avant: foo| '1, 2, 3' bar ; après pressage daq : foo | bar
  6. avant: foo '1, 2, 3' |bar ; après pressage daq : foo | bar

les exemples ci-dessus sont donnés pour les guillemets simples, le plugin fonctionne exactement de la même manière pour les guillemets doubles ( " ) et back ( ` ).

Vous pouvez également utiliser d'autres opérateurs: ciq , diq , yiq , viq , etc.

, jetez un oeil à la page github lié ci-dessus pour plus de détails.

1
répondu Anton Beloglazov 2014-04-09 10:05:13

un simple keymap dans vim résoudrait ce problème. carte viq f "lvf"hh Cette commande ci-dessus place viq sur les touches de recherche entre guillemets. Remplacer " par n'importe quel caractère et créer vos keymaps. Coller ceci dans vimrc pendant le démarrage et vous devriez être en mesure de l'utiliser à chaque fois.

-7
répondu 2009-07-30 12:53:33