A Vim plugin, for automatically detecting indent settings. This plugin adds a :DetectIndent command, which tries to intelligently set the 'shiftwidth', 'expandtab' and 'tabstop' options based upon the existing settings in use in the active file.
You may wish to consider one of the many forks of this project. Be aware that some of these forks have merged patches that I have been ignoring for good reasons, and that long lists of special cases are not necessarily a good idea...