Jaka jest różnica między j, CTRL-J, <NL> i CTRL-N w trybie normalnym?


12

Widziałem gdzieś w sieci kogoś używającego, Ctrl-Ja ponieważ nie znałem tego mapowania, przejrzałem odpowiedni dokument i znalazłem:

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

Co prowadzi mnie do kilku pytań:

  • Co to jest<NL> : Widziałbym to jako ekwiwalent, <CR>ponieważ naciśnięcie Enterdomyślnie przejdzie w dół o jedną linię w trybie normalnym, ale dlaczego jest <NL>tutaj, a nie <CR>?
  • Jaka jest różnica między tymi mapowaniami : Czy wszystkie te 5 opcji idą o jedną linię w dół w ten sam sposób? Według moich testów odpowiedziałbym tak, ale to doprowadziłoby do mojego następnego pytania.
  • Dlaczego istnieje 5 odwzorowań, aby zrobić dokładnie to samo : Rozumiem to ji <down>są przechowywane dla użytkowników, którzy nie są przyzwyczajeni do mapowania, ale dlaczego istnieją inne odwzorowania?
  • Kiedy bardziej interesujące jest użycie jednego lub drugiego : Jest to kontynuacja poprzedniego pytania: jeśli istnieje tak wiele możliwości, sądzę, że mają one inne zalety lub lepiej je stosować w konkretnych przypadkach użycia. Jakie są te przypadki użycia?

Uważam zwolnienie z tych poleceń jeszcze bardziej dziwne, gdy patrzę na :h k: istnieją tylko 3 sposoby, aby przejść się: k, <UP>i ctrl-p. Zatem pytanie bonusowe brzmi: dlaczego jest 5 sposobów na zejście i tylko 3 na zejście?


Czy na pewno korzystali z domyślnego Ctrl-Jwiązania? Wydaje się powszechne, przynajmniej wśród tych, których znam, mapowanie Ctrl-J/Kdo „w dół / w górę do następnej linii z tym samym poziomem wcięcia co linia początkowa”.
Aaron Dufour,

4
Chciałbym odpowiedzieć na pytanie „Dlaczego jest 5 sposobów zejścia na dół i tylko 3 zejścia na górę?” Cóż - to dlatego, że w życiu sprawy idą na południe łatwiej! :)
VanLaser,

@ VanLaser naprawdę świetna odpowiedź, powinni rozważyć dodanie tej wskazówki w dokumencie! ;-)
statox

@VanLaser Szkoda, prawda? W tym tempie cała ludzkość w krótkim czasie zejdzie w nicość!
Xji

„Porzućcie nadzieję, wszyscy, którzy <CR>tu jesteście ”
VanLaser,

Odpowiedzi:


16

Interesujące, o którym wspomniałeś <CR>. <CR>lub zwrot karetki, technicznie używany do oznaczenia przejścia na początek linii . <NL>, lub newline aka line feed (zwykle nazywany LF), był używany do oznaczenia przejścia do następnego wiersza . Z czasem rozróżnienie zniknęło w większości aplikacji. 1 Naciśnięcie Enterfaktycznie powoduje powrót karetki, zwykle (spróbuj nacisnąć CtrlVEnter- powinieneś zobaczyć ^Mna terminalach Unix). <NL>Kod kontrolny to CtrlJ.

CtrlNzaskoczyło mnie. Według 2 jest to postać przesunięta :man ascii

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

Przesunięcie i przesunięcie się znaków, według Wikipedii :

... zapewnił sposób na przesunięcie, stąd nomenklatura, kolorowa wstążka, podzielona wzdłużnie zwykle z czerwonym i czarnym, w górę iw dół do innego koloru w elektromechanicznej maszynie do pisania lub teleprinteru ...

To, jak to się skończyło, oznacza zejście, jest dla mnie zagadką.


Dlaczego jest 5 sposobów na zejście i tylko 3 na zejście?

Wszystkie trzy sposoby wejścia w górę mają odpowiednie sposoby zejścia w dół. ( CtrlPprzypuszczalnie jest uzupełnieniem CtrlN, co oznacza, że zmiana wejścia / wyjścia nie ma tutaj znaczenia). Dodatkowe dwie drogi w dół ( <NL>lub CtrlJ) to tak naprawdę dwie reprezentacje tego samego sposobu. <NL>jest dziedzictwem z czasów pisania na maszynie - i w tamtych czasach nie sądzę, aby istniał klucz do przejścia w górę - tylko do zejścia.

Zobacz też:

1 W niektórych przypadkach nadal ma to znaczenie (drukowanie \r(powrót karetki) i \n(przesuwanie wiersza) przy użyciu większości sformatowanych funkcji / narzędzi drukowania nadal zachowuje stare znaczenie).

2 Tabela ta jest ułożona w taki sposób, że alfabet odpowiada kodowi sterującemu znaku w tym samym wierszu.


3
Zawsze myślałem, że Ctrl-Njest na następny , i Ctrl-Pna poprzedni . Tak zresztą reprezentują Emacsa, w którym są związani next-linei previous-line. Również Ctrl-Pnie zmienia się ; jest to ucieczka łącza danych . Zmiana jest Ctrl-O.
Lithis,

@Lithis Poprawiłem się.
muru,

2
@Lithis Szczerze mówiąc, jedyne, co wiem o Emacsie, to cx ce.
muru,

Historyczna i jasna odpowiedź, wielkie dzięki Muru! Powinienem był pomyśleć o kodzie znaków ASCII, w którym często znajduje się odpowiedź.
statox

@muru To źle, ponieważ Emacs ma naprawdę wiele do zaoferowania, szczególnie tryb org, który był dla mnie ogromnie pomocny. Polecam sprawdzić projekt Spacemacs github.com/syl20bnr/spacemacs , który koncentruje się w dużej mierze na emulacji Vima, dzięki czemu nie musisz znać żadnego tradycyjnego polecenia Emacsa. Może to trochę zmieni twoje postrzeganie.
Xji

8

Zobaczyć :help key-notation.

  1. <NL>oznacza „podawanie linii” i <CR>„powrót karetki”.

    Są dwa różne sposoby na przełamanie bieżącej linii. Są one historycznie związana z różnych znaków sterujących ( ctrl-ji ctrl-m), ale zwykle są wstawiane z tego samego klucza <CR>. Zgadzam się, że używanie <NL>w tym kontekście wydaje się sprzeczne z intuicją.

  2. Wszystkie te „odwzorowania” (tak naprawdę nie są odwzorowaniami) zachowują się dokładnie tak samo.

  3. Przeważnie historia ma również ograniczenia międzyplatformowe.

    Nie było dedykowanych klawiszy ruchu terminalu Billa Joya, ale na strzałkach znajdowały się naklejki ze strzałkami hjkl. Ponieważ edytory modalne były wówczas rzadkie, naciśnięcie tych klawiszy wstawiało tylko powiązany znak w cokolwiek, co robiłeś. Trzeba było nacisnąć <C-h>, <C-j>, <C-k>i <C-l>, aby przesunąć kursor na ekranie.

    Jak widać, nie całkiem pokrywają się j, <C-j>, <NL>i <Down>. <C-n>ogólnie w Vimie oznacza „następny”, łatwo jest zobaczyć, jak został zbity z innymi towarzyszami.

  4. Ponieważ wszystkie są synonimami, możesz swobodnie korzystać z tej, która najlepiej Ci odpowiada.

    <CR>, na przykład, jest interesującym kluczem do użycia we własnych mapowaniach.


Dzięki za oświecenie! Bardzo zgadzam się co do <CR>mapowania. I jeszcze jedno pytanie: wiem, że te „kombinacje klawiszy” tak naprawdę nie są nazywane mapowaniami, ale nie jestem pewien, jak mam je nazywać?
statox

To interesujące pytanie, zwykle nazywam je „poleceniami”.
romainl,

Może się mylę, ale nie jest „komenda”, odnosząc się do poleceń w trybie ex podoba :ls, :substitute, new, itd ...?
statox

xjest także „poleceniem”.
romainl,

Rzeczywiście Widziałem tylko, że rozmowy doc x, dd, c, etc „Polecenia”. Więc musisz mieć rację, tak sądzę jlub ^Jsą to również polecenia.
statox
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.