6

Когда я набираю имя файла и дважды нажимаю клавишу Tab, появляется список каталогов, предлагающий все варианты завершения вкладки. По умолчанию он выводится в том же формате, что и ls но я бы предпочел, чтобы список опций был более встроен в ls -l . Это возможно?

Мне также интересно посмотреть, есть ли какая-либо дальнейшая настройка, которая может быть сделана в этом направлении, хотя я не совсем уверен, что бы мне хотелось, просто некоторые примеры идей тоже были бы классными.

1 ответ1

5

Просто нет.

Причина:

  1. В настройках "set" или "shopt" нет опции для указания формата вывода предложений по завершению вкладок. Единственным исключением является среда COLUMNS , однако вы не можете изменить ее на другое значение.

  2. Для пользовательских завершений (например, --option extension) вы можете переопределить функцию завершения выводом в stdout/stderr, чтобы отобразить что-то вроде ls -l вместе с предложениями о завершении. Однако завершение имени файла жестко запрограммировано, вы не можете переопределить его complete встроенным.

Вот короткий грязный пример для отображения подробной информации вместе с предложениями по завершению вкладки. Представьте , у вас есть программа foo и она принимает четыре опции bar barr barrr car функция завершения загрязнена будет:

function _foo() {
    local cmds=(bar barr barrr car)
    local cur n s
    if [ $COMP_CWORD = 1 ]; then
        cur="${COMP_WORDS[1]}"
        n="${#cur}"

        # -- dirty hack begin --
        echo
        cat <<EOT | while read s; do [ "${s:0:n}" = "$cur" ] && echo "$s"; done
bar:      choose this option if you feel well
barr:     choose this option if you feel hungry
barrr:    choose this option if you are starving
car:      choose this option if you want a car
EOT
        # ++ dirty hack end ++

        COMPREPLY=($(compgen -W "${cmds[*]}" "$cur"))
    fi
} && complete -F _foo foo

Теперь вы можете увидеть краткий справочный документ перед предложениями:

$ foo ba<tab>
bar:      choose this option if you feel well
barr:     choose this option if you feel hungry
barrr:    choose this option if you are starving
r

(Единственный символ 'r' в последней строке - автозаполнение префикса ba .)

И когда префикс неоднозначный, функция завершения оценивается дважды, список предложений заканчивается в конце:

$ foo bar<tab><tab>
bar:      choose this option if you feel well
barr:     choose this option if you feel hungry
barrr:    choose this option if you are starving

bar:      choose this option if you feel well
barr:     choose this option if you feel hungry
barrr:    choose this option if you are starving

bar    barr   barrr

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .