После того, как у меня появился новый монитор на рабочем месте, я начал новую итерацию улучшения своего «безмышечного» (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)


  1. galk_in
    15.09.2015 23:14
    +34

    Переводить самого себя?! Спасибо за лайфхак для хабра!


  1. xaizek
    15.09.2015 23:37
    +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
    и получаете...


    1. Kukunin
      16.09.2015 00:01

      Спасибо за дополнение. Допишу в статью.


  1. conf
    16.09.2015 02:26
    +2

    А почему для «Вырезать предыдущее слово» и «Вставить вырезанное ранее» указана одна и та же комбинация «Ctrl-w»? Вырезание работает, а вставка — это видимо что-то еще.


    1. onix74
      16.09.2015 08:30
      +2

      Ctrl-y


    1. Kukunin
      16.09.2015 09:40

      Исправил, спасибо


  1. laphroaig
    16.09.2015 02:40
    +29

    Когда я был «маленький» я тоже много говнокодил и активно изучал mouse-less. Я смеялся над умными книгами, где говорилось, что в среднем программист пишет 10 строк кода в день. Ха-ха! же несколько тысяч мог накодить! Когда я стал «старым» и медлительным, я анализировал проекты своей молодости которые ушли в продакшн и, с учетом отладки, тестирования, исправления багов и пр. — картина не радужная. В итоге получается, конечно не 10 строк в день, но и завершенными проектами эти поделки назвать сложно. А чтобы их завершить нужно… взять и выкинуть все в мусорку. Сейчас, даже если у меня отнять руки, взяв карандаш в зубы и тыкая по клавиатуре один символ в минуту я сделаю это лучше и быстрее, потому как 99% времени у меня уходит на размышления, а не на клацанье по клаве.


    1. dizer
      16.09.2015 05:46
      +1

      Вы молодец


    1. ruRikki
      16.09.2015 10:00

      Вы правы, на размышления уходит времени достаточно, по крайней мере для того, чтобы несколько раз «сгонять» за мышью. Хотя существуют ситуации, когда думать приходиться гораздо быстрее и вот тут безмышиные навыки приходят на помощь. ИМХО: когда сильно устаешь (обычно на завершающем этапе) сил на переброс руки на мышь уже не хватает. Спасибо за материал, вещь нужная, себя нужно любить)


      1. Borz
        16.09.2015 10:45
        +3

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


    1. Delphinum
      16.09.2015 20:41
      +1

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

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


    1. berman
      16.09.2015 20:59
      +2

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

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

      Я уверен, что сейчас этот комментарий наберет -(рейтинг вашего комментария), но это сказать было нужно. Но может быть это все еще мой максимализм.


      1. Lol4t0
        16.09.2015 22:53
        +1

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

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


      1. laphroaig
        17.09.2015 01:14

        Минусов, я думаю, вы не нахватаете, потому что во многом вы правы. Но баланс между скоростью (много бесполезного не поддерживаемого кода) и качеством (меньше кода, легко разобраться и поддерживать) вы найдете только с опытом. Бесполезно прочитав «умную» книжку тратить уйму времени над обмыванием «идеальной» архитектуры. Все ваши измышления уйдут в топку, как только вы столкнетесь с реальностью. Анализируйте ваши предыдущие проекты, делайте выводы, оптимизируйте процесс разработки. Ну а тренинги по оптимизации клацания по клаве вещь во многом полезная, но реального профита для разработки не дает, разве что произвести впечатление на коллег или начальника.


    1. poxu
      16.09.2015 23:40
      +3

      Оно конечно звучит красиво. Но вы проведите эксперимент. Возьмите карандаш в зубы и попробуйте написать Hello World на любимом языке программирования. Эксперименты вещь полезная. Они обладают отрезвляющим эффектом.


      1. laphroaig
        17.09.2015 00:47

        Вообще-то пост не о этом. Но ради эксперимента попробовал — 5 минут на С++. Безумно много, согласен. Но это 100 строк за рабочий день. Разуметься тыкать карандашом по клаве по 8 часов подряд у меня не получиться, но если случиться несчастье — то именно эта та практика, которую имеет смысл практиковать. И слепые умудряются кодить


        1. poxu
          17.09.2015 01:05
          +1

          Пост не о том, а вот ваш комментарий именно о том :).

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

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

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


          1. laphroaig
            17.09.2015 02:08

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


            1. Kukunin
              17.09.2015 11:47

              А я и ничего про качество кода и не говорил. Если вы мало набираете текста, тогда и задумываться над оптимизацией своей работы с устройствами ввода не нужно. Если же вы журналист, писатель, или же программист (а я просто обозначил, что я программист), тогда mouseless начинает иметь смысл.


            1. poxu
              17.09.2015 12:32

              Я думаю, что исследования эту корреляцию легко выявят. Также я думаю, что лично вы, по уровню навыка владения клавиатурой, окажетесь в верхних двадцати процентах.

              Это как с каратистами, боксёрами или самбистами — они все будут утверждать, что сила не главное и со спортивным успехом не коррелирует. Только вот шансы победить в армрестлинге каратиста или боксёра очень невелики, а с самбистом их и вовсе нет.


    1. stychos
      22.09.2015 13:38
      -1

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


  1. DmitryKoterov
    16.09.2015 02:55
    +2

    Вот бы кто еще объяснил, почему в различных screen-tmux-mosh все время слетают различные комбинации (типа Shift-F5) или даже просто управляющие клавиши (F5, PgUp и т.д.), например, в midnight commander. Почему все эти tmux-screen-mosh вообще что-то делают с кодами приходящих клавиш вместо того, чтобы просто отправлять их дальше.


    1. steamoor
      22.09.2015 17:46

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

      setterm -reset
      stty sane

      :)


      1. ZyXI
        22.09.2015 18:41

        А я запускаю

        term_reset () {
            emulate -L zsh
            [[ -n $TTY && -n $terminfo ]] && {
                echoti rmacs
                echoti sgr0
                echoti cnorm
                echo -n $'\e[?47l'
            }
        }
        перед каждым показом приглашения ко вводу.


        1. steamoor
          22.09.2015 18:43

          мне кажется что это оверкилл :)
          что, если мне нужен какой-либо другой режим?
          хотя те же github-prompt делают намного больше операций на каждый чих.


          1. ZyXI
            22.09.2015 19:09

            Какой режим? Здесь делаются пять вещей:

            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.


            1. steamoor
              22.09.2015 19:14

              Имеете полное право, ваш компьютер, ваши процессы :)
              я бы лично так не делал, но это мои заботы.


              1. ZyXI
                22.09.2015 19:22

                Так я спрашиваю потому, что не вижу никаких причин использовать что?либо из отключаемого таким образом функционала. Но возможно, я что?то пропускаю из?за такого отношения.

                Если что, данный код, будучи запускаемым только перед command prompt никак не мешает другим приложениям явно пользоваться графическим режимом (хотя я таких приложений не видел вообще), цветами, отключением курсора, другим режимом keyboard transmit или alternate screen. Только интерактивный zsh не сможет использовать ничего из списка.


                1. steamoor
                  22.09.2015 19:33

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


                  1. ZyXI
                    22.09.2015 23:00

                    Здесь проблема не с потерянным вводом — с ним?то как раз ничего плохого не происходило, — а с тем, что после того, как вы случайно написали cat /some/binary, или у вас свалился Vim во время тестирования, пользоваться терминалом становится неудобно. Раньше такое решалось тем, что я вслепую набирал echo $'\ec'. Но это, насколько я помню, для чего?то не работало (кажется, не переключало keyboard transmit режим, из?за чего некоторые приложения переставали адекватно воспринимать стрелочки), да и, в отличие от term_reset, \ec очищает экран.

                    Кстати, stty sane моя функция никак не заменяет. Но это и не нужно: у zsh есть ttyctl -f (-f[reeze]), замораживающая (некоторые) настройки терминала. Вот этот эффект мне иногда приходится отменять.


  1. Xlab
    16.09.2015 03:42
    +14

    Не убираю руки с клавиатуры, потому что под ней маковский тачпад. Это намного эффективнее заучивания сотен шорткатов, правда требует отсутствия предрассудков. Ещё не должно быть желания изо дня в день превращать себя в робота, которому, видите-ли, по каким-то причинам труднодоступны Delete, Backspace, Escape или даже Enter.


    1. Kukunin
      16.09.2015 09:42

      Кстати, интересная идея использовать тачпад, не убирая рук с позиции. Только как быть с мультитачем? Используете два больших пальца для скрола?


      1. Borz
        16.09.2015 10:51
        +3

        не знаю как на маковских, но на Thinkpad-клавах есть средняя кнопка для этого


        1. Rasifiel
          16.09.2015 20:11
          +1

          И есть трекпоинт с которым вообще ничего не надо никуда двигать, а только слегка сместить палец.


        1. Kukunin
          16.09.2015 21:49

          супер удобное решение. Жаль, что они не так распространены, и даже внешнюю клавиатуру с трекпоинтом и купить


      1. rekby
        16.09.2015 10:53

        Да.

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

        Потом через несколько лет, при постепенном плановом уходе от маковской техники (как оказалась у неё есть очень неудобные минусы) с удивлением обнаружил что почти такой же по удобству тачпад есть на недорогом Dell Inspiron, который еще и под ubuntu хорошо работает.


        1. KIVagant
          16.09.2015 16:38
          +3

          Самое грустное, что там нет PageUp / PageDown. Остальное всё можно пережить.


          1. TheMengzor
            22.09.2015 12:20

            Fn+arrows, try it.


            1. KIVagant
              22.09.2015 15:39

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


      1. Xlab
        16.09.2015 12:05

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


        1. Delphinum
          16.09.2015 20:43

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

          Какой же это слепой, десятипальцевый метод тогда?


          1. Xlab
            16.09.2015 22:57
            -1

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


            1. Delphinum
              17.09.2015 13:52

              Рука не отрывается от поверхности

              В слепом, десятипальцевом методе рука должна не отрываться от sdfjkl, а не от поверхности.


    1. Delphinum
      16.09.2015 20:48
      +1

      Это намного эффективнее заучивания сотен шорткатов

      Не соглашусь с вами. Можем провести эксперимент. Уверен, у меня набор текста, работа с git, дебагинг и тестирование намного быстрее вашего будет ;)


      1. Xlab
        16.09.2015 22:59

        vimeo.com/135206509 Теперь ваш черёд.


        1. Delphinum
          17.09.2015 14:19
          +2

          К сожалению часовая запись может уложить мой ASUS, потому предлагаю коротенькое видео.

          Видео


  1. Lelik13a
    16.09.2015 07:32

    Спасибо за собранную в кучу таблицу, удобно.
    Хочу дополнить список полезных сочетаний в shell(bash) перемещение по истории команд:
    ctrl+r — поиск по командам (вдруг кто не знает)
    Alt+> — самая последняя команда в списке истории
    Alt+< — самая первая команда.
    Если история команд используется очень активно, то Alt+> порой проста необходима.


    1. Kukunin
      16.09.2015 12:08
      +1

      Интересный вопрос: если «проскочил» нужную команду в ctrl+r, как вернуться на одну команду назад?


      1. ZyXI
        16.09.2015 12:15

        У меня — <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, либо в настройках терминала.


        1. poxu
          17.09.2015 14:13

          можно в .bashrc в последней строке написать stty stop undef


    1. Zapped
      16.09.2015 12:43

      тогда и Ctrl+g — отмена reverse поиска (выход без выбора)


  1. MIC
    16.09.2015 08:14
    +18

    Я с этим Ctrl+w регулярно закрываю вкладки, когда хочу слово стереть


  1. Yahweh
    16.09.2015 08:29
    +2

    Не совсем ясно что значит

    Ctrl-_

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

    ?


    1. Kukunin
      16.09.2015 10:25

      Да


  1. rutaka_n
    16.09.2015 09:33
    +2

    Стоит еще добавить комбинации 'ALT+.' или 'ESC + .' — перебирают аргументы предыдущих команд.


  1. ComodoHacker
    16.09.2015 09:49

    Дополню. Если вам приходится работать в консоли Windows и вы хотите пользоваться этими сочетаниями (и другими плюшками), установите себе Clink.


  1. dmx102
    16.09.2015 10:30
    +2

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


    1. cagami
      16.09.2015 10:37

      Полностью согласен, я думаю нужно просто в скобках добовлять mouse-less


  1. pcdesign
    16.09.2015 10:31

    Спасибо за статью.
    На счет «Начало строки: Ctrl-a»
    Может кто-нибудь знает как это исправить в терминале screen?


    1. Zapped
      16.09.2015 10:48

      Ctrl+a, потом «a» (маленькая, не «А»)


      1. pcdesign
        16.09.2015 10:57

        Да, спасибо.
        Работает.


    1. Lelik13a
      16.09.2015 11:48
      +1

      Я для себя эту проблему решил перебиндив кнопки в screen, а именно:
      escape ^pp # suggested binding for emacs users
      После небольшого привыкания так даже удобнее и не перекрывает кнопки в vim.


      1. ZyXI
        16.09.2015 12:02

        Я использую ,i (к началу строки)/,a (к концу строки), в том числе в readline. В Vim <C-e> — довольно полезное сочетание, <C-a> забито screen’ом/tmux (с биндингами от screen, а так у него <C-b>).

        Если быть точнее, то ,i — к первому непробельному символу. С readline — к первому символу, т.к. я не знаю, как сделать «к первому непробельному символу» с readline.


  1. f0rk
    16.09.2015 11:00

    Еще один лайфхак помогающий использовать все выше перечисленное: в настройках клавиатуры сделайте байндинг CAPS LOCK -> CTRL, лично мне очень помогает (особенно хорошо чувствуется в screen где много шорткатов начинающихся с ctrl-a, capslock-a нажимать гораздо удобнее чем ctrl-a).


    1. danfe
      16.09.2015 18:48
      +1

      У многих Caps Lock уже занят под переключение раскладки; к тому же, на некоторых клавиатурах это stateful-клавиша.


  1. lair
    16.09.2015 11:53
    +4

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

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

    (это, конечно, если смотреть на то положение, которое у вас на КДПВ)


    1. dragonhome
      16.09.2015 12:35
      +2

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


      1. lair
        16.09.2015 12:36

        Caps Lock-m — координация двух рук. Тоже сложнее, чем кажется.


        1. poxu
          16.09.2015 23:28
          +2

          Проще, чем вы думаете :).


          1. lair
            17.09.2015 00:20

            Но сложнее, чем нажать одну клавишу.


            1. poxu
              17.09.2015 00:42
              +1

              Нет, проще. Я ниже расписал подробно, почему.


              1. lair
                17.09.2015 00:44

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


                1. poxu
                  17.09.2015 00:53

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

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


                  1. lair
                    17.09.2015 11:08

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

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

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

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


                    1. poxu
                      17.09.2015 11:59

                      Умение координировать стирает для человека разницу между скоординированым и не координированым движением.

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

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


                      1. lair
                        17.09.2015 12:02

                        Умение координировать стирает для человека разницу между скоординированым и не координированым движением.

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

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

                        Странно, а мне — не нужно (и совершенно не болезненно).


                        1. ZyXI
                          17.09.2015 12:09

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


                        1. poxu
                          17.09.2015 12:59

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

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

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

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


                          1. lair
                            17.09.2015 13:01

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

                            Откуда у вас такая уверенность?


                            1. poxu
                              17.09.2015 13:18

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

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

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


                              1. lair
                                17.09.2015 13:22

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

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

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

                                Ну, это у каждого по-своему.


                                1. poxu
                                  17.09.2015 13:35

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


                                  1. lair
                                    17.09.2015 13:40

                                    Вот она, на самом деле, требует больше усилий, чем вам кажется.

                                    (смешное развлечение: положите обе руки на стол, так, чтобы все пальцы кончиками касались столешницы. Теперь поочередно постучите одновременно одноименными пальцами каждой руки: сначала обоими большими, затем обоими средними, и так до мизинца. «Постучите» — это несколько раз подряд одним и тем же пальцем. Остальные пальцы в это время должны оставаться на столешнице (или хотя бы не стучать по ней). Сравните степень «одновременности» для разных пальцев. Найдите ту скорость, с которой вы можете стучать пальцами разных рук гарантированно одновременно. Сравните ее со скоростью, с которой вы можете стучать одним (тем же) пальцем на одной руке. Если не надоело — сравните со скоростью одновременного движения двух пальцев на одной руке.)


                        1. poxu
                          17.09.2015 13:00

                          А что за клавиатура, если не секрет?


                          1. lair
                            17.09.2015 13:02

                            1. poxu
                              17.09.2015 13:05

                              Вот это номер! У меня точно такая же! Жать Enter мизинцем, не задействуя запястье реально тяжело и по субъективным ощущениям ведёт к травме.


                              1. lair
                                17.09.2015 13:06

                                Ну, вы не забывайте, что у людей отличаются не только клавиатуры, но и руки — включая их тренированность.


                                1. poxu
                                  17.09.2015 13:34

                                  Ну я помню, да. Но подозреваю, что людей с такими руками, как у меня — подавляющее большинство.


                      1. Kukunin
                        18.09.2015 13:48

                        Кстати, еще один нюанс. Дело в том, что я набираю вслепую с альтернативным положением пальцев. И получается, у меня три клавиши между мизинцем и энтером, и только одна между мизинцем и капс локом.


    1. poxu
      16.09.2015 23:27
      +1

      Если CapsLock перемаплен на Control, то Сontrol+m раза в 2 быстрее. И раз в 10 приятнее.


      1. lair
        17.09.2015 00:21

        То есть сработает уже не на любой клавиатуре. Приятно, да.


        1. poxu
          17.09.2015 00:43

          На любой клавиатуре, на которой есть CapsLock :). Там хабра съел часть. На всякий случай продублирую сюда правленый вариант.

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


          1. lair
            17.09.2015 00:45

            Я боюсь, что на моей клавиатуре вы получите просто 'M' вместо перевода строки.


            1. poxu
              17.09.2015 00:49

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

              Насчёт вашей клавиатуры — уверен, что если её воткнуть в мой компьютер — будет работать прекрасно :).


              1. lair
                17.09.2015 11:09

                Мне кажется, вы прекрасно понимаете, о каком сценарии я говорю. Мне вот часто приходится сидеть за чужими компьютерами, и даже различия в переключении раскладки клавиатуры раздражают, хотя это редко нужно. А уж Caps вместо Ctrl — ненене.


                1. poxu
                  17.09.2015 12:24

                  Если речь идёт о работе на чужом компьютере, то о собственном комфорте естественным образом приходится забыть, это правда.

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

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


                  1. lair
                    17.09.2015 12:26

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

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

                    PS У меня вот три «своих» компьютера, и я несколько утомился поддерживать в синхронизации даже тот минимум настроек, который я использую.


                    1. poxu
                      17.09.2015 13:03
                      +1

                      Ну тот факт, что чем больше ты кастомизируешь, тем больше проблем на других компьютерах — неоспорим. Разногласия возникают, по поводу того, стоит ли удобство у себя дискомфорта в других местах.

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

                      Короче это отдельная, тоже очень интересная дискуссия, но, видимо, не совсем по теме данного топика.


  1. domix32
    16.09.2015 11:55
    +2

    Странно говорить, что Ctrl дальше чем Enter, да и тянуться за ним мизинцем до него тоже так себе удовольствие.


  1. pcdesign
    16.09.2015 13:24
    +8

    Я почитаю на хабре кучу полезных советов.
    Проходит время. И чик, все забыл.

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

    Может пригодится кому-нибудь.
    Perl Скрипт, который формирует это хозяйство здесь.
    Текстовый вывод для /etc/motd здесь.


    1. ZyXI
      16.09.2015 16:20

      А зачем здесь <C-j>? Нажимать просто <Enter> вроде быстрее.


      1. pcdesign
        16.09.2015 16:38

        Ну это я со статьи взял, просто за основу.
        Для себя я там кое-что удалил, кое-что наоборот добавил.
        В том числе удалил и C-j.
        Я еще не дошел до такого скила, чтобы юзать C-j, вместо Enter ))


        1. Xlab
          16.09.2015 23:09
          -2

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


      1. poxu
        16.09.2015 23:32
        +2

        Если CapsLock переделан в Control, то <C-j> быстрее потому, что CapsLock стоит слева от клавиши , на которой лежит мизинец. А находится через клавишу вправо <;>, на которой лежит мизинец правой руки.


        1. ZyXI
          17.09.2015 01:11

          Я как?то не замечаю разницы; наверное, с непривычки: хотя я вижу, что мне нужно перемещать кисть для <Enter> и <BS>, нажимаются они привычно быстро. А вот конкретно <C-j> в Vim иногда забирают под что?то вроде умного автодополнения, потому что это довольно удобный <C-Space> (точнее, это <C-Space>, потому что Vim никогда нормально не переваривает нулевой байт, в том числе и здесь; в gvim такой проблемы нет). Ну и в dvorak особой разницы между <C-j> и <C-m> нет: что j, что m на нижнем ряду под указательным пальцем, только j ещё и на той же руке, что и переделанный CapsLock.

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

          PS: Я использую <code> вокруг сочетаний клавиш не потому, что мне нечем заняться, а потому что хабраредактор может выреза?ть всякие вещи, похожие на HTML тёг. В вашем сообщении явно что?то пропущено.


  1. loz
    16.09.2015 16:17

    Мне для удобной работы в консоли (кроме перечисленного) очень помог переход на dvorak-programmer. В основном это всякие вещи спецсимволы типа ;,.:<>'"/?@^-_\|, особенно минус, который часто используется в параметрах команд и теперь находится практически под мизинцем, и до которого теперь не надо тянуться. Ну и просто на английском печатать стало заметно проще.


    1. Yahweh
      16.09.2015 16:41

      Давно хотел попробовать. Скажите, а проблем с хоткеями нету? В часности в vim? Ведь они по сути рассчитаны на обычный qwerty.


      1. ZyXI
        16.09.2015 16:58
        +1

        За исключением hjkl никакого QWERTY тут нет и в помине. Остальное мнемоники вроде d[elete] или t[o]/f[ind]. Я нормально пользуюсь programming dvorak и иногда hjkl (чаще jk, hl намного реже). Просто помните, что в большинстве случаев быстрее использовать не hjkl.

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


      1. loz
        16.09.2015 17:00

        Первое время, конечно же, есть. А потом все выучивается, я в емаксе работаю (и во многих других программах), тут хоткеи что в кверти не супер удобны, что в двораке, не сильно поменялись. Есть еще путь переназначения всего на привычные положения, но я не рискнул по нему идти)


  1. KIVagant
    16.09.2015 16:41

    Ctrl + M на Mac-клавиатуре набирать определённо неудобнее, чем нажать Enter. А за статью спасибо.


  1. saboteur_kiev
    16.09.2015 18:38

    Некоторые советы не работают…

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

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


  1. mikechips
    17.09.2015 00:09

    Прелесть маленьких клавиатур тут демонстрируется на ура…


  1. xaizek
    17.09.2015 00:22

    Тут через почту человек попросил передать:

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


  1. steamoor
    22.09.2015 18:02

    В консоли аналог xev — showkeys
    работает почти так же


  1. theoden
    27.09.2015 23:22

    Почему никто не отметил, что Ctrl-D завершает сессию?


  1. dikiykot
    28.09.2015 17:10

    В консоли cisco эти команды также работают, очень удобно. про сокращения из бонус таблицы не знал, спасибо.