Video: Setting Up Vim to Work with Python Applications

Posted by
on under

In this short video tutorial I demonstrate my Vim editor setup for working with Python applications.

Do you want to try this out? Download my .vimrc file! If your tagbar does not work, install Exuberant Ctags (use brew install ctags or sudo apt-get install ctags, or download from

Become a Patron!

Hello, and thank you for visiting my blog! If you enjoyed this article, please consider supporting my work on this blog on Patreon!

  • #1 Brandon said

    Thanks for this! I've never heard of tagbar so I may start using it. One thing you might find useful is you can add this to your .vimrc:

    set updatetime=125

    This will update gitgutter almost instantly when you make changes to git files.

  • #2 Miguel Grinberg said

    @Brandon: Hey, I hope you are doing well! Thanks for the tip.

  • #3 Ollie said

    Thank you!
    To make your instruction work please note that curl and exuberant ctags need to be installed.
    Regards and Kudos for your work!

  • #4 GreatBahram said

    Hey Miguel,

    Thanks for sharing your development stuff! I really like the part that automatically installs vim plug.

    Kudos to you!

  • #5 Damian said

    Hello Miquel,
    Thanks for all your work. This is not related to this video but I was wondering if you can help with the Microflack app on this URL The users' pod keeps crashing and kubectl logs give the following errors. I know its 3 years and many things have changed. Please see if you can help to fix the issues. Thanks

    kubectl get logs
    users-5d658dff8b-8ch7s 0/1 CrashLoopBackOff 8 17m

    kubectl logs users-5d658dff8b-8ch7s

    Traceback (most recent call last):
      File "migrations/", line 87, in <module>
      File "migrations/", line 72, in run_migrations_online
        connection = engine.connect()
      File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/", line 2082, in connect
        return self._connection_cls(self, **kwargs)
      File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/", line 90, in __init__
        if connection is not None else engine.raw_connection()
      File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/", line 2168, in raw_connection
        self.pool.unique_connection, _connection)
      File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/", line 2138, in _wrap_pool_connect
        return fn()
      File "/usr/local/lib/python3.6/site-packages/sqlalchemy/", line 328, in unique_connection
        return _ConnectionFairy._checkout(self)
      File "/usr/local/lib/python3.6/site-packages/sqlalchemy/", line 766, in _checkout
        fairy = _ConnectionRecord.checkout(pool)
      File "/usr/local/lib/python3.6/site-packages/sqlalchemy/", line 516, in checkout
        rec = pool._do_get()
      File "/usr/local/lib/python3.6/site-packages/sqlalchemy/", line 1229, in _do_get
        return self._create_connection()
      File "/usr/local/lib/python3.6/site-packages/sqlalchemy/", line 333, in _create_connection
        return _ConnectionRecord(self)
      File "/usr/local/lib/python3.6/site-packages/sqlalchemy/", line 461, in __init__
      File "/usr/local/lib/python3.6/site-packages/sqlalchemy/", line 651, in __connect
        connection = pool._invoke_creator(self)
      File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/", line 105, in connect
        return dialect.connect(*cargs, **cparams)
      File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/", line 393, in connect
        return self.dbapi.connect(*cargs, **cparams)
      File "/usr/local/lib/python3.6/site-packages/pymysql/", line 90, in Connect
        return Connection(*args, **kwargs)
      File "/usr/local/lib/python3.6/site-packages/pymysql/", line 706, in __init__
      File "/usr/local/lib/python3.6/site-packages/pymysql/", line 931, in connect
      File "/usr/local/lib/python3.6/site-packages/pymysql/", line 1269, in _get_server_information
        self.server_charset = charset_by_id(lang).name
      File "/usr/local/lib/python3.6/site-packages/pymysql/", line 38, in by_id
        return self._by_id[id]
    KeyError: 255
  • #6 Miguel Grinberg said

    @Damian: it's an issue with the pymsql package and MySQL 8. Use a newer version of pymysql.

  • #7 Scott said

    To get this to work on windows, I installed vim-plug manually and removed the lines relating to vim-plug detection and initial plugin installation. (The need_to_install_plugin blocks)

    I tried to see if I could figure out how to modify it so that part would work but couldn't figure out how to do it. I think it's related to how the home directory is specified in windows. But the manual vim-plug installation steps above do work.

    Also, @Miguel -- I don't seem to get notified about comments here when my post goes up or a response is posted.

  • #8 Scott said

    Also these guys need to be commented out otherwise weird characters will invade everywhere.

    let &t_SI .= "\<Esc>[?2004h"
    let &t_EI .= "\<Esc>[?2004l"

  • #9 Miguel Grinberg said

    @Scott: This may not be what you want, but I have used vim under the WSL and Cygwin using the same configuration w/o any issues.

  • #10 James Gardiner said


    Looks very useful -- what triggers the flake/pep test?


  • #11 Miguel Grinberg said

    @James: the syntastic plugin does a syntax check on file save.

  • #12 Anthony said

    Hi Miguel, Thanks once again for a very useful tutorial. I'm trying it out as I want to get better at using vim which I think is really cool. For some reason, it gives a syntax error when I use the new python string format using f"my string". Also how do we get vim to recognise the virtual environment we're in?

  • #13 Miguel Grinberg said

    @Anthony: You may be using an old version of vim, or maybe a vim compiled for Python 2 instead of 3. Vim uses the activated virtualenv by default.

  • #14 Kevin Luo said

    Thank you very much @Miguel Grinberg for the fantastical sharing. But in my environment, the tagbar does not work even thought I have installed the exuberant ctags~;(

  • #15 Miguel Grinberg said

    @Kevin: I'm not sure how I can help. I suggest going over issues in the repository for the tagbar plugin, maybe someone else had the same issue.

  • #16 Chris Thompson said

    Man, this is going to improve my workflow soooo much. I use Vim as my main editor but I only had tabs configured and Kite installed. The rest was all Vim shortcuts. Thank you for sharing!

Leave a Comment