As a self taught developer, I am always looking out for ways to improve my software dev kit and knowledge. A big part of any developer dev kit is an editor.

My editor of choice has always been anything made by Jetbrains. I used to make use of PHPStorm - well that's the only sane IDE for PHP development. I also used the 30 days trial for Rubymine earlier this year when I was searching for a new language to learn. I ended up not learning Ruby and picked up Go instead. Go being a new language didn't have much editor support - compared to say Java or Python - but luckily Jetbrains were developing this IDE called Gogland. Awesome, I got that installed.

But Gogland was a bit heavy and unstable. I decided to go back to Sublime text, it was blazingly fast but just too basic. I heard good things about VS code - a friend uses this and it seems a little popular in the Go community. I then tried it but did run into a problem which I concluded it being another of Microsoft's unending software mess. It was related to setting up a plugin for Go development. To be frank, I cannot remember the details of that issue as I wasn't even keen on using a Microsoft product on my lovely Elementary os.

So I went back to a terrain I used to know so well. Atom. I have a love-hate relationship with this editor. The love part is that it was the editor I used to write the code that ended up being my first open source PR and my first open source library. The hate part is the same reason I hate any other Electron app.

I had run out of options. Then I ran into a post on r/golang that says something like Vim-go is gold. I then visited vim-go's github repo. 2 months later. I am sold and have made use of vim exclusively for all text/code editing ever since.

My Early struggles

I struggled. A lot.

The first pain point was understanding modes. I would type about 4 characters and nothing would get printed to the screen only to realize I was in normal mode. Damn, I would then have to press i. Or if I did mistakenly press I, i would be editing the source code at some other place different from where I did intend to.

Or was it hjkl ? Holy cow. Even 2 months after, if you ask me which maps to a corresponding arrow key, it would take me about a millisecond to answer that. Although, muscle memory helps me a lot. I don't even have to remember which is which, I just place my hands on the keyboard and navigate through.

Another thing I struggled with was productivity loss. I would spend time thinking about what command I was to type.

  • yy4jp5kdd
  • dd4jp

Both commands actually do the same thing. Delete(cut) this line, go 4 line upwards and paste the text there. The first command copies the text, goes 4 lines up, paste then return to the line it copied the text from then delete. While the second one deletes the line immediately (more like cut), go 4 lines upwards then paste.

Or was it 16l only to learn somewhere else you could use lw or just w.

Or God help you find that invisible character in your source code (maybe caused by a vim snippet or something). It always ruined my compilation. I would end up switching to Sublime text to look for and delete it.

But like any other thing, it was a learning phase. I proceeded with great courage and determination. I then learnt a lot in the proceeding weeks but was never confident I knew enough to get stuff done, so I kept Sublime text around. 2 months later, Vim (Neovim actually) is only editor installed on my PC. I just couldn't stand Sublime text any much longer. <sup>0</sup>

Switching to Vim was even more enhanced by plugins that simulated features I was used to from Jetbrains and Atom. Here is a handful of them

  • scrooloose/nerdtree - A file explorer on steroids.
  • tpope/vim-fugitive - Everything you need to do with Git. This plugin is so sick, it made me appreciate the split diff UI mode on Github.
  • w0rp/ale - Linting on steroids. Shows you warnings and errors as you type and oh, Vim doesn't lag a bit.
  • airblade/vim-gitgutter - Symbols for git diffs in files as you type.
  • Shougo/deoplete.nvim - Autocompletion
  • Shougo/neosnippet - Snippets.
  • simnalamburt/vim-mundo - Local history for files. This is on par with that Local history feature from Jetbrains. I have this mapped to <C-z> like regular undo.

With that said, I don't see myself making use of another editor in the nearest future. Heck, I helped a cousin edit some file on LibreOffice the other day and I literally was bleeding internally. Ok maybe I might use another but it has to be

  • Another vim fork :)
  • A Jetbrains IDE with vim mode.
  • Emacs + Evil.

PS : Checkout my vim config file. It is a little bit disorganized since I have been learning on the go but hey.

Footnotes

0 - I learnt there is a Vim (vintage) mode in Sublime text though.