The power of nvim
Tags: nvim, programming, setup
Published: 2020-11-13 15:20:04

---
title: The power of nvim
published: true
tags: nvim, programming, setup
---
My main Editor for everything is [nvim](https://github.com/neovim/neovim). I am using it from small edits for config files, write my blog, or use it as my java IDE. 
[vim](https://github.com/vim/vim) is very versatile and while the standard features for editing text makes vim already a very powerful text editor you can still extend vim with features and functions on your own, because it has its own scripting language. 

The vim community is very strong and alive, and we are talking here from software which is over 3 decades old. 

But here is a good point to mention nvim. neovim is in the absolute basic operation identical to vim and was actually a fork of vim. But it has the target to do a in deep refactoring and providing new feature and extensibility possibilities to various other programming languages. While most of vim plug ins are still compatible with nvim, most of the nvim plug ins are not compatible anymore, because they are using the nvim api.

The community (vim and nvim) is mainly split in two groups - the User which are using Plug ins and may are heavy related on them, and the other group of pure user without any plug ins (or most self developed functions or plugins). I am a user with a heavy list of plug ins. But this is in my view with good reason. 
 
I am programming in multiple languages, luckily [coc-vim](https://github.com/neoclide/coc.nvim) supports all of them. This extension implements language server support for vim. But brings also his own plugin system. This is not ideal in my opinion, but this cost relatives the advantages.

In my portfolios is listed 

* java
* php
* bash
* sql
* rust
* javascript
* xml/html
* css
* vim script
* yaml (openAPI)
* markdown
* protobuf
* c++ (arduino)

And for most of them, I have auto completion and highlighting.
But I am also able to connect to a Database and send queries. Or I have a preview mode for my markdown files. The spell checker is building in Vim. I have a git client and a rest client, super fast fuzzy search over and in files. I can manage my Jira tasks. Can debug my code, do my reviews and left comments on github in nvim without leaving my editor.

And all this in one text editor. Which feels not heavy or slow. It does not need any indexing time like full IDEs. And it is complete distraction free. No overwhelming buttons in top, left, right or bottom. Seamlessly switching between the languages, without new behaviour and key maps. And if you become use to vim and the navigation, believe me, you cannot go back. Everything feels so efficient. Yes I admit I am a total fan girl.

To start with vim is really falling in to a rabbit hole. You are sharpening your tool set and become a more efficient developer. You questioning yourself how to optimize your work flow, what can be automated or scripted, what can let you feel more comfortable with your system. And you will learn a lot more about your system. 

[here](https://github.com/mafflerbach/dotfiles/blob/master/vim/vimrc) you will find my vimrc. It is split in multiple files. The most interestings are my [plugin list](https://github.com/mafflerbach/dotfiles/blob/master/vim/plugins.vim). My own written [functions](https://github.com/mafflerbach/dotfiles/blob/master/vim/functions.vim). And where everything comes more or less together, my [mappings](https://github.com/mafflerbach/dotfiles/blob/master/vim/mappings.vim).

**But be warned**. This setup is changing, and it grows and shrink contently and it makes no sense to blindly copy my configuration. Vim configs are so specialized and personal. What may make sense to me, is maybe a complete mess to you. A vim config grows and evolve with you. 

So, if you want to try out vim or nvim, just do it. Yes the learning curve is steep, but if you get the idea behind it, it starting to make sense and the reward is more efficient editing, deeper understanding of your workflow, consistent look and feel in any of your used languages.