def underscore_search(input, list)
      if input[/_([^_]+)$/]
        regex = input.split('_').map {|e| Regexp.escape(e) }.join("([^_]+)?_")
        list.select {|e| e =~ /^#{regex}/ }
      else
        normal_search(input, list)
      end
    end
def underscore_search(input, list)
      if input[/_([^_]+)$/]
        regex = input.split('_').map {|e| Regexp.escape(e) }.join("([^_]+)?_")
        list.select {|e| e =~ /^#{regex}/ }
      else
        normal_search(input, list)
      end
    end
A normal_search which also provides aliasing of underscored words.
 For example 'some_dang_long_word' can be specified as 's_d_l_w'. Aliases can be any unique string
 at the beginning of an underscored word. For example, to choose the first completion between 'so_long'
 and 'so_larger', type 's_lo'.