Warum hat p eine kopierte Zeile nach der aktuellen Zeile anstatt nach dem aktuellen Wort eingefügt?

12

Angenommen, ich habe die folgenden vier Zeilen:

line1
line2
line3
line4

Wenn ich nun gehe line1und mache, yywas die Zeile kopiert, und dann gehe line3und füge mit 'p' ein, würde ich bekommen

...
line3
line1
line4
....

Warum wurde line1danach line3eine neue Zeile eingefügt?

Meine Initiale war jedoch, weil das Zeilenumbruchzeichen $ an Zeile 3 angehängt war und als ich pvim drückte, line3$als ein Wort angesehen wurde, so dass es nachher eingefügt wurde line3$. Mein Verständnis scheint jedoch falsch zu sein. Denn wenn ich das tue line3 $und dann pam Zeilenanfang ein tue, erhalte ich das gleiche Ergebnis.

Warum wird peine neue Zeile erstellt und danach eine neue Zeile eingefügt line3?

James Franco
quelle

Antworten:

20

Wenn Sie die Zeile mit gelöscht haben dd, haben Sie ein zeilenweises Löschen durchgeführt.

Der pBefehl wird nach der Cursorposition eingefügt. Da das Standardregister mit zeilenweisem Inhalt gefüllt wurde, bedeutet dies, dass es nach der Zeile eingefügt wird, in der sich der Cursor befindet.

Wenn Sie stattdessen den Inhalt der Zeile zeichenweise (z. B. 0D) gelöscht hätten, wäre das Register zeichenweise und daher nach dem Zeichen eingefügt worden, auf dem sich der Cursor befand.

Im Allgemeinen sollte das Verhalten dem entsprechen, was von einem Löschen / Ziehen und Einfügen erwartet wird. Es ist jedoch möglich, die -wiseNess eines Registers mit getreg () / setreg () zu ändern .

Seien Sie vorsichtig dabei. In Anbetracht Ihres anfänglichen Beispiels wird durch einfaches Ändern des Registers auf zeichenweise nicht der Zeilenumbruch entfernt, der Teil des Löschvorgangs war. Es ändert sich nur, wie die Paste auftritt.


Empfehlungen zum speziellen Szenario des Löschens einer gesamten Zeile, aber des zeichenweisen Einfügens finden Sie in diesem Beitrag .

Jamessan
quelle