После того, как у меня появился новый монитор на рабочем месте, я начал новую итерацию улучшения своего «безмышечного» (mouse-less, прим. пер.) опыта. Вы же знаете, что это значит, не так ли? Это значит, что каждый раз, когда вы беретесь за мышку, убирая руку с клавиатуры, вы тратите немного времени и энергии. Если вам нужно набирать много текста (а я много пишу кода), это становится существенным.
Так же существует следующий уровень «безмышечного» опыта, когда вы стараетесь избежать труднодоступных клавиш, например
Если вы держите руки в стандартной позиции для 10-пальцевой слепой печати, более удобно нажать
В этой статье я расскажу про удобные сочетания клавиши, которые можно использовать в любом терминале, хоть они работают и в многих других местах.
Для начала, сравнительная таблица:
Как бонус, вот еще список удобных сочетаний:
Не забудьте попробовать эти сочетания в других приложениях. Я думаю, вы удивитесь, насколько широко они поддерживаются.
Прежде всего, существует широко используемая библиотека
Это значит, что приложение может просто использовать эту библиотеку для пользовательского ввода, и она позаботится обо всех «плюшках». Из официальной документации вы можете узнать, что она поддерживает emacs и vi режимы, где первый идет по умолчанию. Vi режим более знаком виммерам, однако есть один существенный недостаток: нет индикатора текущего режима.
Помните ли вы таблицу ASCII символов? Там еще в начале таблицы есть 32 старых ненужных управляющих символов. И если вы посмотрите на сочетание
что
Другой интересный вопрос, как же система определяет связь между
На этом все. Я надеюсь, материал был полезный. Совершенствуйтесь!
P.S. Индикатор режима в
P.S.S.Таблицу ascii кодов можно посмотреть командой
Так же существует следующий уровень «безмышечного» опыта, когда вы стараетесь избежать труднодоступных клавиш, например
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