Как автозаполнение проигнорировать конкретное завершение

У меня есть автозаполнение, работающее для bash. Когда я набираю часть имени программы, а затем TAB, я получаю полную команду. Работает, как ожидалось, никаких жалоб.

Однако в моей настройке у меня есть псевдоним, называемый flexo (который регистрирует меня на машине с тем же именем). Когда я fle TAB, я получаю только flex , потому что это совершенно правильная программа на машине. Как я могу дать указание полностью игнорировать это конкретное завершение? Другими словами, я хочу, чтобы fle TAB завершил flexo и полностью игнорировал flex . Благодарю.

Monkeying с алгоритмом для вкладок завершен, чтобы разорвать пару предметов из пула, сложнее, чем вы себе представляете. Это действительно можно сделать, но это непросто, эффективно использовать или рекомендовать.

Вместо этого, @jasonwryan был на правильном пути, что вы должны придумать что-то еще для своего имени команды. Однако вместо того, чтобы пытаться остаться одним словом, имя сервера в качестве имени команды, я рекомендую вам переключать модели на многословную модель, такую ​​как остальная часть Unix. Заполнение табуляции для имен команд сильно отличается от завершения табуляции для аргументов, последнее довольно просто.

Установите короткий простой псевдоним типа 's' или любой другой псевдоним соединения, но не включайте имя хоста. Затем настройте настраиваемую процедуру завершения для этой команды, которая ТОЛЬКО автозаполняет имена хостов, такие как:

 alias s=ssh complete -F _known_hosts_real s 

Вы также можете создать для этого настраиваемую функцию:

 alias s=ssh _my_hosts() { type compopt &>/dev/null && compopt -o nospace COMPREPLY=( $( compgen -S = -W 'flexo mexo dexo' -- "$cur") ) } complete -F _my_hosts s