Введение
Завершение командной строки (также известное как завершение по нажатию клавиши Tab) — распространенная функция интерпретаторов командной строки, при которой программа автоматически дополняет частично введенные команды. Интерпретаторы командной строки — это программы, позволяющие пользователю взаимодействовать с базовой операционной системой путем ввода команд в командной строке с помощью интерфейса командной строки (CLI), в отличие от использования мыши для указания и щелчка в графическом пользовательском интерфейсе (GUI). Завершение командной строки позволяет пользователю ввести первые несколько символов команды, программы или имени файла и нажать клавишу завершения (обычно Tab), чтобы дополнить остальную часть элемента. Затем пользователь нажимает Enter или пробел, чтобы выполнить команду или открыть файл. Завершение командной строки полезно во многих отношениях, как показано в анимации, сопровождающей эту статью. Для часто используемых команд, особенно с длинными именами, требуется меньше нажатий клавиш. Команды с длинными или сложными в написании именами файлов можно ввести, набрав первые несколько символов и нажав клавишу завершения, которая завершит команду или имя файла. В случае нескольких возможных вариантов завершения некоторые интерпретаторы командной строки, особенно Unix-оболочки, отображают список всех возможных завершений, начинающихся с введенных символов. Пользователь может ввести дополнительные символы и снова нажать Tab, чтобы увидеть новый, более узкий список, если введенные символы все еще неоднозначны, или завершить команду/имя файла, добавив пробел. Альтернативный способ завершения позволяет последовательно просматривать все подходящие результаты при неоднозначном вводе. Элементы, которые можно дополнять, могут включать команды, аргументы, имена файлов и другие сущности, в зависимости от конкретного интерпретатора и его конфигурации. Завершение командной строки обычно работает только в интерактивном режиме. Это означает, что его нельзя использовать для дополнения частично введенных команд в скриптах или пакетных файлах, даже если завершение однозначно. Название "завершение по нажатию клавиши Tab" (Tab completion) происходит от того, что завершение командной строки часто вызывается нажатием клавиши Tab.
Command line completion (also tab completion) is a common feature of command line interpreters, in which the program automatically fills in partially typed commands. Command line interpreters are programs that allow a user to interact with the underlying operating system by typing commands at a command prompt using a command line interface (CLI), in contrast to pointing and clicking a mouse in a Graphical User Interface (GUI). Command line completion allows the user to type the first few characters of a command, program, or filename, and press a completion key (normally ) to fill in the rest of the item. The user then presses or to run the command or open the file. Command line completion is useful in several ways, as illustrated by the animation accompanying this article. Commonly accessed commands, especially ones with long names, require fewer keystrokes to reach. Commands with long or difficult to spell filenames can be entered by typing the first few characters and pressing a completion key, which completes the command or filename. In the case of multiple possible completions, some command line interpreters, especially Unix shells, will list all possible completions beginning with those few characters. The user can type more characters and press again to see a new, narrowed down list if the typed characters are still ambiguous, or else complete the command/filename with a trailing space. An alternate form of completion rotates through all matching results when the input is ambiguous. Completable elements may include commands, arguments, file names and other entities, depending on the specific interpreter and its configuration. Command line completion generally only works in interactive mode. That is, it cannot be invoked to complete partially typed commands in scripts or batch files, even if the completion is unambiguous. The name tab completion comes from the fact that command line completion is often invoked by pressing the tab key.
История
Автодополнение появилось в самом начале истории вычислительной техники: один из первых примеров был реализован в Berkeley Timesharing System для SDS 940, где, если введенная строка была неоднозначной, интерпретатор ничего не предпринимал, а если строка была однозначной, он автоматически дополнял её без каких-либо действий со стороны пользователя. Эта функция плохо справлялась с частыми опечатками и поэтому была палкой о двух концах. Разработчики Tenex скопировали эту функцию, но внесли важное изменение: в Tenex использовалось "распознавание клавиши Escape", при котором интерпретатор не пытался выполнить автодополнение, пока пользователь не нажимал клавишу Escape (отсюда и название). Область применения также была расширена: от имен программ в системе Berkeley до имен программ и файлов в Tenex. Наследник Tenex, TOPS 20, перенёс автодополнение командной строки из интерпретатора команд в операционную систему через системный вызов COMND JSYS, чтобы сделать его доступным для других пользовательских приложений. Затем его позаимствовала Unix.
Завершение в различных интерфейсах командной строки
Unix-оболочки, включая Bash (оболочка по умолчанию в большинстве дистрибутивов Linux) и ksh, среди многих других, имеют давнюю традицию продвинутых и настраиваемых возможностей автодополнения. Программируемые возможности автодополнения Bash, команды `complete` и `compgen` доступны с бета-версии 2.04 и обеспечивают как минимум автодополнение имён файлов и путей. Для пользователей KornShell автодополнение имени файла зависит от значения переменной `EDITOR`. Если `EDITOR` установлено в `vi`, вы вводите часть имени, а затем ,. Если `EDITOR` установлено в `Emacs`, вы вводите часть имени, а затем ,. Z-оболочка (zsh) впервые реализовала поддержку полностью программируемого автодополнения, позволяя пользователям автоматически дополнять параметры различных команд, не связанных с самой оболочкой. Это достигается путем предоставления оболочке определений всех известных ключей и соответствующих типов параметров. Это позволяет пользователю, например, ввести и получить автодополнение только tar.gz-архивов из текущей файловой системы, исключая файлы, несовместимые с входными параметрами. Современная установка zsh поставляется с определениями автодополнения для более чем пятисот команд. Tcsh предлагает по умолчанию автодополнение имён файлов, команд и переменных, активируемое с помощью встроенной команды `complete`, которая обеспечивает полностью программируемое автодополнение. Исходный код поставляется с файлом `complete.tcsh`, содержащим множество примеров синтаксиса автодополнения. Windows PowerShell, расширяемая командная оболочка от Microsoft, основанная на объектно-ориентированном программировании и платформе Microsoft .NET, предоставляет мощные и настраиваемые возможности автодополнения, аналогичные традиционным Unix-оболочкам. Командный процессор систем на базе Windows NT поддерживает базовое автодополнение. Можно использовать отдельную привязку клавиш для сопоставления только имён каталогов. позволяет использовать символы автодополнения имён файлов и каталогов (^F и ^D по умолчанию). Используйте для получения дополнительной информации. TweakUI можно использовать для настройки клавиш, используемых для автодополнения имён файлов и каталогов. В командном процессоре MS DOS не было автодополнения командной строки: нажатие клавиши Tab просто перемещало курсор. Однако различные расширенные оболочки для MS DOS, такие как 4DOS, версия FreeDOS или функция Enhanced DOSKEY.COM, обеспечивали автодополнение в стиле Unix. Far Manager, помимо функций управления файлами, предоставляет историю команд и автодополнение строк для Windows.