Eu sugeri alterar a variável completion-display-width
readline em / r / bash , mas você não alterou t especificar que você só queria que funcionasse nesta função de conclusão.
De qualquer forma, em uma função de conclusão, você pode detectar se é disparado por TAB (COMP_TYPE == 9) ou por TAB TAB ( COMP_TYPE == 63), e se este for o caso, você pode preencher os resultados com espaços para preencher toda a largura do terminal. É a coisa menos agressiva que eu posso pensar. Seria algo parecido com isto:
_foo_complete() {
local i file files
files=( ~/work/dev/jobs/"$2"* )
[[ -e ${files[0]} || -L ${files[0]} ]] || return 0
if (( COMP_TYPE == 63 )); then
for file in "${files[@]}"; do
printf -v 'COMPREPLY[i++]' '%*s' "-$COLUMNS" "${file##*/}"
done
else
COMPREPLY=( "${files[@]##*/}" )
fi
}
complete -F _foo_complete foo
Em uma nota lateral, você realmente não deve analisar o resultado ls .