Почему vim использует hjkl для клавиш управления курсором?

56

Зачем использовать клавиши hjklна одной линии вместо клавиш в треугольнике, как wasdдля видеоигр?

Почему не что-то эквивалентное с правой рукой, как ijklили pl;'?

albttx
источник
3
Проверьте, что на странице Википедии vi есть изображение древней машинной клавиатуры Unix, которое объясняет некоторые сочетания клавиш.
Кристиан Брабандт
3
Потому vimчто освобождается от того, чтобы идти в ногу с технологическими достижениями: 3
Александр
3
Вы можете удобно расположить четыре пальца одной руки на клавишах hjkl и перемещать курсор во всех четырех направлениях, не перемещая пальцы назад и вперед. Если вы действительно думаете об этом, четыре подряд - это единственное расположение клавиш курсора, соответствующее анатомии человека. Вопрос в том, как все остальные могут ошибаться.
4
На самом деле не рекомендуется ставить свой индекс, hа скорее на j(поэтому у вас есть «ниппель» на jключе). Причиной этого является то, что вы будете использовать bгораздо больше, hи ;доступность удобна во многих языках программирования (а со сдвигом вы получаете, :что еще более удобно в Vim).
nobe4
2
Кстати, эта тема освещена во втором вопросе с наибольшим количеством
Дмитрий Григорьев

Ответы:

75

С http://www.catonmat.net/blog/why-vim-uses-hjkl-as-arrow-keys/ :

Когда Билл Джой создал текстовый редактор vi, он использовал терминал ADM-3A, на котором были стрелки на клавишах hjkl. Естественно, он использовал те же ключи, а остальное уже история!

введите описание изображения здесь

nobe4
источник
27
Это должно быть на каждой клавиатуре! :)
albttx
16
Теперь вы меня удивляетесь, что за терминал у парня, который сделал emacs ...
leeand00
11
@ leeand00: Клавиатура космического кадета Symbol of LISP . В статье подробно рассказывается о том, как дизайн клавиатуры повлиял на дизайн Emacs, а также сравнивает ее с дизайном Vi с его вездесущей клавишей Escape и тем, что Escape очень удобно расположен на клавиатуре терминала ADM-3A. , Ну, на клавиатуре Space Cadet есть клавиши Control, Meta, Super и Hyper, которые очень удобно расположены, а также не менее 3 различных клавиш Shift, позволяющих набирать более 8000 символов.
Йорг Миттаг
11
Хотя этот ответ и является правильным, он как бы перемещает вопрос, а не отвечает на него: «Почему клавиатура ADM-3A выбрала, hjklа не более логичную форму, например ijkl
Мартин Турной
2
@Carpetsmoker: мы не изобрели логику расположения стрелок на клавиатуре до конца 80-х. Upload.wikimedia.org/wikipedia/commons/3/30/…
Джейкоб Кралл,
21

Ответ Nobe4 великолепен и объясняет, почему мы используем его hjklочень хорошо. Тем не менее, действительно интересно видеть полную клавиатуру, и много странных вещей в vim имеют больше смысла, когда вы видите полную клавиатуру, для которой она была разработана. Например, почему vi так сильно полагается на escключ, когда он находится в таком странном и неудобном месте? Вот почему:

введите описание изображения здесь

Как видите, escвкладка находится на большинстве клавиатур. ctrlэто еще одна клавиша, которая немного неудобна для доступа, но находится в очень удобном месте на этой клавиатуре (там, где обычно есть заглавные буквы).

DJMcMayhem
источник
Возможно , viесть <Leader>отображение? Я думал, что это было позднее изобретение ...
Мартин Турной
@Carpetsmoker Я так думаю, но я не совсем уверен. У Vim :help <leader>нет {not in Vi}текста для подписи , и там написано, что у vi было :map(хотя нет :noremap), так что я уверен, что у vi был лидер. Даже если бы этого не произошло, я бы предположил, что история клавиатуры vi по крайней мере несколько повлияет на дизайн vim.
DJMcMayhem
Также сложно найти информацию о vi через google, так как большинство результатов в итоге касаются vim.
DJMcMayhem
@DJMcMayhem pubs.opengroup.org/onlinepubs/009696699/utilities/vi.html и roguelife.org/~fujita/COOKIES/HISTORY/1BSD/exrefm.pdf являются хорошими ссылками на vi (POSIX и исторические соответственно). Вы также можете скачать nvi, elvis, vile или ex-vi (ex-vi является потомком исторического vi) и посмотреть, что они делают, или их документацию. В <leader>vi нет функции
Random832
Кроме того, Vim был изначально разработан для Amiga (обратная косая черта в ее обычном положении [ISO или Large Enter]), и на основе Stevie, которая была для Atari ST (обратная косая черта в нижнем правом углу, после ввода, но, по-видимому, не поддержка :mapвообще)
Random832
17

Что касается того, почему эти стрелки были напечатаны на этих клавишах ... это потому, что они могли использоваться с управляющей клавишей для локального перемещения курсора. Ctrl-H и Ctrl-J (возврат на одну строку и перевод строки) очевидны и являются мнемоническими даже сегодня. Ctrl-K - это «вертикальная табуляция», но иногда она использовалась для обратной линии на терминалах, предшествующих ANSI. Использование Ctrl-L для неразрушающего курсора вперед, вероятно, было выбрано на основании расположения его клавиатуры.

Вы могли также заметить на рисунке клавиатуры в другом ответе, что «HOME» находится на клавише ^/ ~. Конечно, Ctrl- ^ размещает курсор (отправляет в верхний левый угол экрана или нижний левый, в зависимости от режима).

Эти сопоставления управления также использовались для терминалов Wyse, протокола Kermit и поддерживались в некоторых версиях ПК ANSI.SYS.

Источники:

Random832
источник
^ H, ^ K - очень поучительно, так как сегодня я легко запомню, что ^ J опускается вниз. Я так и не смог надежно запомнить назначение вверх-вниз.
Miroxlav