Warum ist Y ein Synonym für yy anstelle von y $?

28

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 viBenutzer wissen, yden „Ruck“ Befehl ist (Kopien) durch den folgenden Bewegungsbefehl spezifizierte den Text zerrt. * So yezum Ende des Wortes zerrt, y0zerrt 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 dBefehl (Löschen) und der Befehl c(Ändern) können auch für alle diese Bewegungen verwendet werden.

ddist ein Synonym für d_und löscht die gesamte aktuelle Zeile. Ebenso ccist 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; yyreißt die gesamte aktuelle Zeile einfach wie y_.

Es gibt eine weitere Gruppe von Synonymen: Dist ein Synonym für d$und wird von der Cursorposition bis zum Ende der Zeile gelöscht. Cist 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 Yist jedoch ein weiteres Synonym für yyoder y_und zieht die gesamte Zeile , nicht nur vom Cursor bis zum Ende der Zeile, wie Sie es von den Mustern Cund 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 Sist , ist es ein weiteres Synonym für ccoder c_.

Platzhalter
quelle
3
Ich bin nicht sicher, warum es so gemacht wurde. Sie müssten Bill Joy danach fragen. Es besteht jedoch die Möglichkeit, dass dies ein logischer Fehler ist, der im Original-VI noch nie behoben und dann in alle Klone integriert wurde und daher von POSIX gefordert wurde.
Christian Brabandt
3
Wenn Sie jemals eine Antwort finden, brauchen sie diese auch hier . ;)
Joeytwiddle
1
Ich bezweifle, dass dies der eigentliche Grund ist, aber die Person, die Einwände gegen eine Neuzuordnung von Y in vim-sensible erhoben hat, argumentierte, dass sie als C-Programmierer bei weitem mehr Zeilenende-Rucken als Ganzzeilen-Rucken benutzten, und daher das Standardzuordnungen sind gut. YMMV: Meins sicherlich.
Rich

Antworten:

16

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:

Try the command YP. This makes a copy of the current line 
and leaves you on this copy, which is placed before the current line. 
The command Y is a convenient abbreviation for yy. 
The command Yp will also make a copy of the current line, 
and place it after the current line. 
You can give Y a count of lines to yank, and thus duplicate 
several lines try 3YP.

Später in der Befehlsliste (siehe Anhang in der PDF-Version ) lautet die Beschreibung für Y wie folgt:

Y  Yanks a copy of the current line into the unnamed buffer, 
   to be put back by a later p or P; a very useful synonym for yy.

Auf diese Weise bin ich sicher, dass Y ein Feature und kein Bug war.

Was Inkonsistenzen mit Dund Cbetrifft, 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, Dund Csind 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 ( Ydupliziert die ganze Linie) oder als weniger Text wie möglich löschen ( Dund Clöschen , bis das Zeilenende und nicht die ganze Zeile).

Boris Serebrov
quelle
Okay, ich mag YP; das ist schnell und einfach zu tippen. Ich bin überzeugt. ;)
Wildcard
8

Ywar der Ruckbefehl der ersten vi-Version (ex-1.1, 1. Januar 1978). Diese Version hatte nicht den yyCammand. Ex-2.2 (6. Mai 1979) hatte beides yyund Y. Ist also eigentlich yyein Synonym für Y( YPrädaten yy).

user3224237
quelle
Das ist die wahre Antwort. Yfolgt 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.
Mechalynx