Завершение командной строки - Command-line completion

Пример завершения командной строки в Bash .
Пример завершения командной строки в PowerShell с Intellisense .

Завершение командной строки (также завершение табуляции ) - обычная функция интерпретаторов командной строки , в которых программа автоматически заполняет частично набранные команды.

Интерпретаторы командной строки - это программы, которые позволяют пользователю взаимодействовать с базовой операционной системой, вводя команды в командной строке с помощью интерфейса командной строки (CLI), в отличие от наведения указателя мыши и щелчка мышью в графическом интерфейсе пользователя (GUI). Завершение командной строки позволяет пользователю ввести несколько первых символов команды, программы или имени файла и нажать клавишу завершения (обычно Tab ↹), чтобы заполнить оставшуюся часть элемента. Затем пользователь нажимает Returnили, ↵ Enterчтобы запустить команду или открыть файл.

Автозавершение командной строки полезно по-разному, как показано на анимации, сопровождающей эту статью. Обычно используемые команды, особенно с длинными именами, требуют меньшего количества нажатий клавиш. Команды с длинными или трудными для написания именами файлов могут быть введены путем ввода нескольких первых символов и нажатия клавиши завершения, которая завершает команду или имя файла. В случае нескольких возможных завершений некоторые интерпретаторы командной строки, особенно оболочки Unix, будут перечислять все возможные завершения, начинающиеся с этих нескольких символов. Пользователь может ввести больше символов и нажать еще Tab ↹раз, чтобы увидеть новый, суженный список, если набранные символы все еще неоднозначны, или же завершить команду / имя файла с конечным пробелом. Альтернативная форма завершения перебирает все результаты сопоставления, когда ввод неоднозначен.

Завершаемые элементы могут включать команды, аргументы, имена файлов и другие сущности, в зависимости от конкретного интерпретатора и его конфигурации. Автозавершение командной строки обычно работает только в интерактивном режиме . То есть его нельзя вызвать для выполнения частично набранных команд в сценариях или пакетных файлах , даже если завершение однозначно. Завершение имени табуляцией происходит из-за того, что завершение командной строки часто вызывается нажатием клавиши табуляции .

История

Автозавершение табуляции появилось рано в истории вычислений; один из первых примеров появился в системе разделения времени Беркли для SDS 940 , где, если типизированная строка была неоднозначной, интерпретатор ничего не делал бы, но если бы строка не была неоднозначной, он автоматически завершал бы ее без какой-либо команды от пользователя. Эта функция плохо работала со слишком частыми опечатками , и это было смешанным преимуществом. Эту функцию имитировали разработчики Tenex , которые внесли важное изменение: Tenex использовал «распознавание escape-кода», при котором интерпретатор не пытался выполнить автозаполнение, если пользователь не нажал клавишу escape (отсюда и имя). Домен также был расширен от только имен программ в системе Беркли до имен программ и файлов в Tenex. Потомок Tenex TOPS-20 переместил автозавершение командной строки из интерпретатора команд в операционную систему с помощью системного вызова COMND JSYS, чтобы сделать его доступным для других пользовательских приложений. Оттуда он был заимствован Unix.

Пример

Чтобы открыть файл введение к командно-линии completion.html с Firefox одним напечатали бы:

 firefox introduction-to-command-line-completion.html

Это длинная команда для ввода. Вместо этого мы можем использовать завершение из командной строки.

Подсказка к завершению

В следующем примере показано, как завершение командной строки работает в Bash . Другие оболочки командной строки могут работать несколько иначе.

Сначала мы набираем первые три буквы нашей команды:

 fir

Затем мы нажимаем Tab ↹и, поскольку единственная команда в нашей системе, которая начинается с «ели», - это «firefox», она будет завершена до:

 firefox

Затем начинаем набирать имя файла:

 firefox i

Но на этот раз Introduction-to-command-line-completion.html - не единственный файл в текущем каталоге, который начинается с «i». В каталоге также находятся файлы Introduction-to-bash.html и Introduction -to-firefox.html . Система не может решить, какое из этих имен файлов мы хотим ввести, но она знает, что файл должен начинаться с «Introduction-to-», поэтому команда будет завершена до:

 firefox introduction-to-

Теперь набираем "c":

 firefox introduction-to-c

После нажатия Tab ↹будет завершено полное имя файла:

 firefox introduction-to-command-line-completion.html

Вкратце мы набрали:

 firTab ↹iTab ↹cTab ↹

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

Вращающееся завершение

В следующем примере показано, как завершение из командной строки работает с чередующимся завершением, например, в CMD Windows .

Мы выполняем ту же процедуру, что и при запросе на завершение, пока не получим:

 firefox i

Нажимаем Tab ↹один раз, с результатом:

 firefox introduction-to-bash.html

Нажимаем еще Tab ↹раз, получая:

 firefox introduction-to-command-line-completion.html

Вкратце мы набрали:

 firTab ↹iTab ↹Tab ↹

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

Автозавершение в разных интерфейсах командной строки

  • Оболочки Unix , включая Bash (оболочку по умолчанию в большинстве дистрибутивов Linux ) и ksh среди многих других, имеют давнюю традицию расширенных и настраиваемых возможностей завершения.
    • Программируемое завершение Bashcomplete и compgenкоманды были доступны с бета-версии 2.04 в 2000 году и предлагают как минимум завершение имени пути и имени файла.
    • Для пользователей KornShell завершение имени файла зависит от значения переменной EDITOR. Если РЕДАКТОР установлено значение VI, вы набираете часть имени, а затем Escape, \. Если РЕДАКТОР установлен в Emacs , вы набираете часть имени, а затем Escape, Escape.
    • Z оболочки (ЗШ) инициатор поддержки полностью программируемое завершение, что позволяет пользователям иметь оболочку автоматически завершат параметры различных команд , не относящиеся к самой оболочке, что достигается путем заливки оболочки с определениями всех известных переключателей , а также в зависимости от обстоятельств типы параметров. Это позволяет пользователю, например, ввести tar xzf Tab ↹ }} и заставить оболочку заполнять только tar- архивы gzip из реальной файловой системы, пропуская файлы, несовместимые с входными параметрами. Современная установка zsh поставляется с определениями завершения для более пятисот команд.
    • Tcsh предлагает автоматическое завершение имени файла, команды и переменной по умолчанию, активируемое с помощью Tab ↹. Встроенная команда complete обеспечивает полностью программируемое завершение. Исходный код поставляется с файлом complete.tcsh, содержащим множество примеров его синтаксиса завершения.
  • Windows PowerShell , расширяемая командная оболочка от Microsoft, основанная на объектно-ориентированном программировании и платформе Microsoft .NET , предоставляет мощные и настраиваемые возможности завершения, аналогичные традиционным оболочкам Unix.
  • Cmd.exe команды процессор Windows NT систем на основе поддерживает основные завершения. Можно использовать отдельную привязку клавиш только для сопоставления имен каталогов.
  • cmd.exe / F: ON включает символы завершения имен файлов и каталогов (по умолчанию ^ F и ^ D). Используйте cmd.exe /? для дополнительной информации.
  • TweakUI можно использовать для настройки ключей, используемых для завершения имени файла и имени каталога.
  • В командном процессоре MS-DOS COMMAND.COM не было завершения командной строки: нажатие клавиши табуляции просто перемещало курсор . Однако различные улучшенные оболочки для MS-DOS, такие как 4DOS , версия COMMAND.COM для FreeDOS или Enhanced DOSKEY.COM, имеют функцию завершения по табуляции в стиле Unix.
  • Far Manager помимо функций управления файлами обеспечивает историю команд и завершение строк для Windows.

Смотрите также

использованная литература

внешние ссылки

Оболочки Unix

Интерпретаторы команд Windows

(Обязательно проверьте раздел «Применимо к» в каждой статье)