Оттачиваем мастерство работы в консоли

http://kukun.in/mastering-your-terminal-hotkeys
  • Перевод
  • Tutorial
После того, как у меня появился новый монитор на рабочем месте, я начал новую итерацию улучшения своего «безмышечного» (mouse-less, прим. пер.) опыта. Вы же знаете, что это значит, не так ли? Это значит, что каждый раз, когда вы беретесь за мышку, убирая руку с клавиатуры, вы тратите немного времени и энергии. Если вам нужно набирать много текста (а я много пишу кода), это становится существенным.

Так же существует следующий уровень «безмышечного» опыта, когда вы стараетесь избежать труднодоступных клавиш, например Delete, Backspace, Escape или даже Enter.

Если вы держите руки в стандартной позиции для 10-пальцевой слепой печати, более удобно нажать Ctrl-m вместо того, чтобы тянуться мизинцем к энтеру.

image

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

Для начала, сравнительная таблица:
Название Типичная клавиша Удобная альтернатива
Начало строки Home Ctrl-a
Конец строки End Ctrl-e
Один символ вперед Right Arrow Ctrl-f
Один символ назад Left Arrow Ctrl-b
Удалить символ под курсором Delete Ctrl-d
Удалить символ перед курсором Backspace Ctrl-h
Предыдущая команда в истории Up Arrow Ctrl-p
Следующая команда в истории Down Arrow Ctrl-n
Ввод команды Enter Ctrl-j или Ctrl-m
Как бонус, вот еще список удобных сочетаний:
Название Сочетание клавиш
Вырезать предыдущее слово Ctrl-w
Вырезать все к концу строки Ctrl-k
Вырезать все к началу строки Ctrl-u
Вставить вырезанное ранее Ctrl-y
Откатить изменение Ctrl-_ (Ctrl+Shift+-)
Очистить экран Ctrl-l
Не забудьте попробовать эти сочетания в других приложениях. Я думаю, вы удивитесь, насколько широко они поддерживаются.

Почему это работает


Прежде всего, существует широко используемая библиотека readline. Попробуйте удалить ее из вашей системы, и вы узнаете, сколько приложений от нее зависят (ЭТО БЫЛА ПЛОХАЯ ШУТКА. НЕ ДЕЛАЙТЕ ЭТО). Из официальной домашней страницы:

Библиотека GNU Readline предоставляет набор функций, позволяющих пользователю редактировать вводимые команды прямо в месте ввода.

Это значит, что приложение может просто использовать эту библиотеку для пользовательского ввода, и она позаботится обо всех «плюшках». Из официальной документации вы можете узнать, что она поддерживает emacs и vi режимы, где первый идет по умолчанию. Vi режим более знаком виммерам, однако есть один существенный недостаток: нет индикатора текущего режима.

readline предоставляет большинство сочетаний, но не все. Среди них есть Ctrl-h, Ctrl-m, Ctrl-j. Но почему они работают? Я думаю, вам понравится ответ.

Помните ли вы таблицу ASCII символов? Там еще в начале таблицы есть 32 старых ненужных управляющих символов. И если вы посмотрите на сочетание Ctrl-m с помощью утилиты xev, то увидите

<code>KeyRelease event, serial 34, synthetic NO, window 0x1800001,
    root 0x103, subw 0x0, time 17907461, (780,924), root:(3342,946),
    state 0x4, keycode 58 (keysym 0x6d, m), same_screen YES,
"   XLookupString gives 1 bytes: (0d) "
    XFilterEvent returns: False
</code>

что XLookupString возвращает 0x0d байт для этого сочетания. А 0x0d байт это не что иное, как управляющий символ возврата каретки, так же известный как \r. Этот управляющий символ говорит терминалу принять вашу команду, работая так же, как и Enter. Так что, управляющие символы не такие уж и ненужные (ну, по крайней мере часть из них).

Другой интересный вопрос, как же система определяет связь между Ctrl-m сочетанием и символом возврата каретки. Ответ на это не менее интересный — Caret notation: метод записи управляющих символов с помощью печатных. Правило очень простое: просто инвентируйте седьмой бит в коде управляющего символа, и получите соответствующий печатный. С одной стороны, все просто; с другой, нельзя переназначить. Но не верьте мне, проверьте сами здесь.

На этом все. Я надеюсь, материал был полезный. Совершенствуйтесь!

P.S. Индикатор режима в readline все-таки присутствует, начиная с версии 6.3. Для этого нужно добавить set show-mode-in-prompt On в ~/.inputrc. Спасибо xaizek
P.S.S.Таблицу ascii кодов можно посмотреть командой man ascii. Опять же, спасибо xaizek
Поделиться публикацией
Комментарии 116
    +34
    Переводить самого себя?! Спасибо за лайфхак для хабра!
      +4
      Vi режим более знаком виммерам, однако есть один существенный недостаток: нет индикатора текущего режима.
      И при этом в документации по приведенной ссылке написано:
      show-mode-in-prompt
      If set to `on', add a character to the beginning of the prompt indicating the editing mode: emacs (`@'), vi command (`:'), or vi insertion (`+'). The default value is `off'.
      Это сравнительно недавнее добавление, начиная с readline 6.3 (эта версия вышла полтора года назад). И как-то все по привычке считают, что индикатора нет.

      Так что добавляете set show-mode-in-prompt On в ~/.inputrc
      и получаете...


      P.S. Коды символов удобно смотреть в man ascii.
        0
        Спасибо за дополнение. Допишу в статью.
        +2
        А почему для «Вырезать предыдущее слово» и «Вставить вырезанное ранее» указана одна и та же комбинация «Ctrl-w»? Вырезание работает, а вставка — это видимо что-то еще.
          +2
          Ctrl-y
            0
            Исправил, спасибо
            +29
            Когда я был «маленький» я тоже много говнокодил и активно изучал mouse-less. Я смеялся над умными книгами, где говорилось, что в среднем программист пишет 10 строк кода в день. Ха-ха! же несколько тысяч мог накодить! Когда я стал «старым» и медлительным, я анализировал проекты своей молодости которые ушли в продакшн и, с учетом отладки, тестирования, исправления багов и пр. — картина не радужная. В итоге получается, конечно не 10 строк в день, но и завершенными проектами эти поделки назвать сложно. А чтобы их завершить нужно… взять и выкинуть все в мусорку. Сейчас, даже если у меня отнять руки, взяв карандаш в зубы и тыкая по клавиатуре один символ в минуту я сделаю это лучше и быстрее, потому как 99% времени у меня уходит на размышления, а не на клацанье по клаве.
              +1
              Вы молодец
                0
                Вы правы, на размышления уходит времени достаточно, по крайней мере для того, чтобы несколько раз «сгонять» за мышью. Хотя существуют ситуации, когда думать приходиться гораздо быстрее и вот тут безмышиные навыки приходят на помощь. ИМХО: когда сильно устаешь (обычно на завершающем этапе) сил на переброс руки на мышь уже не хватает. Спасибо за материал, вещь нужная, себя нужно любить)
                  +3
                  это как же надо устать, чтобы не хватало сил перебросить руку до мышки, но при этом хватало сил подумать над кодом который пишешь
                  +1
                  Сейчас, даже если у меня отнять руки, взяв карандаш в зубы и тыкая по клавиатуре один символ в минуту я сделаю это лучше и быстрее

                  Думаю ваши нервы сдадут после нескольких минут такого кодинга и вы вернетесь к классической схеме набора кода. Так же у меня они сдают, когда приходится пользоваться мышкой.
                    +2
                    Никому не интересно, пишите вы 10 или тысячи строк кода, главное — быстро шипать. Шипать, пока продукт еще нужен рынку. Пока вы философствуете о лучших практиках и рассуждаете как нужно делать, ваши конкуренты уже что-то тестируют и понимают более важные проблемы продукта, чем проблемы кода.

                    Идеально — найти баланс между качеством кода и скоростью шипинга.

                    Я уверен, что сейчас этот комментарий наберет -(рейтинг вашего комментария), но это сказать было нужно. Но может быть это все еще мой максимализм.
                      +1
                      Идеально — найти баланс между качеством кода и скоростью шипинга.
                      Мне кажестся, что противополстовлние скрости разработки и качества — миф.

                      Я видел и ужасный код, написанный после долгих философских рассуждений, и погоню за скоростью, в которой развитие кода топчется на месте из-за поразительного количества копипаста, и тысячи велосипедов, возникающих из-за того, что люди начинают думать о шипинге вместо изучения существующих решений в области. В то же время хороший код зачастую оказывается вполне лаконичным.
                        0
                        Минусов, я думаю, вы не нахватаете, потому что во многом вы правы. Но баланс между скоростью (много бесполезного не поддерживаемого кода) и качеством (меньше кода, легко разобраться и поддерживать) вы найдете только с опытом. Бесполезно прочитав «умную» книжку тратить уйму времени над обмыванием «идеальной» архитектуры. Все ваши измышления уйдут в топку, как только вы столкнетесь с реальностью. Анализируйте ваши предыдущие проекты, делайте выводы, оптимизируйте процесс разработки. Ну а тренинги по оптимизации клацания по клаве вещь во многом полезная, но реального профита для разработки не дает, разве что произвести впечатление на коллег или начальника.
                        +3
                        Оно конечно звучит красиво. Но вы проведите эксперимент. Возьмите карандаш в зубы и попробуйте написать Hello World на любимом языке программирования. Эксперименты вещь полезная. Они обладают отрезвляющим эффектом.
                          0
                          Вообще-то пост не о этом. Но ради эксперимента попробовал — 5 минут на С++. Безумно много, согласен. Но это 100 строк за рабочий день. Разуметься тыкать карандашом по клаве по 8 часов подряд у меня не получиться, но если случиться несчастье — то именно эта та практика, которую имеет смысл практиковать. И слепые умудряются кодить
                            +1
                            Пост не о том, а вот ваш комментарий именно о том :).

                            Клавиатурой программист не только набирает код, но и занимается навигацией по нему. И вообще делает много всего. Что касается возможных несчастий — я читал посты людей, встретившихся с RSI, варианты решения у тех, кто не покинул профессию — голосовой набор или медленная печать двумя руками с обширным использованием хоткеев и IDE. Хоть вообще о таком страшно даже думать :(.

                            Слепым без клавиатуры вообще никак. По очевидным причинам.

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

                              0
                              Так я и не говорю что это не нужно. Я всего лишь обозначил то, что навыки владения клавиатурой вообще никак не коррелируют с качеством и скоростью разработки. Просто зацепило "(а я много пишу кода)"
                                0
                                А я и ничего про качество кода и не говорил. Если вы мало набираете текста, тогда и задумываться над оптимизацией своей работы с устройствами ввода не нужно. Если же вы журналист, писатель, или же программист (а я просто обозначил, что я программист), тогда mouseless начинает иметь смысл.
                                  0
                                  Я думаю, что исследования эту корреляцию легко выявят. Также я думаю, что лично вы, по уровню навыка владения клавиатурой, окажетесь в верхних двадцати процентах.

                                  Это как с каратистами, боксёрами или самбистами — они все будут утверждать, что сила не главное и со спортивным успехом не коррелирует. Только вот шансы победить в армрестлинге каратиста или боксёра очень невелики, а с самбистом их и вовсе нет.
                          • НЛО прилетело и опубликовало эту надпись здесь
                            +2
                            Вот бы кто еще объяснил, почему в различных screen-tmux-mosh все время слетают различные комбинации (типа Shift-F5) или даже просто управляющие клавиши (F5, PgUp и т.д.), например, в midnight commander. Почему все эти tmux-screen-mosh вообще что-то делают с кодами приходящих клавиш вместо того, чтобы просто отправлять их дальше.
                              0
                              они их перехватывают и отправляют тому же миднайт коммандеру.
                              а вообще, я за долгие годы борьбы с поломаным терминалом научился печатать вслепую:
                              setterm -reset
                              stty sane

                              :)
                                0
                                А я запускаю
                                term_reset () {
                                    emulate -L zsh
                                    [[ -n $TTY && -n $terminfo ]] && {
                                        echoti rmacs
                                        echoti sgr0
                                        echoti cnorm
                                        echo -n $'\e[?47l'
                                    }
                                }
                                перед каждым показом приглашения ко вводу.
                                  0
                                  мне кажется что это оверкилл :)
                                  что, если мне нужен какой-либо другой режим?
                                  хотя те же github-prompt делают намного больше операций на каждый чих.
                                    0
                                    Какой режим? Здесь делаются пять вещей:
                                    1. Графический режим переключается в нормальный (графический — это когда вместо многих ASCII символов печатается всякая ересь вроде частей таблиц).
                                    2. Убирается цвет (вообще‐то абсолютно ненужная мне часть: powerline делает то же самое).
                                    3. Включается отображение курсора.
                                    4. (После echoti cnorm должно было идти ещё и echoti smkx, это я просто не сделал source ~/.zshrc в оболочке, из которой брал term_reset.) Переключается в режим «keyboard transmit».
                                    5. Отключается alternate screen.
                                    Я не могу представить себе ситуацию, когда мне
                                    1. нужно использовать графический режим (в этом режиме невозможно нормально печатать),
                                    2. оставлять цвет (да и не влияет отсутствие этой строки ни на что),
                                    3. отключать курсор (а здесь нельзя нормально редактировать напечатанное),
                                    4. использовать разное состояние keyboard transmit (приведёт к тому, что некоторые приложения станут работать некорректно: смотрите github.com/fish-shell/fish-shell/issues/2139 и ссылки внутри) или
                                    5. смотреть оболочку в alternate screen (здесь не виден scrollback, либо scrollback виден только от основного экрана).


                                    Эти строки были собраны в результате просмотра последствий вывода бинарных файлов на терминал и крэшей [Neo]Vim.
                                      0
                                      Имеете полное право, ваш компьютер, ваши процессы :)
                                      я бы лично так не делал, но это мои заботы.
                                        0
                                        Так я спрашиваю потому, что не вижу никаких причин использовать что‐либо из отключаемого таким образом функционала. Но возможно, я что‐то пропускаю из‐за такого отношения.

                                        Если что, данный код, будучи запускаемым только перед command prompt никак не мешает другим приложениям явно пользоваться графическим режимом (хотя я таких приложений не видел вообще), цветами, отключением курсора, другим режимом keyboard transmit или alternate screen. Только интерактивный zsh не сможет использовать ничего из списка.
                                          0
                                          я не спорю, честно :)
                                          я редко сейчас работаю в линукс консоли, в основном в графическом терминале, под разными системами и оболочками.
                                          У каждого свои задачи и, возможно, этот подход решает ваши.
                                          я давно уже не имел проблем с потеряным вводом в консоль, поэтому для меня данный подход это оверкилл.
                                            0
                                            Здесь проблема не с потерянным вводом — с ним‐то как раз ничего плохого не происходило, — а с тем, что после того, как вы случайно написали cat /some/binary, или у вас свалился Vim во время тестирования, пользоваться терминалом становится неудобно. Раньше такое решалось тем, что я вслепую набирал echo $'\ec'. Но это, насколько я помню, для чего‐то не работало (кажется, не переключало keyboard transmit режим, из‐за чего некоторые приложения переставали адекватно воспринимать стрелочки), да и, в отличие от term_reset, \ec очищает экран.

                                            Кстати, stty sane моя функция никак не заменяет. Но это и не нужно: у zsh есть ttyctl -f (-f[reeze]), замораживающая (некоторые) настройки терминала. Вот этот эффект мне иногда приходится отменять.
                              +14
                              Не убираю руки с клавиатуры, потому что под ней маковский тачпад. Это намного эффективнее заучивания сотен шорткатов, правда требует отсутствия предрассудков. Ещё не должно быть желания изо дня в день превращать себя в робота, которому, видите-ли, по каким-то причинам труднодоступны Delete, Backspace, Escape или даже Enter.
                                0
                                Кстати, интересная идея использовать тачпад, не убирая рук с позиции. Только как быть с мультитачем? Используете два больших пальца для скрола?
                                  +3
                                  не знаю как на маковских, но на Thinkpad-клавах есть средняя кнопка для этого
                                    +1
                                    И есть трекпоинт с которым вообще ничего не надо никуда двигать, а только слегка сместить палец.
                                      0
                                      супер удобное решение. Жаль, что они не так распространены, и даже внешнюю клавиатуру с трекпоинтом и купить
                                      0
                                      Да.

                                      Правда сама маковская клавиатура не блещет, например на ней нет Insert, Delete, (комбинации с Fn) PrintScreen и т.п.
                                      тачпад да — удобный, только на маке я перестал хотеть взять мышку, потому что тачпад реально удобнее.

                                      Потом через несколько лет, при постепенном плановом уходе от маковской техники (как оказалась у неё есть очень неудобные минусы) с удивлением обнаружил что почти такой же по удобству тачпад есть на недорогом Dell Inspiron, который еще и под ubuntu хорошо работает.
                                        +3
                                        Самое грустное, что там нет PageUp / PageDown. Остальное всё можно пережить.
                                          0
                                          Fn+arrows, try it.
                                            0
                                            Это, конечно, так. Можно и просто пробел нажимать, чтобы вниз листать. И тачпад изумительный близко. Но мне всё-равно хочется отдельные кнопки для этого. Fn от курсорных клавиш ну очень уж далеко расположена, я люблю хоткеи, которые одной рукой доступны.
                                        0
                                        Нет, кистью (одной из) нужно двигать, скролл обычным способом. Просто не обязательно держать руки в одном положении, не отрывая от основных клавиш, это искусственное ограничение.
                                          0
                                          Просто не обязательно держать руки в одном положении, не отрывая от основных клавиш, это искусственное ограничение

                                          Какой же это слепой, десятипальцевый метод тогда?
                                            –1
                                            Это же движение кистью делается, как перевели пальцы на тачпад, так и перевели обратно. Рука не отрывается от поверхности. Я люблю отрывать, но это уже дело привычки, потому что я печатаю как бог, а не как слепой.
                                              0
                                              Рука не отрывается от поверхности

                                              В слепом, десятипальцевом методе рука должна не отрываться от sdfjkl, а не от поверхности.
                                        +1
                                        Это намного эффективнее заучивания сотен шорткатов

                                        Не соглашусь с вами. Можем провести эксперимент. Уверен, у меня набор текста, работа с git, дебагинг и тестирование намного быстрее вашего будет ;)
                                          0
                                          vimeo.com/135206509 Теперь ваш черёд.
                                            +2
                                            К сожалению часовая запись может уложить мой ASUS, потому предлагаю коротенькое видео.
                                            Видео

                                        0
                                        Спасибо за собранную в кучу таблицу, удобно.
                                        Хочу дополнить список полезных сочетаний в shell(bash) перемещение по истории команд:
                                        ctrl+r — поиск по командам (вдруг кто не знает)
                                        Alt+> — самая последняя команда в списке истории
                                        Alt+< — самая первая команда.
                                        Если история команд используется очень активно, то Alt+> порой проста необходима.
                                          +1
                                          Интересный вопрос: если «проскочил» нужную команду в ctrl+r, как вернуться на одну команду назад?
                                            0
                                            У меня — <C-n>/<C-p>. Но это ZLE с bindkey -M isearch "\C-n" "history-incremental-pattern-search-forward". Исходя из man readline, я думаю, что <C-s> должен работать (найдите в man C-r и посмотрите соседей). Только <C-s> — это tty stop по‐умолчанию, и перед использованием придётся что‐то переназначить — либо через stty, либо в настройках терминала.
                                              0
                                              можно в .bashrc в последней строке написать stty stop undef
                                            0
                                            тогда и Ctrl+g — отмена reverse поиска (выход без выбора)
                                            +18
                                            Я с этим Ctrl+w регулярно закрываю вкладки, когда хочу слово стереть
                                              +2
                                              Не совсем ясно что значит
                                              Ctrl-_

                                              На сколько я понял это
                                              Ctrl+Shift+-

                                              ?
                                                0
                                                Да
                                                +2
                                                Стоит еще добавить комбинации 'ALT+.' или 'ESC + .' — перебирают аргументы предыдущих команд.
                                                  0
                                                  Дополню. Если вам приходится работать в консоли Windows и вы хотите пользоваться этими сочетаниями (и другими плюшками), установите себе Clink.
                                                    +2
                                                    «Безмышиный» здесь больше подходит, потому что «Безмышечный» — это когда отсутствуют или не задействованы мышцы. При наборе текста они все равно используются
                                                      0
                                                      Полностью согласен, я думаю нужно просто в скобках добовлять mouse-less
                                                      0
                                                      Спасибо за статью.
                                                      На счет «Начало строки: Ctrl-a»
                                                      Может кто-нибудь знает как это исправить в терминале screen?
                                                        0
                                                        Ctrl+a, потом «a» (маленькая, не «А»)
                                                          0
                                                          Да, спасибо.
                                                          Работает.
                                                          +1
                                                          Я для себя эту проблему решил перебиндив кнопки в screen, а именно:
                                                          escape ^pp # suggested binding for emacs users
                                                          После небольшого привыкания так даже удобнее и не перекрывает кнопки в vim.
                                                            0
                                                            Я использую ,i (к началу строки)/,a (к концу строки), в том числе в readline. В Vim <C-e> — довольно полезное сочетание, <C-a> забито screen’ом/tmux (с биндингами от screen, а так у него <C-b>).

                                                            Если быть точнее, то ,i — к первому непробельному символу. С readline — к первому символу, т.к. я не знаю, как сделать «к первому непробельному символу» с readline.
                                                          0
                                                          Еще один лайфхак помогающий использовать все выше перечисленное: в настройках клавиатуры сделайте байндинг CAPS LOCK -> CTRL, лично мне очень помогает (особенно хорошо чувствуется в screen где много шорткатов начинающихся с ctrl-a, capslock-a нажимать гораздо удобнее чем ctrl-a).
                                                            +1
                                                            У многих Caps Lock уже занят под переключение раскладки; к тому же, на некоторых клавиатурах это stateful-клавиша.
                                                            +4
                                                            Если вы держите руки в стандартной позиции для 10-пальцевой слепой печати, более удобно нажать Ctrl-m вместо того, чтобы тянуться мизинцем к энтеру.

                                                            Серьезно? Во-первых, любая комбинация сложнее нажатия одной клавиши. Во-вторых, на моей клавиатуре движение до энтера (мизинцем на две клавиши влево) короче, чем до контрола (две клавиши по диагонали наружу, я левой рукой даже дотянуться не могу, не передвигая руки). Ну а нажать ctrl-m, не двигая все пальцы, и вовсе невозможно.

                                                            (это, конечно, если смотреть на то положение, которое у вас на КДПВ)
                                                              +2
                                                              Возможно у автора есть педаль ctrl, кастомная клавиатура или что вероятней капс лок переделан в ctrl.
                                                                0
                                                                Caps Lock-m — координация двух рук. Тоже сложнее, чем кажется.
                                                                  +2
                                                                  Проще, чем вы думаете :).
                                                                    0
                                                                    Но сложнее, чем нажать одну клавишу.
                                                                      +1
                                                                      Нет, проще. Я ниже расписал подробно, почему.
                                                                        0
                                                                        Там как-то обойден тот замечательный момент, что движение двух пальцев сложнее координировать, чем одного.
                                                                          0
                                                                          Координнация двух пальцев на разных руках — такая вещь, которую умеют все, кто учился слепой печати. И большинство из тех, кто много занимается набором текста.

                                                                          А вот необходимость постоянно гнуть запястный сустав чтобы переместить мизинец на две клавиши вправо — верный путь к RSI.
                                                                            0
                                                                            Координнация двух пальцев на разных руках — такая вещь, которую умеют все, кто учился слепой печати. И большинство из тех, кто много занимается набором текста.

                                                                            Умение координировать не означает, что координировать легче, чем не координировать.

                                                                            А вот необходимость постоянно гнуть запястный сустав чтобы переместить мизинец на две клавиши вправо — верный путь к RSI.

                                                                            Эээ, а зачем для этого запястный сустав гнуть? Просто мизинец вытянуть мало?
                                                                              0
                                                                              Умение координировать стирает для человека разницу между скоординированым и не координированым движением.
                                                                              Эээ, а зачем для этого запястный сустав гнуть? Просто мизинец вытянуть мало?

                                                                              Пальцы правой руки лежат на JKL;. Указательный на J, мизинец на;. То есть для нажатия Enter надо подвинуть мизинец на одну клавишу вправо. Если клавиши стандартного размера, то для того, чтобы сделать это, не задействовав запястный сустав, нужно сильно напрячь мизинец, что в общем достаточно болезненно и уж точно гораздо медленне, чем Control+m. Это, кстати, на моей клавиатуре. На клавиатуре, изображённой на рисунке в топике, между мизинцем и Enter вообще две клавиши.
                                                                                0
                                                                                Умение координировать стирает для человека разницу между скоординированым и не координированым движением.

                                                                                К сожалению, нет. Потому что когда человек учится набирать, одиночные движения тоже становятся быстрее и проще.

                                                                                Если клавиши стандартного размера, то для того, чтобы сделать это, не задействовав запястный сустав, нужно сильно напрячь мизинец, что в общем достаточно болезненно и уж точно гораздо медленне, чем Control+m.

                                                                                Странно, а мне — не нужно (и совершенно не болезненно).
                                                                                  0
                                                                                  Не знаю, что у вас за пальцы и клавиатура, но для нажатия на <C-> (который на CapsLock) мне можно запястье не двигать. А для нажатия на <Enter> (который через клавишу: Steel Series 6GV2) нужно. Если не двигать, то будет напряжней и дольше.
                                                                                    0
                                                                                    Вы говорите, что разница между скоординированым и одиночным движением не стирается с опытом, потому, что скорость одиночных движений растёт и кроме того делать их с каждым разом всё легче. Соответственно, хотя качество скоординированых нажатий тоже растёт, разница между скоординированным и одиночным движеним остаётся постоянной.

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

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

                                                                                    А вот время координации продолжит падать, пока, в конце концов, не сократится настолько, что человек перестанет его замечать. И тут разница между одиночным и координированным нажатием исчезнет.
                                                                                      0
                                                                                      А вот время координации продолжит падать, пока, в конце концов, не сократится настолько, что человек перестанет его замечать.

                                                                                      Откуда у вас такая уверенность?
                                                                                        0
                                                                                        Время нажатия клавиши ограничено скоростью распространения нервных импульсов и физическими свойствами мышц.

                                                                                        Синхронизация происходит в голове, соответственно мышцы тут не участвуют, а расстояние которое проходят сигналы — существенно меньше. Поэтому минимальное время, за которое можно скоординироваться перед нажатием будет существенно меньше времени самого нажатия.

                                                                                        По моему, начиная с одной пятой секунды разница уже не ощущается.
                                                                                          0
                                                                                          Синхронизация происходит в голове, соответственно мышцы тут не участвуют, а расстояние которое проходят сигналы — существенно меньше. Поэтому минимальное время, за которое можно скоординироваться перед нажатием будет существенно меньше времени самого нажатия.

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

                                                                                          По моему, начиная с одной пятой секунды разница уже не ощущается.

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

                                                                                              (смешное развлечение: положите обе руки на стол, так, чтобы все пальцы кончиками касались столешницы. Теперь поочередно постучите одновременно одноименными пальцами каждой руки: сначала обоими большими, затем обоими средними, и так до мизинца. «Постучите» — это несколько раз подряд одним и тем же пальцем. Остальные пальцы в это время должны оставаться на столешнице (или хотя бы не стучать по ней). Сравните степень «одновременности» для разных пальцев. Найдите ту скорость, с которой вы можете стучать пальцами разных рук гарантированно одновременно. Сравните ее со скоростью, с которой вы можете стучать одним (тем же) пальцем на одной руке. Если не надоело — сравните со скоростью одновременного движения двух пальцев на одной руке.)
                                                                                      0
                                                                                      А что за клавиатура, если не секрет?
                                                                                        0
                                                                                          0
                                                                                          Вот это номер! У меня точно такая же! Жать Enter мизинцем, не задействуя запястье реально тяжело и по субъективным ощущениям ведёт к травме.
                                                                                            0
                                                                                            Ну, вы не забывайте, что у людей отличаются не только клавиатуры, но и руки — включая их тренированность.
                                                                                              0
                                                                                              Ну я помню, да. Но подозреваю, что людей с такими руками, как у меня — подавляющее большинство.
                                                                                      0
                                                                                      Кстати, еще один нюанс. Дело в том, что я набираю вслепую с альтернативным положением пальцев. И получается, у меня три клавиши между мизинцем и энтером, и только одна между мизинцем и капс локом.
                                                                      +1
                                                                      Если CapsLock перемаплен на Control, то Сontrol+m раза в 2 быстрее. И раз в 10 приятнее.
                                                                        0
                                                                        То есть сработает уже не на любой клавиатуре. Приятно, да.
                                                                          0
                                                                          На любой клавиатуре, на которой есть CapsLock :). Там хабра съел часть. На всякий случай продублирую сюда правленый вариант.

                                                                          Если CapsLock переделан в Control, то <C-j> быстрее потому, что CapsLock стоит слева от клавиши a, на которой лежит мизинец. А Enter находится через клавишу вправо от ;, на которой лежит мизинец правой руки.
                                                                            0
                                                                            Я боюсь, что на моей клавиатуре вы получите просто 'M' вместо перевода строки.
                                                                              0
                                                                              Я правил сообщение выше, оказалось, что правил не то, которое надо было править, но теперь уже ничего изменить не могу. Прошу прощения.

                                                                              Насчёт вашей клавиатуры — уверен, что если её воткнуть в мой компьютер — будет работать прекрасно :).
                                                                                0
                                                                                Мне кажется, вы прекрасно понимаете, о каком сценарии я говорю. Мне вот часто приходится сидеть за чужими компьютерами, и даже различия в переключении раскладки клавиатуры раздражают, хотя это редко нужно. А уж Caps вместо Ctrl — ненене.
                                                                                  0
                                                                                  Если речь идёт о работе на чужом компьютере, то о собственном комфорте естественным образом приходится забыть, это правда.

                                                                                  Я был уверен, что мы обсуждаем работу на своей машине. На мой взгляд, собственное рабочее место, как и свои привычки, нужно максимально кастомизировать под свои нужды. Когда я осознал, что переключение окон по Alt+Tab требует запоминать в каком окне ты был до текущего, я отказался от этой порочной практики и повесил используемые прораммы на хоткеи. Когда я понял, сколько раз в минуту!!!! перевожу взгляд с монитора на клавиатуру и обратно, я стёр с клавиш буквы и научился печатать не глядя. Когда прикинул, сколько раз в день жму Control — сделал дополнительный Control на CapsLock.

                                                                                  Если окажется, что можно сделать работу ещё комфортнее, пусть ценой большего дискомфорта при временной пересадке за другой компьютер — я сделаю это не задумываясь. Ибо за своим я провожу больше половины своей же жизни.
                                                                                    0
                                                                                    На мой взгляд, собственное рабочее место, как и свои привычки, нужно максимально кастомизировать под свои нужды.

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

                                                                                    PS У меня вот три «своих» компьютера, и я несколько утомился поддерживать в синхронизации даже тот минимум настроек, который я использую.
                                                                                      +1
                                                                                      Ну тот факт, что чем больше ты кастомизируешь, тем больше проблем на других компьютерах — неоспорим. Разногласия возникают, по поводу того, стоит ли удобство у себя дискомфорта в других местах.

                                                                                      Синхронизацию настроек приходится возлагать на средства автоматизации — решение не для всех.

                                                                                      Короче это отдельная, тоже очень интересная дискуссия, но, видимо, не совсем по теме данного топика.
                                                                      +2
                                                                      Странно говорить, что Ctrl дальше чем Enter, да и тянуться за ним мизинцем до него тоже так себе удовольствие.
                                                                        +8
                                                                        Я почитаю на хабре кучу полезных советов.
                                                                        Проходит время. И чик, все забыл.

                                                                        Решил с этим бороться.
                                                                        Засунул вывод в терминале при старте:

                                                                        Может пригодится кому-нибудь.
                                                                        Perl Скрипт, который формирует это хозяйство здесь.
                                                                        Текстовый вывод для /etc/motd здесь.
                                                                          0
                                                                          А зачем здесь <C-j>? Нажимать просто <Enter> вроде быстрее.
                                                                            0
                                                                            Ну это я со статьи взял, просто за основу.
                                                                            Для себя я там кое-что удалил, кое-что наоборот добавил.
                                                                            В том числе удалил и C-j.
                                                                            Я еще не дошел до такого скила, чтобы юзать C-j, вместо Enter ))
                                                                              –2
                                                                              Чем больше зазубрено шорткатов, тем круче скилл, несомненно.
                                                                              А если забылось, то только потому, что мозг падла, а не потому, что знания по своей сути абсолютно бесполезные и не пригождаются на практике. *irony*
                                                                              +2
                                                                              Если CapsLock переделан в Control, то <C-j> быстрее потому, что CapsLock стоит слева от клавиши , на которой лежит мизинец. А находится через клавишу вправо <;>, на которой лежит мизинец правой руки.
                                                                                0
                                                                                Я как‐то не замечаю разницы; наверное, с непривычки: хотя я вижу, что мне нужно перемещать кисть для <Enter> и <BS>, нажимаются они привычно быстро. А вот конкретно <C-j> в Vim иногда забирают под что‐то вроде умного автодополнения, потому что это довольно удобный <C-Space> (точнее, это <C-Space>, потому что Vim никогда нормально не переваривает нулевой байт, в том числе и здесь; в gvim такой проблемы нет). Ну и в dvorak особой разницы между <C-j> и <C-m> нет: что j, что m на нижнем ряду под указательным пальцем, только j ещё и на той же руке, что и переделанный CapsLock.

                                                                                Кисть перемещается в любом случае, только с <Enter> она перемещается дальше.

                                                                                PS: Я использую <code> вокруг сочетаний клавиш не потому, что мне нечем заняться, а потому что хабраредактор может выреза́ть всякие вещи, похожие на HTML тёг. В вашем сообщении явно что‐то пропущено.
                                                                            0
                                                                            Мне для удобной работы в консоли (кроме перечисленного) очень помог переход на dvorak-programmer. В основном это всякие вещи спецсимволы типа ;,.:<>'"/?@^-_\|, особенно минус, который часто используется в параметрах команд и теперь находится практически под мизинцем, и до которого теперь не надо тянуться. Ну и просто на английском печатать стало заметно проще.
                                                                              0
                                                                              Давно хотел попробовать. Скажите, а проблем с хоткеями нету? В часности в vim? Ведь они по сути рассчитаны на обычный qwerty.
                                                                                +1
                                                                                За исключением hjkl никакого QWERTY тут нет и в помине. Остальное мнемоники вроде d[elete] или t[o]/f[ind]. Я нормально пользуюсь programming dvorak и иногда hjkl (чаще jk, hl намного реже). Просто помните, что в большинстве случаев быстрее использовать не hjkl.

                                                                                В остальных приложениях обычно тоже сочетания привязаны к мнемоникам, связанным со значением сочетания, а не к положению клавиши на клавиатуре.
                                                                                  0
                                                                                  Первое время, конечно же, есть. А потом все выучивается, я в емаксе работаю (и во многих других программах), тут хоткеи что в кверти не супер удобны, что в двораке, не сильно поменялись. Есть еще путь переназначения всего на привычные положения, но я не рискнул по нему идти)
                                                                                0
                                                                                Ctrl + M на Mac-клавиатуре набирать определённо неудобнее, чем нажать Enter. А за статью спасибо.
                                                                                  0
                                                                                  Некоторые советы не работают…

                                                                                  По поводу «Вместо того, чтобы тянуться мизинцем к enter-у»…
                                                                                  Я вот не тянусь, у меня удобная клавиатура, и мизинец буквально висит над энтером, и я точно не промахнусь мимо Enter-а, а вот вместо ctrl-m вполне можно Ctrl-< нажать.

                                                                                  и Ctrl-w у меня уже стойкая ассоциация с закрытием вкладки/окна.

                                                                                    0
                                                                                    Прелесть маленьких клавиатур тут демонстрируется на ура…
                                                                                      0
                                                                                      Тут через почту человек попросил передать:
                                                                                      Есть маленький нюанс — далеко не во всех nix системах это поведение работает:)
                                                                                      Только что было проверено в AIX/HP-UX — половина не работает.
                                                                                      Выше уже отписывались о неработающих командах. Доступный набор команд в основном зависит от используемой оболочки, но могут быть и другие факторы (например, версия, конфигурация, способ взаимодействия с оболочкой, выставленный тип терминала). Стоит иметь это в виду и консультироваться со справкой в случае сомнений.
                                                                                        0
                                                                                        В консоли аналог xev — showkeys
                                                                                        работает почти так же
                                                                                          0
                                                                                          Почему никто не отметил, что Ctrl-D завершает сессию?
                                                                                            0
                                                                                            В консоли cisco эти команды также работают, очень удобно. про сокращения из бонус таблицы не знал, спасибо.

                                                                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                            Самое читаемое