GNU/Linux >> Tutoriels Linux >  >> Linux

Comment joindre la ligne suivante lorsqu'une ligne correspond à une expression régulière pour un document entier dans Vi ?

J'ai des lignes comme

abcdefgjoin!
abcdef
no join
abcdefgjoin!

Si une ligne correspond à la regex ^a.+g$ alors je voudrais qu'ils soient rejoints, donc ce serait :

abcdefgjoin!
abcdef
no join
abcdefgjoin!

Existe-t-il un moyen de le faire dans VIM ?

Réponse acceptée :

En mode normal, J (à distinguer de j , qui déplace le curseur vers le bas d'une ligne) est utilisé pour joindre une ligne avec celle qui se trouve juste en dessous. Cependant, par défaut, il ajoute un espace à la fin de la première ligne; pour obtenir le résultat souhaité (joindre les lignes sans insérer d'espace supplémentaire), il faudrait utiliser gJ .

Afin d'utiliser les commandes en mode normal en mode ex (que vous entrez en appuyant sur : en mode normal), il faut utiliser le normal commande. Voir :h normal au sein de vim. Donc, pour travailler avec la ligne suivante qui correspond au motif, on utiliserait (notez que par défaut, vous devez échapper le + pour le faire fonctionner avec la regex de vim, une conséquence du maintien de la compatibilité avec l'ancien moteur de regex de vi) :

:/^a.\+g$/normal gJ

Pour travailler sur chaque ligne qui correspond au motif, on utiliserait le :global commande (voir :h :g dans vim) comme ceci :

:global/^a.\+g$/normal gJ

Ou, plus concis :

:g/^a.\+g$/norm gJ

Il est également possible d'utiliser la commande ex join (voir :h :join ) pour obtenir la même chose avec un peu moins de saisie (le ! à la fin, dans ce cas, indique join de ne pas insérer d'espace à la fin de la première ligne).

:g/^a.\+g$/join!

Linux
  1. 8 conseils pour la ligne de commande Linux

  2. Comment créer un tar compressé lorsqu'il y a trop de noms de fichiers pour que le shell puisse les développer sur une seule ligne ?

  3. Comment entrer les informations de connexion pour un site Web à partir de la ligne de commande Linux

  4. Comment afficher les paramètres de ligne de commande du noyau Linux donnés pour le démarrage en cours ?

  5. Comment rechercher l'ensemble des pages de manuel sous Linux ?

4 outils Markdown pour la ligne de commande Linux

Comment utiliser Ranger pour naviguer dans les fichiers à partir de la ligne de commande

Comment nettoyer vos données dans la ligne de commande

3 gestionnaires de mots de passe pour la ligne de commande Linux

Comment rechercher des fichiers à partir de la ligne de commande Linux

Comment effacer le numéro de ligne dans Vim lors de la copie ?