Gibt es dafür einen bestimmten historischen Grund?
Hintergrund - (Sie können diesen Teil überspringen, wenn Sie die Frage bereits verstanden haben.)
Als Mittelstufe / Fortgeschrittene vi
Benutzer wissen, y
den „Ruck“ Befehl ist (Kopien) durch den folgenden Bewegungsbefehl spezifizierte den Text zerrt. * So ye
zum Ende des Wortes zerrt, y0
zerrt von Cursorposition bis zum Anfang der Zeile, y_
Ruckelt die gesamte aktuelle Zeile, y$
ruckelt von der Cursorposition bis zum Ende der aktuellen Zeile usw.
Der d
Befehl (Löschen) und der Befehl c
(Ändern) können auch für alle diese Bewegungen verwendet werden.
dd
ist ein Synonym für d_
und löscht die gesamte aktuelle Zeile. Ebenso cc
ist es ein Synonym für c_
und ändert die aktuelle Zeile (dh es löscht den gesamten Text und versetzt Sie in den Einfügemodus am Zeilenanfang). **
Der "Ruck" -Befehl folgt dieser Konvention; yy
reißt die gesamte aktuelle Zeile einfach wie y_
.
Es gibt eine weitere Gruppe von Synonymen: D
ist ein Synonym für d$
und wird von der Cursorposition bis zum Ende der Zeile gelöscht. C
ist ein Synonym für c$
und ändert den Text von der Cursorposition bis zum Zeilenende und versetzt Sie in den Einfügemodus, um den neuen Text einzugeben.
Es Y
ist jedoch ein weiteres Synonym für yy
oder y_
und zieht die gesamte Zeile , nicht nur vom Cursor bis zum Ende der Zeile, wie Sie es von den Mustern C
und erwarten würden D
.
Ich verstehe, dass es in Vim so beibehalten wurde, um die Abwärtskompatibilität zu gewährleisten vi
, wie in der Vim-Hilfe unter :help Y
:
Wenn Sie möchten, dass "Y" vom Cursor bis zum Zeilenende funktioniert (was logischer ist, aber nicht Vi-kompatibel), verwenden Sie ": map Y y $".
Das ist also ein Überbleibsel von vi
. Fein.
Aber warum war der Befehl überhaupt so konzipiert? Gab es jemals eine Logik dafür?
* Speziell platziert es den Text in Register 0 und zeigt das unbenannte Register auf Register 0.
** Obwohl es für meine Frage nicht relevant S
ist , ist es ein weiteres Synonym für cc
oder c_
.
quelle
Antworten:
Ich fand einen Artikel "Eine Einführung in das Bearbeiten von Displays mit Vi" von William Joy (vi-Entwickler) und Mark Horton (vi-Betreuer seit 1979).
Aus dem Papier geht hervor, dass das standardmäßige Y-Verhalten kein Fehler ist, sondern eine gewünschte Funktion. Im Abschnitt "Text neu anordnen und duplizieren" erwähnen sie Folgendes:
Später in der Befehlsliste (siehe Anhang in der PDF-Version ) lautet die Beschreibung für Y wie folgt:
Auf diese Weise bin ich sicher, dass Y ein Feature und kein Bug war.
Was Inkonsistenzen mit
D
undC
betrifft, so habe ich auch eine logische Erklärung. Wenn Sie versuchen, als Texteditorautor zu denken, besteht Ihr Hauptwunsch darin, neuen Text zu erstellen und nicht zu löschen. Sie (Texteditorautoren) möchten, dass ihre Benutzer mehr Text schreiben und immer mehr ...Also für die syntaktische Zucker Befehle (und
Y
,D
undC
sind so eine Art syntaktischer Zucker , weil sie duplizieren bereits vorhandenen Funktionen) sie die Operationen wählen , die so viel Text wie möglich hinzufügen (Y
dupliziert die ganze Linie) oder als weniger Text wie möglich löschen (D
undC
löschen , bis das Zeilenende und nicht die ganze Zeile).quelle
YP
; das ist schnell und einfach zu tippen. Ich bin überzeugt. ;)Y
war der Ruckbefehl der ersten vi-Version (ex-1.1, 1. Januar 1978). Diese Version hatte nicht denyy
Cammand. Ex-2.2 (6. Mai 1979) hatte beidesyy
undY
. Ist also eigentlichyy
ein Synonym fürY
(Y
Prädatenyy
).quelle
Y
folgt nicht der gleichen Logik wie die anderen Befehle, da sie älter ist als das, was später als Abkürzung für neu verbunden wurde.