web-dev-qa-db-fra.com

Supprimer la nouvelle ligne dans Vim

Existe-t-il un moyen de supprimer la nouvelle ligne à la fin d'une ligne dans Vim, de sorte que la ligne suivante soit ajoutée à la ligne actuelle?

Par exemple:

Evaluator<T>():
    _bestPos(){
}

Je voudrais mettre tout cela sur une ligne sans copier les lignes et les coller dans la précédente. Il semble que je devrais être capable de placer le curseur à la fin de chaque ligne, d'appuyer sur une touche et de faire passer la ligne suivante à la même ligne que celle sur laquelle se trouve le curseur.

Résultat final:

Evaluator<T>(): _bestPos(){ }

Est-ce possible dans Vim?

250
derekerdmann

Si vous êtes sur la première ligne, appuyez sur (majuscule) J va rejoindre cette ligne et la ligne suivante ensemble, en supprimant la nouvelle ligne. Vous pouvez également combiner ceci avec un nombre, de sorte que vous appuierez sur 3J pour combiner les 3 lignes.

547
Xhantar

Certainement. Vim reconnaît le caractère\n comme une nouvelle ligne. Vous pouvez donc simplement rechercher et remplacer. En mode commande, tapez:

:%s/\n/
75
TinkerTank

Alors que sur la ligne supérieure en mode normal, appuyez sur Shift+j.

Vous pouvez aussi ajouter un nombre, de sorte que 3J sur la ligne supérieure joignent toutes ces lignes.

48
Alligator

J supprime tout espacement supplémentaire (le cas échéant), reliant les lignes avec un seul espace. (À quelques exceptions près: après /[.!?]$/, deux espaces peuvent être insérés; avant /^\s*)/, aucun espace n'est inséré.)

Si vous ne voulez pas ce comportement, gJ supprime simplement la nouvelle ligne et ne fait rien d'intelligent avec des espaces.

32
ephemient

Comme d'autres réponses mentionnées, (majuscule) J et search + replace for \n peuvent généralement être utilisés pour supprimer les caractères de nouvelle ligne et concaténer des lignes.

Mais pour vous débarrasser du caractère de fin de ligne dans la dernière ligne, vous devez le faire dans Vim:

:set noendofline binary
:w
25
Nestor Waldyd

Tous les éléments suivants supposent que votre curseur se trouve sur la première ligne:

Utilisation de mappages normaux:

3Shift+J

Utiliser les commandes Ex:

:,+2j

Qui est une abréviation de

:.,.+2 join

Qui peut également être entré par le raccourci suivant:

3:j

Une commande Ex encore plus courte:

:j3
10
kzh
set backspace=indent,eol,start

dans votre .vimrc vous permettra d’utiliser backspace et delete sur \n (nouvelle ligne) en mode insertion.

set whichwrap+=<,>,h,l,[,]

vous permettra de supprimer le précédent LF en mode normal avec X (en col 1).

5
laktak

Cela dépend probablement de vos paramètres, mais je le fais habituellement avec A<delete>

A est ajouté à la fin de la ligne. Cela nécessite probablement le mode nocompatible :)

2
Wolph
<CURSOR>Evaluator<T>():
    _bestPos(){
}

curseur en première ligne

MAINTENANT, en MODE NORMAL,

shift+v
2j
shift+j

ou

V2jJ

: V2jJ normal

2
Ivan Lopes

Je voudrais simplement appuyer sur A (ajouter à la fin de la ligne, vous met en mode insertion) sur la ligne où vous souhaitez supprimer la nouvelle ligne, puis appuyez sur Supprimer.

1
David Watson

si cela ne vous dérange pas d'utiliser d'autres outils Shell,

tr -d "\n" < file >t && mv -f t file

sed -i.bak -e :a -e 'N;s/\n//;ba' file

awk '{printf "%s",$0 }' file >t && mv -f t file
1
ghostdog74

Le problème est que les multiples caractères 0A (\ n) invisibles peuvent s’accumuler. Supposons que vous souhaitiez nettoyer la ligne 100 jusqu'à la fin:

Taper ESC et: (commandant de terminal)

:110,$s/^\n//

Dans un script vim:

execute '110,$s/^\n//'

Explication: de 110 jusqu'à la fin, recherchez les lignes qui commencent par une nouvelle ligne (sont vides) et supprimez-les.

1
Sergio Abreu