it-swarm.com.de

Zeilenumbruch in Vim löschen

Gibt es eine Möglichkeit, die neue Zeile am Ende einer Zeile in Vim zu löschen, sodass die nächste Zeile an die aktuelle Zeile angehängt wird?

Zum Beispiel:

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

Ich möchte dies alles auf eine Zeile setzen, ohne Zeilen zu kopieren und in die vorherige einzufügen. Es scheint, als könnte ich den Cursor an das Ende jeder Zeile setzen, eine Taste drücken und die nächste Zeile auf dieselbe Zeile springen lassen, auf der sich der Cursor befindet.

Endresultat:

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

Ist das in Vim möglich?

250
derekerdmann

Wenn Sie sich in der ersten Zeile befinden, drücken Sie (Großbuchstaben) J Fügt diese und die nächste Zeile zusammen und entfernt die neue Zeile. Sie können dies auch mit einer Zählung kombinieren. Drücken Sie also 3J fügt alle 3 Zeilen zusammen.

547
Xhantar

Bestimmt. Vim erkennt das Zeichen\n als eine neue Zeile, sodass Sie einfach suchen und ersetzen können. Im Befehlsmodus Typ:

:%s/\n/
75
TinkerTank

Während Sie sich im normalen Modus in der oberen Zeile befinden, drücken Sie Shift+j.

Sie können auch eine Zählung voranstellen, also 3J in der obersten Zeile würde alle diese Zeilen zusammenfügen.

48
Alligator

J löscht (falls vorhanden) zusätzliche führende Abstände und verbindet Zeilen mit einem einzelnen Leerzeichen. (Mit einigen Ausnahmen: nach /[.!?]$/ dürfen zwei Leerzeichen eingefügt werden; Vor /^\s*)/, es werden keine Leerzeichen eingefügt.)

Wenn Sie dieses Verhalten nicht möchten, entfernt gJ einfach den Zeilenumbruch und geht mit Leerzeichen überhaupt nicht klug um.

32
ephemient

Wie bereits erwähnt, (Großbuchstaben) J und suchen + ersetzen nach \n kann allgemein zum Entfernen von Zeilenumbrüchen und zum Verketten von Zeilen verwendet werden.

Aber um das abschließende Newline-Zeichen in der letzten Zeile loszuwerden, müssen Sie dies in Vim tun:

:set noendofline binary
:w
25
Nestor Waldyd

In allen folgenden Fällen wird davon ausgegangen, dass sich der Cursor in der ersten Zeile befindet:

Verwenden normaler Zuordnungen:

3Shift+J

Verwenden von Ex-Befehlen:

:,+2j

Welches ist eine Abkürzung für

:.,.+2 join

Welche kann auch durch die folgende Verknüpfung eingegeben werden:

3:j

Ein noch kürzerer Ex-Befehl:

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

in Ihrem .vimrc können Sie backspace und delete auf \n (Newline) im Einfügemodus.

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

damit können Sie die vorherige LF im normalen Modus mit X (in Spalte 1) löschen.

5
laktak

Es hängt wahrscheinlich von Ihren Einstellungen ab, aber ich mache das normalerweise mit A<delete>

Wobei A am Ende der Zeile angehängt wird. Es erfordert wahrscheinlich nocompatible mode :)

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

cursor in der ersten Zeile

JETZT im NORMALMODUS

shift+v
2j
shift+j

oder

V2jJ

: normal V2jJ

2
Ivan Lopes

Ich würde einfach A (an das Zeilenende anhängen, versetzt Sie in den Einfügemodus) in der Zeile drücken, in der Sie die neue Zeile entfernen möchten, und dann Löschen drücken.

1
David Watson

wenn es Ihnen nichts ausmacht, andere Shell-Tools zu verwenden,

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

Das Problem ist, dass sich mehrere Zeichen 0A (\ n) ansammeln können, die nicht sichtbar sind. Angenommen, Sie möchten von Zeile 100 bis zum Ende aufräumen:

Eingabe von ESC und: (Terminal Commander)

:110,$s/^\n//

In einem VIM-Skript:

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

Erläuterung: Suchen Sie von 110 bis zum Ende nach Zeilen, die mit einer neuen Zeile beginnen (leer sind), und entfernen Sie sie

1
Sergio Abreu