Автодополнение командной строки

С механизмом автодополнения наверняка знакомы люди, пользующиеся веб-броузерами. При вводе адреса в адресной строке под ней появляется выпадающий список адресов, которые начинаются с набранных символов (если мы не набрали схему http://, она подразумевается уже набранной), и которые мы вводили в адресную строку в обозримом прошлом. При дальнейшем вводе символов этот список, естественно, меняется.

Мы можем продолжать вводить адрес, а можем выбрать заинтересовавший нас из выпадающего списка, перемещаясь по нему клавишами Down и Up, после чего нажать Enter.

Нечто подобное можно наблюдать при вводе в строку поиска известной поисковой системы Яндекс.ру:

По-видимому, в этом случае список автодополнения получается из наиболее популярных поисковых запросов.

Механизм автодополнения в командных оболочках гораздо более гибкий, чем в приведённых примерах, и этот механизм допускает как разнообразные настройки, так и программирование.

В дальнейших примерах текущее положение курсора в командной строке будем обозначать значком .

Если нажатие клавиши Tab призошло, когда курсор находился на первом слове в командной строке, будет происходить автодополнение первого слова из списка команд:

% sea seamonkey seamonkey-config search-svnlog search-svnlog.pl

Появившийся под приглашением список показывает, что имеется четыре команды, чьи названия начинаются с символов sea. При повторных нажатиях Tab в командную строку подставляются по очереди все команды из этого списка. После второго нажатия:

% seamonkey seamonkey seamonkey-config search-svnlog search-svnlog.pl

После третьего:

% seamonkey-config seamonkey seamonkey-config search-svnlog search-svnlog.pl

и так далее.

Если курсор расположен на каком-то из последующих слов, произойдёт автодополнение в зависимости от контекста. Обычно список возможных дополнений — это параметры, характерные для программы, чьё имя уже набрано ранее в командной строке (первое слово).

Поясним на примере. Система версионирования Subversion (совершенно необязательно знать, что это такое) управляется командой svn. После команды должен следовать один из параметров, задающий одно из возможных действий по управлению системой версионирования.

% svn add checkout copy export info log move propget resolved switch blame cleanup delete help list merge propdel proplist revert unlock cat commit diff import lock mkdir propedit propset status update

% svn c cat checkout cleanup commit copy

% svn co commit copy

Кроме действий из приведённого выше списка, после команды svn могут следовать ключи.

% svn -

Нажимаем Tab:

% svn --

(видно, что команда поддерживает только длинные ключи, начинающиеся с двух знаков дефиса). Ещё раз жмём Tab:

% svn -- --help -- print help information --version -- print client version information

Появился список из двух длинных ключей — --help и --version, и краткие пояснения к ним. После этого нажимая клавишу Tab, выбираем нужный ключ.

Если же механизм автодополнения командной строки не настроен для поддержки какой-то команды, тогда список возможных дополнений — имена файлов.

Наконец, имеется и такая возможность. Допустим, что нам нужно вывести на экран содержимое файла /etc/rc.d/init.d/xinetd (сейчас для нас совершенно неважно, что в этом файле). Вводим в командную строку

% cat /e/r/i/xi

и нажимаем Tab:

% cat /etc/rc.d/init.d/xinetd

Полное имя файла чудесным образом подставилось в командную строку. Дело в том, что это единственный файл, чьё имя начинается с букв xi, а сам он лежит в директории, чьё имя начинается с i, а эта директория лежит в директории, чьё имя начинается с r, … Думаем, идея понятна.

[Замечание]Замечание

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

[Замечание]Замечание

Конечно, описать возможности механизма автодополнения на страницах руководства очень трудно: получается многословно и малоубедительно, так как читателю трудно увидеть, как развиваются события в динамике при повторных нажатиях на клавишу Tab. Лучше эти возможности осваивать на практике. Мы настоятельно советуем опробовать систему автодополнения и пользоваться ей постоянно, поскольку это резко повысит производительность труда.

Завершим раздел забавной цитатой с Экслер.ру:

Как известно, если в Google (да и «Яндексе» тоже) набрать какое-то слово, то в выпадающем меню поисковик выдаст наиболее частые запросы с этим словом. Евгений Линёв набрал слово «почему» и увидел несколько неожиданные результаты.

Я попробовал проделать ту же штуку с «Яндексом» — тот самый загадочный вопрос также присутствует.

Информатика-54