Supprimer newline dans Vim

y a-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(){
}

j'aimerais mettre tout cela sur une seule ligne sans copier les lignes et les coller dans la précédente. Il semble que je devrais être en mesure de mettre mon curseur à la fin de chaque ligne, appuyez sur une touche, et avoir la ligne suivante, sautez sur le même que le curseur est sur.

fin résultat:

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

est-ce possible à Vim?

221
demandé sur derekerdmann 2010-10-21 04:32:15

12 réponses

si vous êtes sur la première ligne, en appuyant sur (majuscule) J vous joindrez cette ligne et la ligne suivante ensemble, en enlevant la nouvelle ligne. Vous pouvez également combiner cela avec un nombre, ainsi en appuyant sur 3J combinera toutes les 3 lignes ensemble.

495
répondu Xhantar 2016-09-07 14:48:06

certainement. Vim reconnaît le caractère \n comme une nouvelle ligne, donc vous pouvez simplement rechercher et remplacer. En mode Commande type:

:%s/\n/
70
répondu TinkerTank 2010-10-21 00:35:35

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

vous pouvez aussi préparer un compte, donc 3J sur la ligne du haut joindrait toutes ces lignes ensemble.

47
répondu Alligator 2017-01-11 01:09:33

J supprime l'espacement de tête supplémentaire (s'il y a lieu), en joignant 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 de intelligent avec les espaces du tout.

31
répondu ephemient 2010-11-12 06:48:48

Dans vim:

:set noendofline binary
:w
11
répondu Nestor Waldyd 2016-05-27 21:44:04

tout ce qui suit suppose que votre curseur est sur la première ligne:

utilisant les correspondances normales:

3 Poste + J "151990920

utilisant les commandes Ex:

:,+2j

qui est une abréviation de

:.,.+2 join

qui peut aussi être saisi par le raccourci suivant:

3 : j

Un encore plus courte commande Ex:

:j3
9
répondu kzh 2013-08-26 01:08:05
set backspace=indent,eol,start

dans votre .vimrc vous permettra d'utiliser backspace et delete sur \n (newline) en mode insertion.

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

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

4
répondu laktak 2016-12-27 10:13:48

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

A est ajouté à la fin de la ligne. Il est probablement nécessaire "151920920 mode":)

2
répondu Wolph 2010-10-21 00:36:53
<CURSOR>Evaluator<T>():
    _bestPos(){
}

curseur à la première ligne

maintenant, en MODE NORMAL do

shift+v
2j
shift+j

ou

V2jJ

: normal V2jJ

2
répondu Ivan Lopes 2013-02-16 07:19:40

il suffit d'appuyer sur A (ajouter à la fin de la ligne, vous met en mode insertion) sur la ligne où vous voulez supprimer la nouvelle ligne, puis appuyer sur Supprimer.

1
répondu David Watson 2010-10-21 00:36:55

si vous n'avez pas l'esprit à l'aide d'autres shell outils,

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

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

awk '{printf "%s","151900920" }' file >t && mv -f t file
1
répondu ghostdog74 2010-10-21 00:42:57

le problème est que les multiples char 0A (\n) qui sont invisibles peuvent s'accumuler. Supose vous voulez nettoyer de la ligne 100 à la fin:

taper ESC et: (terminal commander)

:110,$s/^\n//

Dans un script vim:

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

explication: de 110 jusqu'à la fin rechercher les lignes qui commencent par une nouvelle ligne (sont vides) et les enlever

1
répondu Sergio Abreu 2017-01-10 22:38:48