В Ubuntu, если я установлю пакет bash-completion
, я могу увидеть его содержимое с:
$ dpkg -L bash-completion
В выводе указан /etc/bash_completion
.
Внутри, следующая команданаписано:
. /usr/share/bash-completion/bash_completion
Исходный файл /usr/share/bash-completion/bash_completion
.
Расположение этих файлов варьируется от операционной системы к другой:
Примечание: я использую Mac, а на macOS сохраняется файл завершения bash(по умолчанию) в /usr/local/etc/bash_completion
, а каталог bash_completion.d
в /usr/local/etc/bash_completion.d
В моей системе /usr/share/bash-completion/bash_completion
содержит эту строку:
_install_xspec '*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite
Iдумаю, что эта строка отвечает за поведение, которое вы наблюдаете.
Если вы хотите настроить его, чтобы bash исключил расширения foo
и bar
при заполнении имени файла после команды $ vim
, выможно попробовать следующую процедуру .
- Создать файл
~/.bash_completion
Внутри последнего напишите:
for bcfile in ~/.bash_completion.d/* ; do
[ -f "$bcfile" ] && . $bcfile
done
Создайте каталог ~/.bash_completion.d/
.
Внутри этого каталога создайте файл vim
.
Внутризатем напишите:
complete -f -X '*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class|foo|bar)' vi vim gvim rvim view rview rgvim rgview gview
complete
- встроенная команда bash, которая позволяет вам указать, как аргументы имени команды должны быть завершены.
-f
- сокращение для -A file
,который указывает bash, что вы хотите видеть только имена файлов в ваших предложениях.
-X
исключает все, что соответствует следующему шаблону.
Обратите внимание, что я просто скопировал шаблон, используемый в /usr/share/bash-completion/bash_completion
, идобавлены foo
и bar
расширения:
*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class|foo|bar)
^^^^^^^
Вам нужно изменить шаблон, чтобы исключить реальные расширения, которых вы хотите избежать.
Имена после шаблона сообщаютbash, для которых команды должны исключать эти расширения.
В предыдущей команде это:
vi vim gvim rvim view rview rgvim rgview gview
Все они вызывают версию Vi или Vim.Вы можете добавить другие имена редакторов в конце.
Для получения дополнительной информации см .:
$ man bash
Найдите раздел READLINE
и подраздел Programmable Completion
, а также описаниеcomplete
встроенный в секцию SHELL BUILTIN COMMANDS
.
См. также Введение в завершение bash, часть 1 и Введение в завершение bash, часть 2 .