Je dois (visuellement) sélectionner une plage de lignes à partir de la ligne de commande.
Par exemple, la commande suivante :?^\s*for?+,/^\s*end/- p
imprime toutes les lignes contenues entre a for
et 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.
command-line
visual-mode
nicmus
la source
la source
Réponses:
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 <
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
:mark
commande: les éléments suivants entreront en mode visuel en utilisant les expressions régulièresfoo
etbar
pour définir les limites de la zone de sélection:La commande suivante est une version plus simple de ce qui précède, mais dépend de la position du curseur:
Pour plus d'explications, voir:
:help mark-motions
:help :mark
:help ranges
:help gv
:help v_V
:help :execute
:help search()
help expr-.
la source
?^\s*for?+ mark < | /^\s*end/- mark > | norm gv
+
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
).
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
.