According to the source code, you need to modify keybindings via ido-setup-hook:
;; Customize the `ido' group to change the `ido' functionality.
;; To modify the keybindings, use the ido-setup-hook. For example:
;;(add-hook 'ido-setup-hook 'ido-my-keys)
;;(defun ido-my-keys ()
;; "Add my keybindings for ido."
I also had this problem and couldn't fix. My workaround was overriding the smex keybindings function:
(defun smex-prepare-ido-bindings ()
(define-key ido-completion-map (kbd "TAB") #'minibuffer-complete)
(define-key ido-completion-map (kbd "M-p") #'previous-history-element)
(define-key ido-completion-map (kbd "M-.") #'smex-find-function)
From looking at the source, flx-ido-mode favors the longest potential match. There aren't any options to tune this behavior.
You might be able to get what you want by tweaking the ido key bindings. Ido has a few different key maps, so depending on exactly what you want you could modify ido-common-completion-map, ido-file-completion-map, or ido-buffer-...
I wrote a small script, and then integrated with helm to achieve similar effect. Luckily I wrote about it on my blog (while trying to kickstart my blogging habit). Here it is:
Should work on Linux transparently. On Windows, you can plug in the actual Everything app that I was trying ...
Have you changed the value of smex-auto-update? The default is t.
smex-auto-update is a compiled Lisp function in `smex.el'.
(smex-auto-update &optional IDLE-TIME)
Update Smex when Emacs has been idle for IDLE-TIME.