Unix Шорткаты командной строки

Курсор на пустой строке — это не приглашение, а вопрос. Оболочка не рисует иконки и не прячет синтаксис за кнопками: она ждёт, что ты сформулируешь мысль словами, которые понимает машина. Научиться говорить на этом языке — не «повышение продуктивности», а способ перестать посредничать между собой и процессором через мышь.

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

visual cheetsheet

Перемещение

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

Команды Описание
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 умеет подсказывать, если знать, куда ткнуть:

Вывод подсказок для Makefile

Парадокс в том, что «стандартная» оболочка, которую все считают рудиментом, оказывается удобнее любого свежего терминального супергероя. Мода меняется, фреймворки умирают, а Ctrl+A всё ещё ведёт в начало строки. Экран не гаснет — а курсор всё мигает, и ты снова печатаешь.