Яка різниця між j, CTRL-J, <NL> і CTRL-N у звичайному режимі?


12

Я десь в Інтернеті бачив когось, хто використовує, Ctrl-Jі оскільки я не знав цього відображення, я переглянув відповідний документ і виявив наступне:

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

Що призводить мене до кількох питань:

  • Що таке<NL> : я вважаю це еквівалентом, <CR>оскільки натискання Enterза замовчуванням знизиться на один рядок у звичайному режимі, але чому це <NL>тут, а ні <CR>?
  • Яка різниця між цими відображеннями : чи всі ці 5 варіантів йдуть одним рядком вниз однаковим чином? За моїми тестами, я відповів би так, але це призведе до мого наступного питання.
  • Чому є 5 відображень, щоб зробити саме те саме : я можу це зрозуміти jі <down>зберігаються для користувачів, які не звикли до vim відображень, але чому існують інші відображення?
  • Коли цікавіше використовувати один більше, ніж інший : Це продовження попереднього питання: якщо існує так багато можливостей, я думаю, що вони мають різні переваги або їх краще використовувати в конкретних випадках використання. Які такі випадки використання?

Я вважаю надмірність цих команд ще більш дивно , коли я дивлюся на :h k: є тільки три шляхи йти вгору: k, <UP>і ctrl-p. Отже, питання про бонус полягає в тому, чому існує 5 способів спуститися вниз і лише 3 - піднятися вгору?


Ви впевнені, що вони використовували Ctrl-Jприв'язку за замовчуванням ? Здається, щонайменше серед тих, кого я знаю, загальним є створення карти Ctrl-J/K"вниз / вгору до наступного рядка з тим же рівнем відступу, що і початковий рядок".
Аарон Дюфур

4
Я хотів би відповісти на "Чому існує 5 способів спуститися вниз і лише 3 - піднятися вгору?" Ну - це тому, що в житті все йде легше на південь ! :)
VanLaser

@VanLaser дійсно чудова відповідь, вони повинні розглянути можливість додавання цього підказки в документ! ;-)
statox

@VanLaser Шкода, чи не так. З такою швидкістю все людство в найкоротші терміни зійде в небуття!
xji

"Відмовтеся від надії, всі ви, хто <CR>тут"
VanLaser

Відповіді:


16

Цікаво, що ви згадали <CR>. <CR>або повернення вагона, технічно використане для ознайомлення з початком лінії . <NL>або новий канал акаунта рядка (зазвичай його називають LF) використовувався для означення переходу до наступного рядка . З часом відмінність втрачалась у більшості застосувань. 1 Натискання Enterфактично призводить до повернення каретки, як правило (спробуйте натиснути CtrlVEnter- це слід побачити ^Mв терміналах Unix). <NL>Код контролю є CtrlJ.

CtrlNмене здивувало. Відповідно до 2 , це символ зміщення :man ascii

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

Зсув і зміщення з символів, згідно Вікіпедії :

... було передбачено спосіб зміщення, отже, номенклатури, кольорової стрічки, розділеної поздовжньо, як правило, червоною та чорною, вгору та вниз до іншого кольору в електромеханічній машинці або телепринтері ...

Як це закінчилося значенням " вниз" , для мене загадка.


Чому існує 5 способів спуститися вниз і лише 3 - піднятися вгору?

Ну, три способи піднятися всі мають відповідні способи спуститися. ( CtrlPімовірно, це доповнення CtrlN, маючи на увазі, що зміна вводу / виходу тут не має значення). Додаткові два способи вниз ( <NL>або CtrlJ) насправді є двома уявленнями однаково. <NL>це спадщина від машинописних днів - і в ті дні, я не думаю, що було ключове значення, щоб піднятися вгору - лише знизитися.

Дивіться також:

1 У деяких випадках це все ще має значення (друк \r(повернення каретки) та \n(подача рядків) з використанням більшості форматованих функцій / інструментів друку все ще зберігають старе значення.)

2 Ця таблиця розташована таким чином, що алфавіт відповідає контрольному коду символу в одному рядку.


3
Я завжди думав, що Ctrl-Nце за наступний , а Ctrl-Pза попередній . Це те, що вони виступають в Emacs, в будь-якому випадку, в якому вони зобов'язані next-lineі previous-line. Крім того, Ctrl-Pне є зсувом ; це втеча зв'язку даних . Зрушення є Ctrl-O.
Літіс

@Lithis я стою виправлений.
муру

2
@Lithis Чесно кажучи, єдине, що я знаю про Emacs - це cx ce.
muru

Історична і чітка відповідь, велике спасибі Муру! Я мав би подумати про код коду персонажів, відповідь на який часто лежить.
statox

@muru Це дуже погано, оскільки Emacs насправді має багато чого запропонувати, особливо його орга-режим, який дуже допомагає мені. Я рекомендую вам ознайомитись з проектом Spacemacs github.com/syl20bnr/spacemacs , який зосередився на емуляції Vim, так що вам не потрібно знати будь-яку традиційну команду Emacs для використання. Можливо, це трохи змінить ваше сприйняття.
xji

8

Див :help key-notation.

  1. <NL>означає "передача на лінійці" і <CR>означає "повернення вагона".

    Це два різні способи розірвати поточний рядок. Вони історично пов'язані з різними керуючими символами ( ctrl-jі ctrl-m) , але, як правило , вставляються з тим же ключем, <CR>. Я погоджуюся, що використання <NL>в цьому контексті видається контрінтуїтивним.

  2. Усі ці "відображення" (це насправді не відображення) поводяться точно так само.

  3. Історія, здебільшого, також є міжплатформними обмеженнями.

    Не було виділених клавіш руху на терміналі Білла Джоя, але знаки стрілок були на hjklклавішах. Оскільки модальні редактори були рідкісними, натискання цих клавіш лише вставляло пов'язаний символ у все, що ви робили. Ви повинні були натиснути <C-h>, <C-j>, <C-k>і <C-l>для переміщення курсору на екрані.

    Як ви можете бачити, є досить перекриття між j, <C-j>, <NL>і <Down>. <C-n>загалом означає «наступний» у Вімі, легко помітити, як він зібрався разом зі своїми товаришами.

  4. Оскільки вони всі синоніми, ви можете безкоштовно використовувати той, який найкраще підходить для вас.

    <CR>, наприклад, це цікавий ключ, який потрібно використовувати для власних відображень.


Дякую за насолоду! Я дуже погоджуюся з <CR>картою. Також ще одне питання: я знаю, що ці "комбінації клавіш" насправді не називаються відображеннями, але я не впевнений, як мені їх називати?
statox

Це цікаве запитання, я схильний називати їх "командами".
romainl

Може бути , я помиляюся , але це не «команда» з посиланням на екс команди режиму , типу :ls, :substitute, newі т.д ...?
statox

xтакож є "командою".
romainl

Дійсно, я просто бачив, що doc викликає x, " dd, c" тощо, "команди". Таким чином , ви повинні мати рацію, я думаю , що jі ^Jтакож команда.
statox
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.