176 votes

Comment joindre deux lignes dans vi ?

J'ai deux lignes dans un fichier texte comme ci-dessous :

S<Switch_ID>_F<File type>
_ID<ID number>_T<date+time>_O<Original File name>.DAT

Je veux ajouter les deux lignes dans vi comme ci-dessous :

S<Switch_ID>_F<File type>_ID<ID number>_T<date+time>_O<Original File name>.DAT

La deuxième ligne a été supprimée et le contenu de la deuxième ligne a été ajouté à la première ligne.

Comment pourrais-je le faire en utilisant le mode commande dans vi ?

0 votes

Question sans rapport : pourquoi avons-nous besoin de joindre deux lignes ?

0 votes

@RishabhBhatnagar, car nous avons besoin qu'elles soient jointes.

0 votes

Comme J est une clé très facilement accessible, la jointure doit être l'une des opérations les plus fréquemment utilisées. Je voulais juste connaître les cas d'utilisation où les jointures sont nécessaires.

330voto

GJ. Points 1609

Shift + J supprime le caractère de changement de ligne de la ligne en cours, de sorte qu'en appuyant sur "J" à n'importe quel endroit de la ligne, vous pouvez combiner la ligne en cours et la ligne suivante de la manière que vous souhaitez.

29 votes

"supprime le caractère de changement de ligne de la ligne actuelle" est une façon plutôt maladroite de décrire ce que fait J, et n'est pas non plus vraiment correct. J "joint" cette ligne à la suivante. Dans le processus, il supprime la nouvelle ligne, mais manipule également l'espace blanc d'autres manières.

62voto

Maxim Kim Points 2801

Vi ou Vim ?

Quoi qu'il en soit, la commande suivante fonctionne pour Vim en mode "non compatible". C'est, je suppose, presque du vi pur.

:join!

Si vous voulez le faire à partir d'une commande normale, utilisez

gJ

Avec 'gJ', vous joignez les lignes telles quelles, sans ajouter ni supprimer d'espaces :

S<Switch_ID>_F<File type>
_ID<ID number>_T<date+time>_O<Original File name>.DAT

Résultat :

S<Switch_ID>_F<File type>_ID<ID number>_T<date+time>_O<Original File name>.DAT

Avec la commande 'J', vous aurez :

S<Switch_ID>_F<File type> _ID<ID number>_T<date+time>_O<Original File name>.DAT

Notez l'espace entre type> y _ID .

2 votes

Je veux juste souligner que g/pattern/join travaille dans le VIM tandis que g/pattern/J ne le fait pas. Ça pourrait aider certaines personnes à l'avenir.

0 votes

J'aime votre modèle de jointure, mais il joint deux lignes avec un espace blanc. Comment joindre deux lignes avec un motif sans espace blanc ?

0 votes

G/pattern/join ! semble le faire.

25voto

samg Points 1900

Cela devrait le faire :

J

6 votes

Le "J" donne un espace supplémentaire pour joindre les lignes.

4 votes

@MaximKim : Et c'est pourquoi . Notez que :h J vous indiquera comment désactiver cette fonction.

2 votes

Utilice gJ si vous ne voulez pas que vim ajoute un espace quand il joint les lignes

17voto

Laurence Gonsalves Points 50783

En vi, J (c'est Shift + J ) ou :join devrait faire ce que vous voulez, pour la plupart. Notez qu'ils ajustent les espaces blancs. En particulier, dans de nombreux cas, vous vous retrouverez avec un espace entre les deux lignes jointes, et si la deuxième ligne est indentée, cette indentation sera supprimée avant la jonction.

Dans Vim, vous pouvez également utiliser gJ ( G entonces Shift + J ) ou :join! . Ceux-ci joindront les lignes sans faire d'ajustements d'espacement.

Dans Vim, voir :help J pour plus d'informations.

0 votes

Une mise en garde s'impose lorsque vous utilisez gJ y J est que les deux changent le curseur au point de jonction, mais :join! y :join dont.

5voto

Carsten C. Points 93

Il suffit de remplacer le " \n " avec "".

Dans vi/Vim pour chaque ligne du document :

%s/>\n_/>_/g

Si vous voulez confirmer chaque remplacement :

%s/>\n_/>_/gc

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X