Так же существует следующий уровень «безмышечного» опыта, когда вы стараетесь избежать труднодоступных клавиш, например
Delete
, Backspace
, Escape
или даже Enter
.Если вы держите руки в стандартной позиции для 10-пальцевой слепой печати, более удобно нажать
Ctrl-m
вместо того, чтобы тянуться мизинцем к энтеру.В этой статье я расскажу про удобные сочетания клавиши, которые можно использовать в любом терминале, хоть они работают и в многих других местах.
Для начала, сравнительная таблица:
Начало строки | 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. Спасибо xaizekP.S.S.Таблицу ascii кодов можно посмотреть командой
man ascii
. Опять же, спасибо xaizek
Комментарии (116)
xaizek
15.09.2015 23:37+4Vi режим более знаком виммерам, однако есть один существенный недостаток: нет индикатора текущего режима.
И при этом в документации по приведенной ссылке написано:
show-mode-in-prompt
Это сравнительно недавнее добавление, начиная с readline 6.3 (эта версия вышла полтора года назад). И как-то все по привычке считают, что индикатора нет.
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'.
Так что добавляетеset show-mode-in-prompt On
в ~/.inputrc
laphroaig
16.09.2015 02:40+29Когда я был «маленький» я тоже много
говнокодил и активно изучал mouse-less. Я смеялся над умными книгами, где говорилось, что в среднем программист пишет 10 строк кода в день. Ха-ха! же несколько тысяч мог накодить! Когда я стал «старым» и медлительным, я анализировал проекты своей молодости которые ушли в продакшн и, с учетом отладки, тестирования, исправления багов и пр. — картина не радужная. В итоге получается, конечно не 10 строк в день, но и завершенными проектами эти поделки назвать сложно. А чтобы их завершить нужно… взять и выкинуть все в мусорку. Сейчас, даже если у меня отнять руки, взяв карандаш в зубы и тыкая по клавиатуре один символ в минуту я сделаю это лучше и быстрее, потому как 99% времени у меня уходит на размышления, а не на клацанье по клаве.ruRikki
16.09.2015 10:00Вы правы, на размышления уходит времени достаточно, по крайней мере для того, чтобы несколько раз «сгонять» за мышью. Хотя существуют ситуации, когда думать приходиться гораздо быстрее и вот тут безмышиные навыки приходят на помощь. ИМХО: когда сильно устаешь (обычно на завершающем этапе) сил на переброс руки на мышь уже не хватает. Спасибо за материал, вещь нужная, себя нужно любить)
Borz
16.09.2015 10:45+3это как же надо устать, чтобы не хватало сил перебросить руку до мышки, но при этом хватало сил подумать над кодом который пишешь
Delphinum
16.09.2015 20:41+1Сейчас, даже если у меня отнять руки, взяв карандаш в зубы и тыкая по клавиатуре один символ в минуту я сделаю это лучше и быстрее
Думаю ваши нервы сдадут после нескольких минут такого кодинга и вы вернетесь к классической схеме набора кода. Так же у меня они сдают, когда приходится пользоваться мышкой.
berman
16.09.2015 20:59+2Никому не интересно, пишите вы 10 или тысячи строк кода, главное — быстро шипать. Шипать, пока продукт еще нужен рынку. Пока вы философствуете о лучших практиках и рассуждаете как нужно делать, ваши конкуренты уже что-то тестируют и понимают более важные проблемы продукта, чем проблемы кода.
Идеально — найти баланс между качеством кода и скоростью шипинга.
Я уверен, что сейчас этот комментарий наберет -(рейтинг вашего комментария), но это сказать было нужно. Но может быть это все еще мой максимализм.Lol4t0
16.09.2015 22:53+1Идеально — найти баланс между качеством кода и скоростью шипинга.
Мне кажестся, что противополстовлние скрости разработки и качества — миф.
Я видел и ужасный код, написанный после долгих философских рассуждений, и погоню за скоростью, в которой развитие кода топчется на месте из-за поразительного количества копипаста, и тысячи велосипедов, возникающих из-за того, что люди начинают думать о шипинге вместо изучения существующих решений в области. В то же время хороший код зачастую оказывается вполне лаконичным.
laphroaig
17.09.2015 01:14Минусов, я думаю, вы не нахватаете, потому что во многом вы правы. Но баланс между скоростью (много бесполезного не поддерживаемого кода) и качеством (меньше кода, легко разобраться и поддерживать) вы найдете только с опытом. Бесполезно прочитав «умную» книжку тратить уйму времени над обмыванием «идеальной» архитектуры. Все ваши измышления уйдут в топку, как только вы столкнетесь с реальностью. Анализируйте ваши предыдущие проекты, делайте выводы, оптимизируйте процесс разработки. Ну а тренинги по оптимизации клацания по клаве вещь во многом полезная, но реального профита для разработки не дает, разве что произвести впечатление на коллег или начальника.
poxu
16.09.2015 23:40+3Оно конечно звучит красиво. Но вы проведите эксперимент. Возьмите карандаш в зубы и попробуйте написать Hello World на любимом языке программирования. Эксперименты вещь полезная. Они обладают отрезвляющим эффектом.
laphroaig
17.09.2015 00:47Вообще-то пост не о этом. Но ради эксперимента попробовал — 5 минут на С++. Безумно много, согласен. Но это 100 строк за рабочий день. Разуметься тыкать карандашом по клаве по 8 часов подряд у меня не получиться, но если случиться несчастье — то именно эта та практика, которую имеет смысл практиковать. И слепые умудряются кодить
poxu
17.09.2015 01:05+1Пост не о том, а вот ваш комментарий именно о том :).
Клавиатурой программист не только набирает код, но и занимается навигацией по нему. И вообще делает много всего. Что касается возможных несчастий — я читал посты людей, встретившихся с RSI, варианты решения у тех, кто не покинул профессию — голосовой набор или медленная печать двумя руками с обширным использованием хоткеев и IDE. Хоть вообще о таком страшно даже думать :(.
Слепым без клавиатуры вообще никак. По очевидным причинам.
Вообще я хочу вот что сказать. Все эти клавиатурные трюки нужны не для скорости. Они для того, чтобы управлять компьютером и в том числе печатать было удобно. Я бы делал всё это даже если бы это замедляло скорость набора текста, потому что такой стиль работы сильно разгружает мозги.
laphroaig
17.09.2015 02:08Так я и не говорю что это не нужно. Я всего лишь обозначил то, что навыки владения клавиатурой вообще никак не коррелируют с качеством и скоростью разработки. Просто зацепило "(а я много пишу кода)"
Kukunin
17.09.2015 11:47А я и ничего про качество кода и не говорил. Если вы мало набираете текста, тогда и задумываться над оптимизацией своей работы с устройствами ввода не нужно. Если же вы журналист, писатель, или же программист (а я просто обозначил, что я программист), тогда mouseless начинает иметь смысл.
poxu
17.09.2015 12:32Я думаю, что исследования эту корреляцию легко выявят. Также я думаю, что лично вы, по уровню навыка владения клавиатурой, окажетесь в верхних двадцати процентах.
Это как с каратистами, боксёрами или самбистами — они все будут утверждать, что сила не главное и со спортивным успехом не коррелирует. Только вот шансы победить в армрестлинге каратиста или боксёра очень невелики, а с самбистом их и вовсе нет.
stychos
22.09.2015 13:38-1Я как-то со временем осознал, что многие операции мышкой дейтсивтельно быстрее и удобнее. Ну например, многократно повторяющаяся работа с текстом (переместить курсор — выделить — копировать — сменить окно — переместить курсор — вставить). Хотя по привычке уже чаще бегаю по массивам текста клавиатурой, и это зачастую действительно тормозит.
DmitryKoterov
16.09.2015 02:55+2Вот бы кто еще объяснил, почему в различных screen-tmux-mosh все время слетают различные комбинации (типа Shift-F5) или даже просто управляющие клавиши (F5, PgUp и т.д.), например, в midnight commander. Почему все эти tmux-screen-mosh вообще что-то делают с кодами приходящих клавиш вместо того, чтобы просто отправлять их дальше.
steamoor
22.09.2015 17:46они их перехватывают и отправляют тому же миднайт коммандеру.
а вообще, я за долгие годы борьбы с поломаным терминалом научился печатать вслепую:
setterm -reset
stty sane
:)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' } }
steamoor
22.09.2015 18:43мне кажется что это оверкилл :)
что, если мне нужен какой-либо другой режим?
хотя те же github-prompt делают намного больше операций на каждый чих.ZyXI
22.09.2015 19:09Какой режим? Здесь делаются пять вещей:
- Графический режим переключается в нормальный (графический — это когда вместо многих ASCII символов печатается всякая ересь вроде частей таблиц).
- Убирается цвет (вообще?то абсолютно ненужная мне часть: powerline делает то же самое).
- Включается отображение курсора.
- (После
echoti cnorm
должно было идти ещё иechoti smkx
, это я просто не сделалsource ~/.zshrc
в оболочке, из которой брал term_reset.) Переключается в режим «keyboard transmit». - Отключается alternate screen.
- нужно использовать графический режим (в этом режиме невозможно нормально печатать),
- оставлять цвет (да и не влияет отсутствие этой строки ни на что),
- отключать курсор (а здесь нельзя нормально редактировать напечатанное),
- использовать разное состояние keyboard transmit (приведёт к тому, что некоторые приложения станут работать некорректно: смотрите github.com/fish-shell/fish-shell/issues/2139 и ссылки внутри) или
- смотреть оболочку в alternate screen (здесь не виден scrollback, либо scrollback виден только от основного экрана).
Эти строки были собраны в результате просмотра последствий вывода бинарных файлов на терминал и крэшей [Neo]Vim.steamoor
22.09.2015 19:14Имеете полное право, ваш компьютер, ваши процессы :)
я бы лично так не делал, но это мои заботы.ZyXI
22.09.2015 19:22Так я спрашиваю потому, что не вижу никаких причин использовать что?либо из отключаемого таким образом функционала. Но возможно, я что?то пропускаю из?за такого отношения.
Если что, данный код, будучи запускаемым только перед command prompt никак не мешает другим приложениям явно пользоваться графическим режимом (хотя я таких приложений не видел вообще), цветами, отключением курсора, другим режимом keyboard transmit или alternate screen. Только интерактивный zsh не сможет использовать ничего из списка.steamoor
22.09.2015 19:33я не спорю, честно :)
я редко сейчас работаю в линукс консоли, в основном в графическом терминале, под разными системами и оболочками.
У каждого свои задачи и, возможно, этот подход решает ваши.
я давно уже не имел проблем с потеряным вводом в консоль, поэтому для меня данный подход это оверкилл.ZyXI
22.09.2015 23:00Здесь проблема не с потерянным вводом — с ним?то как раз ничего плохого не происходило, — а с тем, что после того, как вы случайно написали
cat /some/binary
, или у вас свалился Vim во время тестирования, пользоваться терминалом становится неудобно. Раньше такое решалось тем, что я вслепую набиралecho $'\ec'
. Но это, насколько я помню, для чего?то не работало (кажется, не переключало keyboard transmit режим, из?за чего некоторые приложения переставали адекватно воспринимать стрелочки), да и, в отличие от term_reset,\ec
очищает экран.
Кстати,stty sane
моя функция никак не заменяет. Но это и не нужно: у zsh естьttyctl -f
(-f[reeze]), замораживающая (некоторые) настройки терминала. Вот этот эффект мне иногда приходится отменять.
Xlab
16.09.2015 03:42+14Не убираю руки с клавиатуры, потому что под ней маковский тачпад. Это намного эффективнее заучивания сотен шорткатов, правда требует отсутствия предрассудков. Ещё не должно быть желания изо дня в день превращать себя в робота, которому, видите-ли, по каким-то причинам труднодоступны Delete, Backspace, Escape или даже Enter.
Kukunin
16.09.2015 09:42Кстати, интересная идея использовать тачпад, не убирая рук с позиции. Только как быть с мультитачем? Используете два больших пальца для скрола?
Borz
16.09.2015 10:51+3не знаю как на маковских, но на Thinkpad-клавах есть средняя кнопка для этого
Rasifiel
16.09.2015 20:11+1И есть трекпоинт с которым вообще ничего не надо никуда двигать, а только слегка сместить палец.
Kukunin
16.09.2015 21:49супер удобное решение. Жаль, что они не так распространены, и даже внешнюю клавиатуру с трекпоинтом и купить
rekby
16.09.2015 10:53Да.
Правда сама маковская клавиатура не блещет, например на ней нет Insert, Delete, (комбинации с Fn) PrintScreen и т.п.
тачпад да — удобный, только на маке я перестал хотеть взять мышку, потому что тачпад реально удобнее.
Потом через несколько лет, при постепенном плановом уходе от маковской техники (как оказалась у неё есть очень неудобные минусы) с удивлением обнаружил что почти такой же по удобству тачпад есть на недорогом Dell Inspiron, который еще и под ubuntu хорошо работает.KIVagant
16.09.2015 16:38+3Самое грустное, что там нет PageUp / PageDown. Остальное всё можно пережить.
TheMengzor
22.09.2015 12:20Fn+arrows, try it.
KIVagant
22.09.2015 15:39Это, конечно, так. Можно и просто пробел нажимать, чтобы вниз листать. И тачпад изумительный близко. Но мне всё-равно хочется отдельные кнопки для этого. Fn от курсорных клавиш ну очень уж далеко расположена, я люблю хоткеи, которые одной рукой доступны.
Xlab
16.09.2015 12:05Нет, кистью (одной из) нужно двигать, скролл обычным способом. Просто не обязательно держать руки в одном положении, не отрывая от основных клавиш, это искусственное ограничение.
Delphinum
16.09.2015 20:43Просто не обязательно держать руки в одном положении, не отрывая от основных клавиш, это искусственное ограничение
Какой же это слепой, десятипальцевый метод тогда?Xlab
16.09.2015 22:57-1Это же движение кистью делается, как перевели пальцы на тачпад, так и перевели обратно. Рука не отрывается от поверхности. Я люблю отрывать, но это уже дело привычки, потому что я печатаю как бог, а не как слепой.
Delphinum
17.09.2015 13:52Рука не отрывается от поверхности
В слепом, десятипальцевом методе рука должна не отрываться от sdfjkl, а не от поверхности.
Delphinum
16.09.2015 20:48+1Это намного эффективнее заучивания сотен шорткатов
Не соглашусь с вами. Можем провести эксперимент. Уверен, у меня набор текста, работа с git, дебагинг и тестирование намного быстрее вашего будет ;)Xlab
16.09.2015 22:59vimeo.com/135206509 Теперь ваш черёд.
Delphinum
17.09.2015 14:19+2К сожалению часовая запись может уложить мой ASUS, потому предлагаю коротенькое видео.
Видео
Lelik13a
16.09.2015 07:32Спасибо за собранную в кучу таблицу, удобно.
Хочу дополнить список полезных сочетаний в shell(bash) перемещение по истории команд:
ctrl+r — поиск по командам (вдруг кто не знает)
Alt+> — самая последняя команда в списке истории
Alt+< — самая первая команда.
Если история команд используется очень активно, то Alt+> порой проста необходима.Kukunin
16.09.2015 12:08+1Интересный вопрос: если «проскочил» нужную команду в ctrl+r, как вернуться на одну команду назад?
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>
должен работать (найдите в manC-r
и посмотрите соседей). Только<C-s>
— это tty stop по?умолчанию, и перед использованием придётся что?то переназначить — либо через stty, либо в настройках терминала.
rutaka_n
16.09.2015 09:33+2Стоит еще добавить комбинации 'ALT+.' или 'ESC + .' — перебирают аргументы предыдущих команд.
ComodoHacker
16.09.2015 09:49Дополню. Если вам приходится работать в консоли Windows и вы хотите пользоваться этими сочетаниями (и другими плюшками), установите себе Clink.
pcdesign
16.09.2015 10:31Спасибо за статью.
На счет «Начало строки: Ctrl-a»
Может кто-нибудь знает как это исправить в терминале screen?Lelik13a
16.09.2015 11:48+1Я для себя эту проблему решил перебиндив кнопки в screen, а именно:
escape ^pp # suggested binding for emacs users
После небольшого привыкания так даже удобнее и не перекрывает кнопки в vim.ZyXI
16.09.2015 12:02Я использую
,i
(к началу строки)/,a
(к концу строки), в том числе в readline. В Vim<C-e>
— довольно полезное сочетание,<C-a>
забито screen’ом/tmux (с биндингами от screen, а так у него<C-b>
).
Если быть точнее, то,i
— к первому непробельному символу. С readline — к первому символу, т.к. я не знаю, как сделать «к первому непробельному символу» с readline.
f0rk
16.09.2015 11:00Еще один лайфхак помогающий использовать все выше перечисленное: в настройках клавиатуры сделайте байндинг CAPS LOCK -> CTRL, лично мне очень помогает (особенно хорошо чувствуется в screen где много шорткатов начинающихся с ctrl-a, capslock-a нажимать гораздо удобнее чем ctrl-a).
danfe
16.09.2015 18:48+1У многих Caps Lock уже занят под переключение раскладки; к тому же, на некоторых клавиатурах это stateful-клавиша.
lair
16.09.2015 11:53+4Если вы держите руки в стандартной позиции для 10-пальцевой слепой печати, более удобно нажать Ctrl-m вместо того, чтобы тянуться мизинцем к энтеру.
Серьезно? Во-первых, любая комбинация сложнее нажатия одной клавиши. Во-вторых, на моей клавиатуре движение до энтера (мизинцем на две клавиши влево) короче, чем до контрола (две клавиши по диагонали наружу, я левой рукой даже дотянуться не могу, не передвигая руки). Ну а нажать ctrl-m, не двигая все пальцы, и вовсе невозможно.
(это, конечно, если смотреть на то положение, которое у вас на КДПВ)dragonhome
16.09.2015 12:35+2Возможно у автора есть педаль ctrl, кастомная клавиатура или что вероятней капс лок переделан в ctrl.
lair
16.09.2015 12:36Caps Lock-m — координация двух рук. Тоже сложнее, чем кажется.
poxu
16.09.2015 23:28+2Проще, чем вы думаете :).
lair
17.09.2015 00:20Но сложнее, чем нажать одну клавишу.
poxu
17.09.2015 00:42+1Нет, проще. Я ниже расписал подробно, почему.
lair
17.09.2015 00:44Там как-то обойден тот замечательный момент, что движение двух пальцев сложнее координировать, чем одного.
poxu
17.09.2015 00:53Координнация двух пальцев на разных руках — такая вещь, которую умеют все, кто учился слепой печати. И большинство из тех, кто много занимается набором текста.
А вот необходимость постоянно гнуть запястный сустав чтобы переместить мизинец на две клавиши вправо — верный путь к RSI.lair
17.09.2015 11:08Координнация двух пальцев на разных руках — такая вещь, которую умеют все, кто учился слепой печати. И большинство из тех, кто много занимается набором текста.
Умение координировать не означает, что координировать легче, чем не координировать.
А вот необходимость постоянно гнуть запястный сустав чтобы переместить мизинец на две клавиши вправо — верный путь к RSI.
Эээ, а зачем для этого запястный сустав гнуть? Просто мизинец вытянуть мало?poxu
17.09.2015 11:59Умение координировать стирает для человека разницу между скоординированым и не координированым движением.
Эээ, а зачем для этого запястный сустав гнуть? Просто мизинец вытянуть мало?
Пальцы правой руки лежат на JKL;. Указательный на J, мизинец на;. То есть для нажатия Enter надо подвинуть мизинец на одну клавишу вправо. Если клавиши стандартного размера, то для того, чтобы сделать это, не задействовав запястный сустав, нужно сильно напрячь мизинец, что в общем достаточно болезненно и уж точно гораздо медленне, чем Control+m. Это, кстати, на моей клавиатуре. На клавиатуре, изображённой на рисунке в топике, между мизинцем и Enter вообще две клавиши.lair
17.09.2015 12:02Умение координировать стирает для человека разницу между скоординированым и не координированым движением.
К сожалению, нет. Потому что когда человек учится набирать, одиночные движения тоже становятся быстрее и проще.
Если клавиши стандартного размера, то для того, чтобы сделать это, не задействовав запястный сустав, нужно сильно напрячь мизинец, что в общем достаточно болезненно и уж точно гораздо медленне, чем Control+m.
Странно, а мне — не нужно (и совершенно не болезненно).ZyXI
17.09.2015 12:09Не знаю, что у вас за пальцы и клавиатура, но для нажатия на
<C->
(который на CapsLock) мне можно запястье не двигать. А для нажатия на<Enter>
(который через клавишу: Steel Series 6GV2) нужно. Если не двигать, то будет напряжней и дольше.
poxu
17.09.2015 12:59Вы говорите, что разница между скоординированым и одиночным движением не стирается с опытом, потому, что скорость одиночных движений растёт и кроме того делать их с каждым разом всё легче. Соответственно, хотя качество скоординированых нажатий тоже растёт, разница между скоординированным и одиночным движеним остаётся постоянной.
Предположим, что начинающий программист жмёт одну клавишу 10 секунд. Нажать две клавиши — те же 10 секунд, плюс минута на то, чтобы скоординировать движение. В процессе обучения время нажатия клавиши уменьшится до половины секунды, то есть в 20 раз. Предположим, что время, необходимое для координации тоже уменьшится в 20 раз и станет равно трём секундам.
Теперь мы имеем полсекунды на одиночное действие и три с половиной секунды на координированное. Казалось бы ваша точка зрения верна. Но история на этом не кончается. Полсекунды — физиологический предел для нажатия одной клавиши. Возможно на самом деле он меньше, но в любом случае наш подопытный достаточно быстро его достигнет и скорость одиночного движения расти перестанет.
А вот время координации продолжит падать, пока, в конце концов, не сократится настолько, что человек перестанет его замечать. И тут разница между одиночным и координированным нажатием исчезнет.lair
17.09.2015 13:01А вот время координации продолжит падать, пока, в конце концов, не сократится настолько, что человек перестанет его замечать.
Откуда у вас такая уверенность?poxu
17.09.2015 13:18Время нажатия клавиши ограничено скоростью распространения нервных импульсов и физическими свойствами мышц.
Синхронизация происходит в голове, соответственно мышцы тут не участвуют, а расстояние которое проходят сигналы — существенно меньше. Поэтому минимальное время, за которое можно скоординироваться перед нажатием будет существенно меньше времени самого нажатия.
По моему, начиная с одной пятой секунды разница уже не ощущается.lair
17.09.2015 13:22Синхронизация происходит в голове, соответственно мышцы тут не участвуют, а расстояние которое проходят сигналы — существенно меньше. Поэтому минимальное время, за которое можно скоординироваться перед нажатием будет существенно меньше времени самого нажатия.
Вы не забывайте такой смешной момент, что время самих движений у вас тоже различно (разные движения, по-разному развитые руки). Мозгу не очень легко это все обрабатывать.
По моему, начиная с одной пятой секунды разница уже не ощущается.
Ну, это у каждого по-своему.poxu
17.09.2015 13:35Ну собственно обработку одновременного нажатия двух клавиш разными руками я и имею в виду под синхронизацией.
lair
17.09.2015 13:40Вот она, на самом деле, требует больше усилий, чем вам кажется.
(смешное развлечение: положите обе руки на стол, так, чтобы все пальцы кончиками касались столешницы. Теперь поочередно постучите одновременно одноименными пальцами каждой руки: сначала обоими большими, затем обоими средними, и так до мизинца. «Постучите» — это несколько раз подряд одним и тем же пальцем. Остальные пальцы в это время должны оставаться на столешнице (или хотя бы не стучать по ней). Сравните степень «одновременности» для разных пальцев. Найдите ту скорость, с которой вы можете стучать пальцами разных рук гарантированно одновременно. Сравните ее со скоростью, с которой вы можете стучать одним (тем же) пальцем на одной руке. Если не надоело — сравните со скоростью одновременного движения двух пальцев на одной руке.)
Kukunin
18.09.2015 13:48Кстати, еще один нюанс. Дело в том, что я набираю вслепую с альтернативным положением пальцев. И получается, у меня три клавиши между мизинцем и энтером, и только одна между мизинцем и капс локом.
poxu
16.09.2015 23:27+1Если CapsLock перемаплен на Control, то Сontrol+m раза в 2 быстрее. И раз в 10 приятнее.
lair
17.09.2015 00:21То есть сработает уже не на любой клавиатуре. Приятно, да.
poxu
17.09.2015 00:43На любой клавиатуре, на которой есть CapsLock :). Там хабра съел часть. На всякий случай продублирую сюда правленый вариант.
Если CapsLock переделан в Control, то <C-j> быстрее потому, что CapsLock стоит слева от клавиши a, на которой лежит мизинец. А Enter находится через клавишу вправо от ;, на которой лежит мизинец правой руки.lair
17.09.2015 00:45Я боюсь, что на моей клавиатуре вы получите просто 'M' вместо перевода строки.
poxu
17.09.2015 00:49Я правил сообщение выше, оказалось, что правил не то, которое надо было править, но теперь уже ничего изменить не могу. Прошу прощения.
Насчёт вашей клавиатуры — уверен, что если её воткнуть в мой компьютер — будет работать прекрасно :).lair
17.09.2015 11:09Мне кажется, вы прекрасно понимаете, о каком сценарии я говорю. Мне вот часто приходится сидеть за чужими компьютерами, и даже различия в переключении раскладки клавиатуры раздражают, хотя это редко нужно. А уж Caps вместо Ctrl — ненене.
poxu
17.09.2015 12:24Если речь идёт о работе на чужом компьютере, то о собственном комфорте естественным образом приходится забыть, это правда.
Я был уверен, что мы обсуждаем работу на своей машине. На мой взгляд, собственное рабочее место, как и свои привычки, нужно максимально кастомизировать под свои нужды. Когда я осознал, что переключение окон по Alt+Tab требует запоминать в каком окне ты был до текущего, я отказался от этой порочной практики и повесил используемые прораммы на хоткеи. Когда я понял, сколько раз в минуту!!!! перевожу взгляд с монитора на клавиатуру и обратно, я стёр с клавиш буквы и научился печатать не глядя. Когда прикинул, сколько раз в день жму Control — сделал дополнительный Control на CapsLock.
Если окажется, что можно сделать работу ещё комфортнее, пусть ценой большего дискомфорта при временной пересадке за другой компьютер — я сделаю это не задумываясь. Ибо за своим я провожу больше половины своей же жизни.lair
17.09.2015 12:26На мой взгляд, собственное рабочее место, как и свои привычки, нужно максимально кастомизировать под свои нужды.
Вот на это есть два диаметрально противоположных взгляда. Первый — ваш, а второй — тот, что чем больше ты кастомизируешь, тем больше у тебя проблем на других компьютерах. А дальше — вопрос соотношения.
PS У меня вот три «своих» компьютера, и я несколько утомился поддерживать в синхронизации даже тот минимум настроек, который я использую.poxu
17.09.2015 13:03+1Ну тот факт, что чем больше ты кастомизируешь, тем больше проблем на других компьютерах — неоспорим. Разногласия возникают, по поводу того, стоит ли удобство у себя дискомфорта в других местах.
Синхронизацию настроек приходится возлагать на средства автоматизации — решение не для всех.
Короче это отдельная, тоже очень интересная дискуссия, но, видимо, не совсем по теме данного топика.
domix32
16.09.2015 11:55+2Странно говорить, что Ctrl дальше чем Enter, да и тянуться за ним мизинцем до него тоже так себе удовольствие.
pcdesign
16.09.2015 13:24+8Я почитаю на хабре кучу полезных советов.
Проходит время. И чик, все забыл.
Решил с этим бороться.
Засунул вывод в терминале при старте:
Может пригодится кому-нибудь.
Perl Скрипт, который формирует это хозяйство здесь.
Текстовый вывод для /etc/motd здесь.ZyXI
16.09.2015 16:20А зачем здесь
<C-j>
? Нажимать просто<Enter>
вроде быстрее.pcdesign
16.09.2015 16:38Ну это я со статьи взял, просто за основу.
Для себя я там кое-что удалил, кое-что наоборот добавил.
В том числе удалил и C-j.
Я еще не дошел до такого скила, чтобы юзать C-j, вместо Enter ))Xlab
16.09.2015 23:09-2Чем больше зазубрено шорткатов, тем круче скилл, несомненно.
А если забылось, то только потому, что мозг падла, а не потому, что знания по своей сути абсолютно бесполезные и не пригождаются на практике. *irony*
poxu
16.09.2015 23:32+2Если CapsLock переделан в Control, то <C-j> быстрее потому, что CapsLock стоит слева от клавиши , на которой лежит мизинец. А находится через клавишу вправо <;>, на которой лежит мизинец правой руки.
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 тёг. В вашем сообщении явно что?то пропущено.
loz
16.09.2015 16:17Мне для удобной работы в консоли (кроме перечисленного) очень помог переход на dvorak-programmer. В основном это всякие вещи спецсимволы типа ;,.:<>'"/?@^-_\|, особенно минус, который часто используется в параметрах команд и теперь находится практически под мизинцем, и до которого теперь не надо тянуться. Ну и просто на английском печатать стало заметно проще.
Yahweh
16.09.2015 16:41Давно хотел попробовать. Скажите, а проблем с хоткеями нету? В часности в vim? Ведь они по сути рассчитаны на обычный qwerty.
ZyXI
16.09.2015 16:58+1За исключением hjkl никакого QWERTY тут нет и в помине. Остальное мнемоники вроде
d[elete]
илиt[o]
/f[ind]
. Я нормально пользуюсь programming dvorak и иногда hjkl (чаще jk, hl намного реже). Просто помните, что в большинстве случаев быстрее использовать не hjkl.
В остальных приложениях обычно тоже сочетания привязаны к мнемоникам, связанным со значением сочетания, а не к положению клавиши на клавиатуре.
loz
16.09.2015 17:00Первое время, конечно же, есть. А потом все выучивается, я в емаксе работаю (и во многих других программах), тут хоткеи что в кверти не супер удобны, что в двораке, не сильно поменялись. Есть еще путь переназначения всего на привычные положения, но я не рискнул по нему идти)
KIVagant
16.09.2015 16:41Ctrl + M на Mac-клавиатуре набирать определённо неудобнее, чем нажать Enter. А за статью спасибо.
saboteur_kiev
16.09.2015 18:38Некоторые советы не работают…
По поводу «Вместо того, чтобы тянуться мизинцем к enter-у»…
Я вот не тянусь, у меня удобная клавиатура, и мизинец буквально висит над энтером, и я точно не промахнусь мимо Enter-а, а вот вместо ctrl-m вполне можно Ctrl-< нажать.
и Ctrl-w у меня уже стойкая ассоциация с закрытием вкладки/окна.
xaizek
17.09.2015 00:22Тут через почту человек попросил передать:
Есть маленький нюанс — далеко не во всех nix системах это поведение работает:)
Выше уже отписывались о неработающих командах. Доступный набор команд в основном зависит от используемой оболочки, но могут быть и другие факторы (например, версия, конфигурация, способ взаимодействия с оболочкой, выставленный тип терминала). Стоит иметь это в виду и консультироваться со справкой в случае сомнений.
Только что было проверено в AIX/HP-UX — половина не работает.
dikiykot
28.09.2015 17:10В консоли cisco эти команды также работают, очень удобно. про сокращения из бонус таблицы не знал, спасибо.
galk_in
Переводить самого себя?! Спасибо за лайфхак для хабра!