Обучение

Эффективная работа в командной строке: навигация и поиск

Это перевод заметки Effective Shell Part 1: Navigating the Command Line Дейва Керра.

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

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

Вот диаграмма с кратким описанием, остаток статьи — разбор деталей.

  • Базовая навигация
  • Поиск
  • Редактирование на месте
  • Совет от профи: транспонируйте!
  • Мысли в заключение

Базовая навигация

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

echo "The trouble with writing fiction is that it has to make sense,  
whereas real life doesn't. -- Iain M. Banks" >> quote.txt

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

  • В начало / конец: Ctrl + a, Ctrl + e
  • Назад / вперед по словам: Alt + b / Alt + f
  • Удалить слово / отмена: Ctrl + w / Ctrl + -
  • Удалить следующее слово: Alt + d
  • Удалить до начала: Ctrl + u
  • Удалить до конца: Ctrl + k

Поиск

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

$ command1 param1 param2 param3
$ command2 param4 param5 param6
$ command3 param7 param8 param9

Вы можете делать поиск вперёд или обратный поиск с помощью Ctrl + r и Ctrl + s. Поиск будет вестись по текущей команде, а затем итеративно по предыдущим:

Шорткаты можно так же использовать для поиска по истории команд вперёд и обратно:

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

Вот те же самые команды, применённые к исходному примеру:

  • Искать назад / вперед: Ctrl + r / Ctrl + s
  • Выполнить команду: Enter
  • Редактировать команду: ← / →
  • Остановить поиск: Ctrl + g

Редактирование на месте

Перечисленные приёмы — ценные, но если вы работаете с очень длинной или сложной командой, вам может показаться более целесообразным переключаться в свой любимый редактор.

Пользуйтесь Ctrl + x , Ctrl + e для редактирования на месте.

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

Очистка экрана

Вероятно, самый часто мной используемый шорткат —  Ctrl + l, который очищает экран, не удаляя текущую команду. Это выглядит так:

Совет от профи: транспонируйте!

Если вы освоили все перечисленные команды и вам захотелось добавить что-нибудь ещё в свой стандартный набор, попробуйте это:

Шорткат Alt + t транспонирует (меняет местами) последние два слова.  Ctrl + t — последние две буквы:

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

Мысли в заключение

Если вам когда-то хотелось узнать больше, поищите GNU Readline — это библиотека, используемая под капотом для управления командной строкой во многих интерпретаторах. На самом деле, вы можете настроить все низкоуровневые детали работы любых интерпретаторов, использующих Readline. Для этого существует конфигурационный файл .inputrc.

Самое крутое в знании этих шорткатов то, что они работают в любой командной строке, которая использует GNU Readline. Это значит всё, что вы изучили применяется к:

  1. Bash
  2. zsh
  3. Python REPL
  4. Node.js REPL

И вероятно, ко множеству других.

Все эти шорткаты должны быть знакомы пользователям Emacs. Для Readline есть опция "Vi Mode", которая позволяет использовать команды vi для работы с текстом. Вы можете перейти в этот режим с set -o vi.

На readline.kablamo.org/emacs есть отличная шпаргалка по командам Readline, если вы хотите копнуть глубже.

Надеюсь, было полезно. GIF сделаны с помощью LICEcap.

Перевод: Наталия Басс

Natalia Bass 05 июля 2017
Мы учим программированию с нуля до стажировки и работы. Попробуйте наш бесплатный курс «Введение в программирование» или полные программы обучения по Node, PHP, Python и Java.

Хекслет

Подробнее о том, почему наше обучение работает →