Sélectionnez les lignes, puis appuyez sur :
pour passer en mode commande. Vim remplira automatiquement '<,'>
, ce qui limite la portée aux lignes sélectionnées. Pour votre exemple, vous pouvez utiliser la commande :s
pour faire l'échange:
:'<,'>s/\(\w\+\), \(\w\+\)/\2, \1/
Cela échanger deux mots séparés par une virgule sur chaque ligne dans la sélection visuelle.
Vous pouvez également utiliser '<
et '>
comme tout autre signet ou position de ligne, par ex. en tant que partie d'une commande de mouvement, donc en mode normal d'<
va supprimer de la position actuelle du curseur au début de la première ligne dans la sélection visuelle. Les marques restent actives même si le bloc n'est plus surligné visuellement.
Si vous souhaitez relire une macro enregistrée sur chaque ligne, vous devez exécuter la macro avec la commande :normal
. Malheureusement, la commande :normal
ne fonctionne pas sur une plage de lignes, mais vous pouvez la corriger avec la commande :global
. Cela exécute une commande :ex
sur chaque ligne qui correspond à une expression régulière, vous pouvez le faire:
:'<,'>g/^/ norm @a
Explication:
:'<,'> for every line in the visual block
g/^/ on every line that matches the regex /^/ - i.e. every line
norm run in normal mode
@a the macro recorded in a
Pour être honnête, je ferais probablement cette tâche particulière avec regex. Mais la question est toujours valable pour les cas plus complexes. –
Pourquoi vim? À mon avis, sed est plus approprié. – kokosing
@kogut: Pourquoi quitter votre éditeur pour éditer votre texte avec une regex à une ligne? – Stephen