-# When unsetting variables make sure every variable name is only suggested
-# once.
-zstyle ':completion:*:unset:*' ignore-line yes
-# When working with Mercurial and Git don't complete the same file multiple
-# times. Very useful when completing file names.
-zstyle ':completion:*:(hg|git)*:*' ignore-line yes
+# Always complete one value (file name) only once in the current line. This
+# makes it easy to complete multiple values because I can just press tab to
+# get all possible values. Otherwise I would have to skip the first value
+# again and again.
+zstyle ':completion:*' ignore-line yes
+# Except for mv and cp, because I often want to use to similar names, so I
+# complete to the same and change it.
+zstyle ':completion:*:(mv|cp):*' ignore-line no
+# Don't complete ./config.* files, this makes running ./configure much
+# simpler. Thanks to Nomexous in #zsh on Freenode (2010-03-16 01:54)
+zstyle ':completion:*:*:-command-:*' ignored-patterns './config.*'
+
+# Provide a fallback completer which always completes files. Useful when Zsh's
+# completion is too "smart". Thanks to Frank Terbeck <ft@bewatermyfriend.org>
+# (http://www.zsh.org/mla/users/2009/msg01038.html).
+zle -C complete-files complete-word _generic
+zstyle ':completion:complete-files:*' completer _files
+bindkey '^F' complete-files