Automating the installation and configuration of Vim
vim, vim_directories, vim_files and flags seem to be constants, so you should apply the naming conventions on them by capitalizing their names.


Reviewing the very first part of your function code

About the serious things, I would talk for the moment only about the very first part of your code, later I may come back (no promise though):


Within the try block, you should test only the code that is actually prone to raising an exception, nothing else. If you apply this rule, you will end up by coding short try blocks. 
What may raise an exception here is rather the attempt to create a directory: os.mkdir(os.path.expanduser('~/' + sub)), the print() would not execute anyway if the attempt fails. If the directory creation succeeds, the else block should take care of the printing task. The try block should be concise and clean
I do not see the necessity of sys.exit(1) here. To be honest, in most cases it is useless, and in your typical case, I do not see how it could be useful, and you already print a message about execution failure. 
As a reader of your code, I was curious to know why are you particularly interested errno.EEXIST but not other error codes? I was expecting that you are too meticulous and you decided to track down all the symbols of errno module, but I was mistaken. I think it is fair enough to write this instead:

except OSError as e:
     print('Error code: {}'.format(e.errno))
     print('Error message: {}'.format(e.strerror))

Besides, note that this code:

e.errno == errno.EEXIST:
    print('...')


is the same as:

e.errno == 17:
    print('...')


What I mean here, do you really want to include such fine grain details in a function which is rather more generic/high level? 
If for some mysterious reason of your own, you find errno.EEXIST too sexy and attractive, I would still opt for a less brain nagging syntax: FileExistsError instead of errno.EEXIST (note that the later corresponds exactly to FileExistsError but, as you can see, it is more readable)
Given the elements mentioned so far, I would write the very first part of your code as follows:

for sub in vim_directories:
    try:
        os.mkdir(os.path.expanduser('~/' + sub)) 
    except FileExistsError:
        print("Directory " + vim + sub + " already exists.")         
    except OSError as e:
        print('Error code: {}'.format(e.errno))
        print('Error message: {}'.format(e.strerror))
    else:
        print("mkkdir " + os.path.expanduser('~/' + sub))