Was ist der Unterschied zwischen j, STRG-J, <NL> und STRG-N im normalen Modus?

12

Ich habe irgendwo im Web jemanden gesehen Ctrl-J, der diese Zuordnung verwendet, und da ich sie nicht kannte, habe ich in dem entsprechenden Dokument nachgeschlagen und Folgendes gefunden:

j           or
<Down>      or
CTRL-J      or
<NL>        or
CTRL-N          [count] lines downward linewise.

Was mich zu mehreren Fragen führt:

  • Was ist<NL> : Ich würde es als ein Äquivalent von sehen, <CR>da Drücken Enterim normalen Modus standardmäßig eine Zeile nach unten geht, aber warum ist es <NL>hier und nicht hier <CR>?
  • Was ist der Unterschied zwischen diesen Zuordnungen : Gehen alle diese 5 Optionen auf die gleiche Weise eine Zeile nach unten? Nach meinen Tests würde ich mit Ja antworten, aber das würde zu meiner nächsten Frage führen.
  • Warum gibt es 5 Mappings, die genau dasselbe tun : Ich kann das verstehen jund werde <down>für Benutzer aufbewahrt, die nicht an Vim-Mappings gewöhnt sind, aber warum gibt es die anderen Mappings?
  • Wann ist es interessanter, eines mehr als das andere zu verwenden ? Dies ist eine Fortsetzung der vorherigen Frage: Wenn es so viele Möglichkeiten gibt, haben sie vermutlich unterschiedliche Vorteile oder sind in bestimmten Anwendungsfällen besser zu verwenden. Was sind diese Anwendungsfälle?

Ich finde die Redundanz dieser Befehle noch seltsamer , wenn ich sehe :h k: es gibt nur drei Möglichkeiten zu gehen: k, <UP>und ctrl-p. Die Bonusfrage lautet also: Warum gibt es 5 Möglichkeiten, runter und nur 3 Möglichkeiten, rauf zu gehen?

statox
quelle
Sind Sie sicher, dass sie die Standardbindung verwendet haben Ctrl-J? Zumindest unter denen, die ich kenne, scheint es üblich zu sein, Ctrl-J/K"bis zur nächsten Zeile mit der gleichen Einrückungsstufe wie die Startzeile nach unten / oben" abzubilden .
Aaron Dufour
4
Ich möchte antworten auf "Warum gibt es 5 Wege, um hinunter und nur 3, um hinauf zu gehen?" Das liegt daran, dass es im Leben viel einfacher ist , nach Süden zu gehen ! :)
VanLaser
@ VanLaser wirklich gute Antwort, sollten sie diesen Hinweis in das Dokument hinzufügen! ;-)
statox
@ VanLaser Schade, nicht wahr? Mit dieser Geschwindigkeit wird die ganze Menschheit in kürzester Zeit ins Nichts absteigen!
xji
"Gib die Hoffnung auf, ihr alle, die <CR>hier sind"
VanLaser

Antworten:

15

Interessant, dass Sie erwähnt haben <CR>. <CR>oder Wagenrücklauf, technisch verwendet, um an den Anfang der Linie zu gehen . <NL>oder newline aka line feed (normalerweise genannt LF), wurde verwendet, um zur nächsten Zeile zu gehen . Im Laufe der Zeit ging die Unterscheidung in den meisten Anwendungen verloren. 1 Wenn Sie Entertatsächlich drücken, wird in der Regel ein Wagenrücklauf ausgegeben (versuchen Sie es mit CtrlVEnter- dies sollte ^Min Unix-Terminals angezeigt werden). <NL>'s Steuercode ist CtrlJ.

CtrlNüberraschte mich. Laut 2 handelt es sich um ein Verschiebungszeichen :man ascii

Oct   Dec   Hex   Char                        Oct   Dec   Hex   Char
────────────────────────────────────────────────────────────────────────
016   14    0E    SO  (shift out)             116   78    4E    N

Das Ein- und Ausblenden von Zeichen laut Wikipedia :

... boten eine Möglichkeit, die Nomenklatur, ein farbiges Band, das in der Regel mit Rot und Schwarz in Längsrichtung geteilt ist, in einer elektromechanischen Schreibmaschine oder einem Fernschreiber auf und ab zu der anderen Farbe zu verschieben ...

Wie es dazu kam, dass es bedeutete, unterzugehen, ist mir ein Rätsel.


Warum gibt es 5 Wege zum Abstieg und nur 3 zum Aufstieg?

Nun, die drei Wege nach oben haben alle entsprechende Wege nach unten. ( CtrlPVermutlich handelt es sich um die Ergänzung von CtrlN, was impliziert, dass das Ein- / Ausschalten hier nicht relevant ist). Die zusätzlichen zwei Wege nach unten ( <NL>oder CtrlJ) sind eigentlich zwei Darstellungen des gleichen Weges. <NL>ist ein Erbe aus der Zeit der Schreibmaschine - und in diesen Tagen gab es meines Erachtens keinen Schlüssel, um nach oben zu gehen - nur, um nach unten zu gehen.

Siehe auch:

1 In einigen Fällen ist es immer noch wichtig (Drucken \r(Wagenrücklauf) und \n(Zeilenvorschub) unter Verwendung der meisten formatierten Druckfunktionen / -werkzeuge behalten die alte Bedeutung bei.).

2 Diese Tabelle ist so angeordnet, dass das Alphabet dem Steuercode des Zeichens in derselben Zeile entspricht.

muru
quelle
3
Ich dachte immer, es ginge Ctrl-Num das Nächste und es Ctrl-Pginge um das Vorherige . Dafür stehen sie jedenfalls in Emacs, in dem sie an next-lineund gebunden sind previous-line. Auch Ctrl-Pist nicht verschieben in ; Es ist Data Link Flucht . Shift in ist Ctrl-O.
Lithis
@Lithis ich stehe korrigiert.
muru
2
@Lithis Ehrlich gesagt, das einzige, was ich über Emacs weiß, ist cx ce.
muru
Historische und klare Antwort, vielen Dank Muru! Ich hätte an den ASCII-Code der Zeichen denken sollen, in denen die Antwort oft liegt.
statox
@muru Das ist schade, denn Emacs hat tatsächlich eine Menge zu bieten, insbesondere den Org-Modus, der mir sehr geholfen hat. Ich empfehle, dass Sie sich das Projekt Spacemacs github.com/syl20bnr/spacemacs ansehen , das sich stark auf die Vim-Emulation konzentriert, sodass Sie keinen traditionellen Emacs-Befehl kennen müssen, um es zu verwenden. Vielleicht ändert das etwas deine Wahrnehmung.
xji
8

Sehen :help key-notation.

  1. <NL>bedeutet "Zeilenvorschub" und <CR>bedeutet "Wagenrücklauf".

    Dies sind zwei verschiedene Möglichkeiten, um die aktuelle Zeile zu unterbrechen. Sie sind historisch an verschiedene Steuerzeichen ( ctrl-jund ctrl-m) gebunden, werden jedoch normalerweise mit demselben Schlüssel eingefügt <CR>. Ich bin damit einverstanden, dass die Verwendung <NL>in diesem Zusammenhang nicht intuitiv erscheint.

  2. Alle diese "Zuordnungen" (sie sind eigentlich keine Zuordnungen) verhalten sich genauso.

  3. Geschichte, meist auch plattformübergreifende Einschränkungen.

    Es gab keine speziellen Bewegungstasten für Bill Joys Terminal, aber die Pfeiltasten waren mit Abziehbildern versehen hjkl. Da Modal-Editoren zu dieser Zeit selten waren, wurde beim Drücken dieser Tasten nur das zugehörige Zeichen in die von Ihnen ausgeführten Aktionen eingefügt. Sie haben zu drücken <C-h>, <C-j>, <C-k>und <C-l>den Cursor auf dem Bildschirm zu bewegen.

    Wie Sie sehen können, gibt es eine ganz Überlappung zwischen j, <C-j>, <NL>und <Down>. <C-n>Im Allgemeinen bedeutet es in Vim "nächstes", es ist leicht zu sehen, wie es mit seinen Kameraden zusammengewürfelt wurde.

  4. Da sie alle gleichbedeutend sind, können Sie diejenige verwenden, die für Sie am besten geeignet ist.

    <CR>Dies ist beispielsweise ein interessanter Schlüssel für Ihre eigenen Zuordnungen.

romainl
quelle
Danke für die Erleuchtung! Ich stimme dem <CR>Mapping sehr zu. Noch eine Frage: Ich weiß, dass diese "Tastenkombinationen" eigentlich keine Zuordnungen heißen, bin mir aber nicht sicher, wie ich sie nennen soll?
statox
Das ist eine interessante Frage, ich neige dazu, sie "Befehle" zu nennen.
Romainl
Ich kann mich irren , aber nicht „Befehl“ auf die Ex - Mode - Befehle wie :ls, :substitute, new, etc ...?
statox
xist auch ein "Befehl".
Romainl
Tatsächlich sah ich nur , dass die doc Anrufe x, dd, cusw „Befehle“. Du musst also Recht haben, denke ich, joder es ^Jsind auch Befehle.
statox