Почему использование клавиш со стрелками в обычном режиме считается плохой практикой?

43

Я читал во многих статьях ( например ), что использование стрелок в обычном режиме - плохая практика. Может ли кто-нибудь объяснить, почему это считается неправильной практикой, если вообще?

Анкит Джайн
источник
5
Хорошая причина не использовать hjkl - если вы используете другую раскладку клавиатуры. Например, hjkl не являются пространственно коррелированными в Dvorak и, следовательно, сложны в использовании.
Kylos
1
@ Килос я использую hjklв Дворжаке. Это определенно менее разумно, чем в qwerty, но я не знаю, что бы я назвал это «сложным в использовании»; это всего лишь ключи, и совсем не так сложно их достать или что-то еще, когда ты к этому привык.
Дугал
2
Существует много мифов, почему hjklдолжен быть лучший вариант для перемещения в документе. Правда в том, что на некоторых клавиатурах hjklво время создания vi были включены клавиши со стрелками , поэтому vi использовала те же клавиши в обычном режиме для соответствия раскладке клавиатуры. Вот статья с фотографией клавиатуры: catonmat.net/blog/why-vim-uses-hjkl-as-arrow-keys
алло
8
Все с репутацией трудностей ... привлекает определенный тип людей. Crossfit, Vim, функциональное программирование, веганство и т. Д. Сейчас, конечно, не все люди, которые занимаются одним из этих видов деятельности, относятся к этому типу, но они проявляются непропорционально часто. И частью привлекательности для этого человека является сложность самой деятельности . Вещи, которые понижают планку для входа, являются для них анафемой: это делает их менее особенными. Есть причины предпочитать hjkl. Хорошие. Но они завышены до уровня догмы, по крайней мере частично, потому что люди должны чувствовать, что они лучше, чем другие.
Джаред Смит,
@Kylos Я согласен, что hjklне самый лучший в дворак. Но, как пользователь дворака, я могу найти их немного удобными, поскольку они соединены вместе: как jkна одной стороне платы; и hl с другой стороны.
Нильон

Ответы:

66

На самом деле это неплохая практика.

Многие люди ( включая документ Vim, как показывает ответ @B Layer ) утверждают, что вы не должны использовать клавиши со стрелками, потому что это заставляет ваши руки двигаться от домашнего ряда (вторая строка вашей клавиатуры, где у вас есть hjkl), и это делает вас менее эффективными ,

Это (по крайней мере, IMO) плохой результат от рывка vim "purists": новые пользователи следуют этому вслепую, некоторые даже отключают клавиши со стрелками, а затем жалуются, что они не так эффективны, как раньше.

Единственное реальное правило для использования vim - это эффективное его использование: если вы чувствуете себя более комфортно при использовании Leftи Rightчем hи l быть, используйте клавиши со стрелками. Vim даже имеет set mouse=aопцию, если вы хотите использовать мышь!

После того, как вы привыкнете к ВИМ и лучше с различными доступными движениями ( f, t, ,, ;, w, b, e, ge, и в основном все в :h quickref) вы могли бы понять , что вы используете не клавиши со стрелками , что много. И если вы все еще используете их, это не проблема, используйте то, с чем вы наиболее эффективны.

Заметьте, что аргумент не выходить из домашней строки для большей эффективности, на мой взгляд, не так уж хорош: если вы посмотрите на Почему vim использует hjkl, вы увидите, что эти клавиши были выбраны, потому что стрелок не было ключи, когда Vi был написан. Можно утверждать, что, может быть, если бы клавиатуры в это время отличались, никто бы не подумал, что не стоит использовать клавиши со стрелками как хорошую практику.

statox
источник
13
Мне часто приходилось очень сильно сгибать запястье, чтобы добраться до клавиш со стрелками, потому что я к ним так привык. В итоге я отключил клавиши со стрелками, чтобы привыкнуть к тому, чтобы hjklпросто снять боль с запястья.
Шахбаз
9
Я хотел бы отметить, что это имеет смысл только на клавиатурах QWERTY. Для некоторых раскладок hjkl может быть настоящей болью.
coteyr
1
Вы можете использовать оба варианта: выбираете ли вы hjkl или стрелки, вы можете связать другой набор клавиш вверх / вниз для перемещения по экранным линиям, а не по строкам файла. Это помогает при редактировании файлов с длинными строками.
user31389
1
До прочтения вашего ответа я не осознавал, что почти не использую hjkl и клавиши со стрелками, потому что привык к продвинутым командам движения, о которых вы упомянули. Хорошая точка зрения!
Спирос
4
Несмотря на то, что я ценю ваш правильный ответ, могу ли я убедить вас в качестве коллеги-модератора и любителя постараться изо всех сил найти какую-то менее «неоправданную» альтернативу, выражающую рывок круга , который не вызывает ярко мешающего изображения кольца без штанов мальчиков или мужчин, все мастурбируют вместе в обществе друг друга… Довольно, пожалуйста? :)
tchrist
40

Я не знаю, действительно ли это больше актуально, но я старожил, так что немного истории.

В старые времена терминалы VT100 имели клавиши со стрелками, но нажатие одной из них передавало управляющую последовательность, например, <ESC>[Aвверх, <ESC>[Bвниз и т. Д.
Кроме того, будучи последовательным терминалом, обменивающимся со скоростью 9600 бод, пользователь мог слишком быстро нажимать клавиши. передать всю последовательность, что приведет к тому, что одно нажатие клавиши прервет последовательность предыдущего нажатия клавиши и запутает vi.

Это может привести к тому, что vi необъяснимым образом перейдет в режим вставки и вставит [B [B [B [B [B] B в ваш файл, если вы удерживаете стрелку вниз. Я говорю необъяснимо, потому что в этой последовательности нет ничего, что могло бы войти в режим вставки, и тот факт, что каждая последовательность начинается с символа ESC, должен был выйти из режима вставки. Но все равно, это вставило бы мусор. Не всегда - просто когда вы спешили.

Один быстро устал от этого и решил просто придерживаться hjklклавиш.

dwilliss
источник
8
По какой-то причине в терминальных программах TCP по- прежнему используются клавиши со стрелками, основанные на escape-символах, и у них по-прежнему нет 100% надежного способа отличить нажатие клавиши escape от отправки первого байта escape-последовательности клавиши со стрелкой.
суперкат
1
@supercat Они делают есть надежный способ отличить их. Это называется с использованием SC81T . Проблема в том, что многие программы не договариваются об этом, и некоторые терминалы, вероятно, не поддерживают это.
Jamessan
1
@jamessan: Если я правильно понял, вы предлагаете, чтобы надежный способ отличить escape от клавиш со стрелками - это не использовать клавиши со стрелками на основе escape, что связано с моим «по какой-то причине» комментарием о программах, которые все еще используют escape- на основе клавиш со стрелками.
суперкат
Хм, у меня есть старый терминал IBM, который может эмулировать VT100, возможно, придется попробовать это
earwig
3
Я, конечно, могу подтвердить, что это было правдой, по крайней мере, в обратном направлении, когда в 80-е годы нам пришлось ставить знаки в терминальной комнате старшекурсника, чтобы не использовать клавиши со стрелками в vi по этой самой причине. Они продолжали портить свои файлы, когда драйвер tty сбрасывал прерывания.
tchrist
28

Хотя я согласен с @statox, что никто не должен подвергаться наказанию, избеганию, отлучению от церкви или перелистыванию, если они решат использовать клавиши со стрелками ... используйте свое программное обеспечение так, как считаете нужным ... Я бы не выделил большая часть laissez-faire, если бы я давал руководство новому непредубежденному пользователю. Я бы настоятельно рекомендовал, чтобы они начали со следующих лучших практик. Они являются «лучшими практиками» по определенной причине ... они были использованы с пользой для многих людей, которые были до вас и меня.

Черт, даже собственная помощь Вима подталкивает вас в этом направлении , хотя и не без гиперболы (« сильно замедляет») ...

Вы также можете перемещать курсор с помощью клавиш со стрелками. Однако, если вы это сделаете, вы значительно замедляете редактирование, потому что для нажатия клавиш со стрелками вы должны переместить руку от текстовых клавиш к клавишам со стрелками. Учитывая, что вы можете делать это сотни раз в час, это может занять значительное количество времени.

Также существует тот факт, что любой выбор, который вы делаете в начале, может стать привычкой, которую трудно сломать, если вы хотите измениться в будущем. Так при прочих равных условиях, почему бы не принять рекомендуемую привычку сейчас , а не рисковать , что с помощью клавиш со стрелками является неэффективным или кистевой-убийство?

В общем, подумайте о том, чтобы честно попытаться сделать что-то без клавиш со стрелками. По прошествии достаточного количества времени, если вы просто не можете жить без вверх / вниз / влево / вправо ... не делайте.

... это то, что я бы сказал новому пользователю, который интересовался моим мнением. Не принимайте это на свой счет, если вы не согласны (я говорю с вами, downvoter).

B слой
источник
9
Даже если вы признаете, что это действительно лучше, чем клавиши со стрелками (я даже не уверен, что это так), он где-то находится внизу списка всех возможных «лучших практик». Я бы сказал, что есть много более важных вещей, чем использование hjkl.
Мартин Турной
5
@Carpetsmoker Я не думаю, что нужно оценивать лучшие практики. Если у вас нет сильного желания использовать клавиши со стрелками, почему бы не сделать, как рекомендует Vim? Особенно, если вы новичок в Vim ... мы все знаем, как трудно изменить то, как мы что-то делаем, когда это укоренилось.
B Layer
1
«Вы сильно замедляете редактирование» - мне это кажется преувеличением ... тем не менее я согласен, что стоит попробовать. Честно говоря, это не так важно, чтобы окончить войну.
Shadow
2
@BLayer нет не здесь - это самая гражданская дискуссия на тему, которую я когда-либо видел. Но войны, безусловно, велись ...
Shadow
1
don't think it's necessary to rank best practicesЧто ж, мне кажется, что мы должны сосредоточиться на вещах, которые дают нам наибольшую ценность в жизни, учитывая, что ресурсы ограничены, а жизнь коротка. Мне довелось знать, что ключи hjkl являются сердцем из-за того, что в детстве с ошибками они играли в мошенника, жгута, ангбанда и т. Д. На ноутбуке без цифровой клавиатуры, но некоторые люди провели свое детство лучше, и им придется «отучить» клавиши со стрелками, независимо от того. Я думаю, что изучение движений, диапазонов и т. Д. - гораздо более полезный способ провести время.
Мартин Турной
16

В других ответах говорилось, что потеря эффективности при перемещении рук из домашнего ряда не такая уж большая проблема, и я в основном согласен. Однако, что это большая сделка , когда вы изучаете Vim, всегда используя клавиши со стрелками , чтобы избежать переключения в нормальный режим работы .

Другими словами, использование сингла, в котором вы бы использовали сингл h, не является огромной потерей производительности, но использование того, где вы могли бы использовать, EscI - огромная потеря.

Вот почему люди советуют вам избегать клавиш со стрелками, когда вы изучаете vim, потому что это заставляет вас учиться в обычном режиме, а не выходить из режима вставки. Нормальный режим - это то, где все ваши достижения эффективности.

Карл Билефельдт
источник
1
+1. Другими словами: «Не используйте клавиши со стрелками и не используйте hjkl». (Сохраняя преднамеренную гиперболу.)
wchargin
3
На самом деле, а не в 10 раз вы могли бы использовать 1 0 или, еще проще, Home. Последний работает даже в Windows Notepad.
Руслан
7

Есть две основные причины, почему люди говорят, что вы не должны использовать клавиши со стрелками. Некоторые утверждают, что hjkl предпочтительнее, потому что он держит руки на домашнем ряду, что не является ложным , но также не имеет значения. Другие, в том числе и я, сказали бы, что вы не должны использовать клавиши со стрелками, если вы перемещаете более нескольких символов, но вы также не должны использовать hjkl.

Важно не то, какие ключи вы используете, а сколько . Если вы хотите перейти к началу слова, вы не нажмете hhh; ты ударил b. Конец слова есть e, нет llll. Начало линии: 0, конец строки: $. И что-нибудь еще, /searchдля текста, который существует, куда вы хотите пойти. (или какая из продвинутых команд движения вы предпочитаете).

Но каждый раз, когда вы набираете одну и ту же клавишу более двух раз подряд, есть лучший способ сделать это.

луч
источник
7

Более точное утверждение может быть следующим: «использование клавиш со стрелками - плохая практика при попытке лучше изучить vim » . Люди, плохо знакомые с vim, привыкли использовать клавиши со стрелками для перемещения и поэтому не учатся hjkl, таким образом, не имея возможности увидеть, является ли это предпочтительным.

Лично, после некоторого общего знакомства с vim, я на некоторое время отключил клавиши со стрелками, чтобы освоиться, hjklи включил их позже, чтобы упростить мои .vimrc. Обычная мудрость верна в моем случае; как только я знал, как использовать обе hjklклавиши и клавиши со стрелками, я почти полностью использовал первую.

Патрик Санан
источник
6
Я не согласен. Как говорится в этом блоге , подход «все или ничего» для начинающих помогает создать «недружественную» для пользователя репутацию vim. Новые пользователи начинают, увязают и ошеломляются и (что неудивительно) делают вывод, что vim - это безобразный беспорядок, и переключаются обратно на редактор, где они могут быть прилично продуктивными. - Если ты учишься плавать, ты не бросаешься с лодки в открытый океан. Вполне допустимо грести вокруг бассейна для детей, пока вы не освоитесь с водой.
RM
2
... не сказать, что отключение клавиш со стрелками не будет работать для людей. Но это шаг «Мне нравится vim, и я хочу научиться использовать его лучше», а не «Я новичок в vim и хочу научиться его использовать».
RM
5

Обычный ответ предполагает эффективность. Скорее всего, вы прошли обучение на протяжении многих лет, чтобы использовать сенсорный набор текста, при котором вы держите руки в руках asdf и jkl ;. Подавляющее большинство привязок клавиш в Vi разработано вокруг этого факта, включая команды перемещения hjkl.

Лично я на самом деле использую оба. Я использую hjkl, когда активно редактирую большие фрагменты текста, и клавиши со стрелками при прокрутке файлов журналов (и |, g и /, когда я делаю точечные изменения в файле). Это как раз то, что хорошо работает для меня, и в таком случае это то, что действительно имеет значение.

Остин Хеммелгарн
источник
2

Давным-давно во многих терминалах не было клавиш со стрелками или не было всех четырех из них. Программные системы, которые нуждались в навигации, обычно обеспечивали своего рода навигационный подход, не полагаясь на клавиши со стрелками, и hjkl vi - это канонический пример. (Другой классический пример - WordStar ^ E- ^ S- ^ X- ^ D.) По мере того, как утилита навигации по клавишам становилась все более очевидной, все больше и больше новых терминалов стали поставляться с клавишами со стрелками, и программные системы часто отображали их на старых способах навигации. Тем не менее, это создавало проблемы переносимости: если бы дети, обучающиеся в школах, стали полагаться на такую ​​причудливую, новомодную особенность, как клавиши со стрелками, то, как они думали, они не могли бы быть продуктивными - когда-то распространенными - клавиатуры без клавиш со стрелками.

Так, преподаватели курсов по основам информатики стали осторожно предупреждать студентов, чтобы они учились использовать наименьший общий знаменатель, чтобы максимизировать их возможности трудоустройства. И эта практика давно пережила любые причины, которые могли когда-то иметь.

В современных реализациях vi основная причина, по которой предпочитается hjkl, заключается в том, что использовать клавиши, находящиеся под рукой, немного быстрее, чем перемещать руку туда, где находятся клавиши со стрелками. Недостатком избегания переключения контекста вашей руки, конечно же, является то, что вам может потребоваться выполнить переключение контекста vi. В настоящее время, когда люди очень редко ценят скорость печати, то, делаете ли вы одно или другое, в значительной степени зависит от личных предпочтений, и нет ничего плохого в использовании клавиш со стрелками, если они когда-либо были.

копать землю
источник