Допустим, у меня есть каталог с несколькими файлами, например:
$ ls
file1 file2 file3
И я хочу выполнить завершение табуляции в bash:
$ cat file<tab>
file1 file2 file3
Я помню, как кто-то выполнял завершение табуляции, и оболочка выделяла следующие части полужирным шрифтом, поэтому в этом случае он будет жирным шрифтом 1
, 2
и 3
имени файла, чтобы он выглядел так: файл1 файл2 файл3
который подскажет, что вам следует ввести дальше.
Я думаю, это была особенность zsh
, но есть ли способ получить это в bash
?
В дистрибутивах на основе Red Hat есть пакет bash-completing. Этот пакет заполняет каталог /etc/bash_completion.d/ определенным поведением завершения для нескольких программ. Я использую его в Fedora, Red Hat и CentOS.
yum install bash-completion
Я не знаю о напрямую портированных функциях, но есть способ взломать это в bash
. Программируемое завершение позволяет указать, что вы хотите видеть при нажатии этой клавиши табуляции в зависимости от вызывающей программы, что позволяет (в качестве популярного примера) ssh
[tab], чтобы показать варианты автозаполнения из ~/.ssh/known_hosts
.
Вот несколько полезных ресурсов:
Добавленные пользователем "завершенные"
Конечно, чтобы дублировать указанные выше функции, вам придется разобраться с программируемым аспектом завершения и написать свои собственные функции. Ubuntu поставляется собственный набор выполненных пользователями, которые являются хорошей отправной точкой.
я использую tcsh
из-за похожей особенности.
Вот мой файл /etc/csh.cshrc:
if ($?tcsh && $?prompt) then
bindkey "\e[1~" beginning-of-line # Home
bindkey "\e[7~" beginning-of-line # Home rxvt
bindkey "\e[2~" overwrite-mode # Ins
bindkey "\e[3~" delete-char # Delete
bindkey "\e[4~" end-of-line # End
bindkey "\e[8~" end-of-line # End rxvt
bindkey -k up history-search-backward
bindkey -k down history-search-forward
set filec
set prompt="[%B%m%b:%~] %n%# "
set complete = enhance # important line
set autolist # important line too
alias ls 'ls -hA --color'
alias ll 'ls -l'
endif