`fail2ban-client` uses nested subcommand syntax and intermixes fixed/enumerable values with dynamically detected ones. If you know exactly what your overall command structure looks like, these completions will work great. Unfortunately their discoverability is a bit lacking, but that's not really fish's fault. e.g. * `f2b-c get/set` take certain known values but also accepts a dynamic jail name * `f2b-c get/set <jail>` take certain fixed options but... * `f2b-c get/set <jail> action` require enumerating an entirely different set of values to generate the list of completions, bringing us to... * `f2b-c get <jail> action <action>` has a fixed number of options but * `f2b-c set <jail> action <action> <property>` can be any valid command and its arguments The intermixing of fixed, enumerable, and free-form inputs in a single command line is enough to make one's head spin!