Update on using (neo)vim for python development

A while back I wrote a blog post about switching from JetBrains IDEs to vim. In that blog post I explained my rationale and went over my vimrc file.

Almost a year later, and I'm writing another blog post as I've switched editors again - sort of.

From Vim to Neovim

So, why the switch? Mainly for one specific Plugin - Conquer of Completion

This plugin describes itself as "Intellisense for Neovim". It provides a myriad of useful features, but mainly autocomplete popups, and seamless integration with other fantastic addons to a text editor, such as emmet and jedi.

While the .vimrc file isn't quite just a copy-paste job to get neovim up to speed, enough of it was transferrable to make the switch pretty painless (especially compared to the JetBrains -> Vim switch).

My new Init.vim

As I went over my vimrc file in the last post, I suppose I should go over my init.vim in this post.

A lot of it ported straight over, so I'll mostly be going over the plugins I have to make neovim a pleasant IDE experience.

Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
Plug 'deoplete-plugins/deoplete-jedi'

First off, the aforementioned Coc, which enables the use of a language-server background, as well as linting and emmet support. Along with Coc comes Jedi, a must-have for python development. It acts as a language server and offers the ability to jump around the codebase and view definitions for functions as I write.

Plug 'jaxbot/semantic-highlight.vim'
Plug 'cloudhead/neovim-fuzzy'
Plug 'mileszs/ack.vim'

This set of plugins carries over functionality which I got used to from my days using KDevelop to write PHP.

Semantic highlighting was talked about in my previous post, and is something I cannot code without anymore.

Fuzzy allows me to bring up a list of all files in the project folder with a shortcut - Ctrl+Q - and then do a fuzzy search. This allows me to quickly open a file, say web/admin/templates/products/product_search_form.html by simply hitting Ctrl+Q and typing "te/prosea". Functionality like this is invaluable for navigating quickly around a project.

Ack, as mentioned before, is like a project-wide find.

Plug 'ObserverOfTime/coloresque.vim'
Plug 'tpope/vim-surround'
Plug 'unblevable/quick-scope'

Coloresque highlights colour strings (like "blue" or "#ff6600") with their colour, so that you can see at a glance what they are referring to.

Surround allows me to surround some amount of text with quotes, brackets or html tags.

Quickscope is something I don't get a huge amount of use from, but it is sometimes nice. It will highlight a character in all words on the cursor's current line with the quickest way to jump to that word. It's a bit hard to explain in text, so check out the repo for a graphical demonstration.

Plug 'pangloss/vim-javascript'
Plug 'tpope/vim-fugitive'

Vim-javascript provides nicer syntax highlighting abilities for javascript files. Not much to explain there.

Fugitive is a git integration which seems rather nice on paper. The problem is I'm much too used to quitting my editor and using git from the command line, so I don't use it as much as I would think I should.

Summary of my experience

Now that I have the power of intellisense in neovim, I don't think there's anything at all that I could do with Pycharm, or any other graphical IDE, which I cannot find a way to do in neovim.

If anyone is considering trying out vim, either to just learn the movement or as a way of abandoning a graphical IDE which takes like 10 minutes to start up and become usable, I would definitely say that Neovim and CoC is a perfectly-viable development experience for a web developer using mainly python.

If you are using Pycharm at the moment, and want to ease the transition to vim, there's a plugin called IDEAVim which will allow you to use a subset of vim's movement controls within JetBrains IDEs.

Dotfiles

You can find my init.vim along with a bunch of other dotfiles over on github

Useful Links