sélection d'une plage de lignes à partir de la ligne de commande

8

Je dois (visuellement) sélectionner une plage de lignes à partir de la ligne de commande.

Par exemple, la commande suivante :?^\s*for?+,/^\s*end/- pimprime toutes les lignes contenues entre a foret end(manière exclusive). Au lieu d'effectuer l'opération d'impression, je voudrais passer en mode visuel avec ces lignes en surbrillance. J'ai cherché dans le manuel mais je n'ai pas trouvé une telle ex-commande.

nicmus
la source
Voulez-vous dire «exclusif»?
Rich
tu as raison! J'ai édité la question
nicmus

Réponses:

7

Les limites d'une sélection de mode visuel sont définies par les marques <et >.

Ainsi, la commande suivante entrera en mode visuel avec les lignes 5 à 10 (incluses) sélectionnées:

 :5mark < | 10mark > | normal gvV
  • :5mark < définit le début de la sélection sur la ligne 5,
  • :10mark > définit la fin de la sélection sur la ligne 10,
  • gv passe en mode visuel avec la zone définie ci-dessus sélectionnée,
  • V effectue la sélection en ligne.

Vous pouvez passer n'importe quelle plage Vim dans la :markcommande: les éléments suivants entreront en mode visuel en utilisant les expressions régulières fooet barpour définir les limites de la zone de sélection:

:execute search("foo") . "mark <" | execute search("bar") . "mark >" | normal gvV

La commande suivante est une version plus simple de ce qui précède, mais dépend de la position du curseur:

/foo/mark < | /bar/mark > | normal gvV

Pour plus d'explications, voir:

Riches
la source
Merci! J'ai résolu avec:?^\s*for?+ mark < | /^\s*end/- mark > | norm gv
nicmus
@nicmus Ah oui, c'est plus simple pour votre usage spécifique. J'ai mis à jour ma réponse.
Rich
Juste pour le bien des futurs lecteurs qui pourraient se demander, le +et -dans le commentaire de @ nicmus ajustent les plages afin que la sélection n'inclue pas les lignes qui correspondent aux expressions régulières. (Voir :help range)
Rich
L' .opérateur de concaténation m'a vraiment égaré alors voici un exemple si quelqu'un ressent la même chose: :execute "l" . "s"produira la même sortie que :ls.
toraritte