Unix Шорткаты командной строки
Курсор на пустой строке — это не приглашение, а вопрос. Оболочка не рисует иконки и не прячет синтаксис за кнопками: она ждёт, что ты сформулируешь мысль словами, которые понимает машина. Научиться говорить на этом языке — не «повышение продуктивности», а способ перестать посредничать между собой и процессором через мышь.
Я не стану писать «шпаргалку для начинающих». Ты сам до неё дорвёшься, потому что руки устанут таскать мышь, а строка длиннее терпения. Здесь нет бейджей, сертификатов и ламинированных «бест-практик» с конференций, где пахнет кейтерингом. Есть только язык, на котором ты разговариваешь с машиной, пока не научишься разговаривать с ней обратно. Заглянуть под капот — вот и весь секрет «продвинутых трюков». Никакой магии: просто клавиши, придуманные людьми, которые считали, что Ctrl+A — это начало строки, а не «выделить всё».

Перемещение
Сначала неловко. Как первый раз паять тонкий шаг вручную, без стенда и фиксатора: пальцы дрожат, припой ложится криво. Потом они начинают жить сами. Курсор превращается в маленький регистр, который ты двигаешь, не думая, а строка — в стек, где начало и конец существуют одновременно, как две стороны старой монеты.
| Команды | Описание |
|---|---|
ctrl + a |
Перейти в начало строки |
ctrl + e |
Перейти в конец строки |
ctrl + b |
назад на 1 символ |
ctrl + f |
Вперед на 1 символ |
alt + f |
Вперед на 1 слово |
alt + b |
Назад на 1 слово |
ctrl + xx |
Переключение между началом строки и текущей позицией курсора |
ctrl + ] + x |
Если x - любой символ, перемещает курсор вперед до следующего встречающегося символа x |
alt + ctrl + ] + x |
Если x - любой символ, перемещает курсор назад к предыдущему появлению x. |
Редактирование
А вот здесь строка перестаёт быть просто текстом. Строка — это буфер, курсор — указатель, а Ctrl+U и Ctrl+K — это как free и kill, только текст живой. Ты режешь слово перед курсором, вставляешь его хвост туда, где было начало, и никакой фреймворк оболочки тебе тут не нужен: readline существует дольше, чем большинство модных терминальных обёрток, и по-прежнему делает свою работу молча. Ctrl+Z — это не «приостановить задачу» из методички, это честный сигнал: машина ждёт, ты ушёл за данными, она не обидится.
| Команды | Описание |
|---|---|
| ctrl + d | Удалить символ под курсором |
| ctrl + h | Удаление предыдущего символа перед курсором |
| ctrl + u | Очистить все / вырезать ДО курсора |
| ctrl + k | Очистить все / вырезать ПОСЛЕ курсора |
| ctrl + w | Удалить слово ПЕРЕД курсором |
| alt + d | Удалить слово под курсором |
| ctrl + y | Вставить (если вы использовали предыдущую команду для удаления) |
| ctrl + i | Автозавершение команды (tab) |
| ctrl + l | Очистить |
| ctrl + c | Убить запущенный процесс |
| ctrl + z | Приостанавливает выполнение текущей задачи на переднем плане. Это полезно, если вы хотите, скажем, закрыть редактор и перейти куда-то за нужными данными. Запустить приостановленное приложение можно при помощи команды fg (вернуть на передний план) или bg (запустить в фоне). |
| ctrl + _ | Отменить изменение строки (undo) |
| ctrl + t | Swap the last two characters before the cursor |
| esc + t | Swap last two words before the cursor |
| alt + t | swap current word with previous |
| esc + . | Вставить последний аргумент предыдущей команды |
| esc + _ | То же — вставить последний аргумент |
| alt + [Backspace] | delete PREVIOUS word |
| alt + < | Move to the first line in the history |
| alt + > | Move to the end of the input history, i.e., the line currently being entered |
| alt + ? | display the file/folder names in the current path as help |
| alt + * | print all the file/folder names in the current path as parameter |
| alt + . | print the LAST ARGUMENT (ie "vim file1.txt file2.txt" will yield "file2.txt") |
| alt + c | capitalize the first character to end of word starting at cursor (whole word if cursor is at the beginning of word) |
| alt + u | make uppercase from cursor to end of word |
| alt + l | make lowercase from cursor to end of word |
| alt + n | Поиск вперёд в истории команд |
| alt + p | Non-incremental reverse search of history. |
| alt + r | Undo all changes to the line |
| alt + ctl + e | Expand command line. |
| ~[TAB][TAB] | List all users |
| $[TAB][TAB] | List all system variables |
| @[TAB][TAB] | List all entries in your /etc/hosts file |
| [TAB] | Auto complete |
History
История команд — это не «лог» и не «журнал событий». Это память машины, вырытая в обратную сторону, как дизассемблер, который читает байты справа налево. Ctrl+R — нырять вглубь, Ctrl+S — всплывать; !! — переиграть прошлое, не перепечатывая его, а ^abc^xyz — маленькая хирургия прямо в последней строке. Память на машине никогда не спрашивает «ты уверен?». Она просто хранит всё, включая те команды, о которых тебе не хочется вспоминать при свидетелях.
| Команды | Описание |
|---|---|
| ctrl + r | Search backward starting at the current line and moving 'up' through the history as necessary |
| ctrl + s | Search forward starting at the current line and moving 'down' through the history as necessary |
| ctrl + p | Fetch the previous command from the history list, moving back in the list (same as up arrow) |
| ctrl + n | Fetch the next command from the history list, moving forward in the list (same as down arrow) |
| ctrl + o | Execute the command found via Ctrl+r or Ctrl+s |
| ctrl + g | Escape from history searching mode |
| !! | Run PREVIOUS command (ie sudo !!) |
| !vi | Run PREVIOUS command that BEGINS with vi |
| !vi:p | Print previously run command that BEGINS with vi |
| !n | Execute nth command in history |
| !$ | Last argument of last command |
| !^ | First argument of last command |
| ^abc^xyz | Replace first occurrence of abc with xyz in last command and execute it |
Дополнительно
Однажды ты поймёшь, что весь этот набор — про одно и то же: не тратить жизнь на перенос курсора, пока где-то на кухне остывает чай. И заодно ты узнаешь, что и Makefile умеет подсказывать, если знать, куда ткнуть:
Парадокс в том, что «стандартная» оболочка, которую все считают рудиментом, оказывается удобнее любого свежего терминального супергероя. Мода меняется, фреймворки умирают, а Ctrl+A всё ещё ведёт в начало строки. Экран не гаснет — а курсор всё мигает, и ты снова печатаешь.