Назад | Перейти на главную страницу

Получаете более полезные подсказки завершения вкладки в bash?

Допустим, у меня есть каталог с несколькими файлами, например:

$ 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.

Вот несколько полезных ресурсов:

Введение, исходный код и RPM

Добавленные пользователем "завершенные"

Еще примеры

И еще примеры

Конечно, чтобы дублировать указанные выше функции, вам придется разобраться с программируемым аспектом завершения и написать свои собственные функции. 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