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

Скажем, у меня есть такой каталог:

 foo/
   bar.js
   bar/

если я cd в foo, наберу «ba» и нажму Tab, я не получу завершение, потому что имя файла совпадает с именем папки.

Есть ли ключ, который я могу удерживать с помощью табуляции, который просто даст мне папку (или файл?)

0
22.02.2017, 23:18
2 ответа

TL, DR: добавить . / etc / bash_completion в ваш .bashrc .

Чтобы ответить на вопрос, который вы задали, таких встроенных команд не существует. В Bash есть команды для завершения различных типов объектов (имена файлов, имена пользователей, имена переменных и т. Д.), Но не те, которые ограничиваются каталогами.

Однако, если вы не используете антикварную версию bash, вы можете использовать контекстно-зависимое завершение , функцию, добавленную в версии 2.04, выпущенной в 2000 году. Некоторые дистрибутивы включают ее по умолчанию; для других вам необходимо установить пакет bash-completion и активировать его в вашем ~ / .bashrc . Большинство дистрибутивов предоставляют пакет под названием bash-completion и помещают сценарий активации в / etc / bash_completion , то есть ваш .bashrc должен содержать строку

. /etc/bash_completion

после это, если вы введете cd и нажмете Tab , будут добавлены только имена каталогов.

Если у вас не древняя версия bash (≥4.0), вы можете поместить shopt -s autocd в свой .bashrc , а после этого вы можете опустить cd , поэтому вы можете написать только bar вместо cd bar . Завершение табуляции завершит имена команд из $ PATH и имена каталогов из текущего каталога (и $ CDPATH ) в первом слове строки.

Баш 4.0 также позволяет вам писать свои собственные функции редакции командной строки (более ранние версии вроде бы делали это, но вам приходилось перепрыгивать через обручи). Так что, если вы действительно хотите, вы можете это сделать. Как настроить завершение команд Bash? содержит относительно сложный пример; найдите READLINE_LINE и завершите , чтобы найти другие примеры.

1
28.01.2020, 02:34

Причина, по которой вы не получаете никаких завершений после ввода ba , заключается в том, что вы не предшествовали ba с команда cd . Баш понимает, что ввод bar.js или bar не имеет смысла (один - это каталог, а другой файл bar.js - либо отсутствует в $ PATH и / или не имеет набора разрешений для исполняемого файла), поэтому он не дает вам никаких завершений вообще.

Однако, если перед именем каталога поставить cd , bash увидит, что bar подходит, и никакое другое имя не подходит, и выполнит полное завершение:

$ ls
bar  bar.js
$ cd <TAB>

При в этот момент приглашение преобразуется в

$ cd bar/ # This line
1
28.01.2020, 02:34

Теги

Похожие вопросы