How I configure Vim to work with Elixir without much clutter

Some time ago someone suggested me to write article about how I have configured my Vim to work with Elixir, now there it is:

Comments are welcome.


Any reason why you don’t use Vim hotkeys on Spacemacs?

1 Like

Remember, kids… Pandajail is where pandas are sent when you use someone else’s dotfiles .

Spacemacs is just set of dotfiles that is created by other people. Your configuration should be yours and yours only. So in general you can count me as a human that do not like neither Spacemacs nor SpaceVim.

This is one of the reason. Another reason is that I started using Vim years ago (~7 I think) and it just fitted me and I do not see any reason to change it.


Looks awesome, I think I’ll be using some of these plugins for my vim setup. The running repo sql one will fit nicely into my dev workflow.

Do you have an article on tmux too? I use tmux and vim.

1 Like

I do not use TMux since I moved all my “multiplexing” into NeoVim terminals.


You could use this generator
Remove plugins that you think that is useful

This one very much suits into rule:

Do not use other people’s dotfiles.

I just generated one and it is so much full of clutter that I cannot even. The minimal configuration for Vim and NeoVim for Elixir:

git clone ~/.local/share/pack/elixir/start/elixir
touch ~/.config/nvim/init.vim
cat ~/.vimrc <<EOF
let s:config_dir = exists('$XDG_CONFIG_DIR') ? $XDG_CONFIG_DIR : $HOME . '/.config'
let s:data_dir = exists('$XDG_DATA_HOME') ? $XDG_DATA_HOME : $HOME . '/.local/share'

exec 'set runtimepath^='.s:config_dir.'/nvim,'.s:data_dir.'/nvim/site'
exec 'set packpath^='.s:data_dir.'/nvim/site'

syntax on
filetype plugin indent on

set laststatus=2
set wildmenu

runtime init.vim

And everything is there. Anything more should be added only if you know what you are doing.


Just wanted to say thank you. I’ll be digging into this more over the next few days. I recently tried to spruce up my Vim config and get a better workflow going as I realised that I was doing a lot of tasks very mechanically or have got stuck in a rut doing things a certain way that’s less than optimal.

I had a look around for some direction but didn’t find much Elixir specific advice, so your post is very timely and very welcome!


Do you use something to search and replace of multiple files (in a folder or project for example)?

I’m using ag with fzf for searches

I am using Ripgrep with QuickFix window for searching, and in case of project-wide replace I use plugin enmasse. Alternatively I use my own sad.vim.

1 Like

Here’s a divisive question: which plugin management system do you guys prefer?

I honestly can’t care less about “minimal” or “allows you to do anything”. I just want to get in a plugin UI, say “install X and Y” or “delete Z” or “upgrade all with their newest versions” and peace out.

Which one is best suited for such a use case?

I use packager which is based on minpac and is simple and easy enough. But in reality if you want you can just use Git directly via :h pack-add functionality.

1 Like

Nope, I just want the batteries-and-brains-included approach.

Additionally, how do you handle adding a ton of stuff in your .vimrc? Is there a way to separate it into multiple files and load the pieces inside the central config file?

I use

The author has a lot of great plugins, plus the name is plug. How can you not like that?!

What’s nice is you can install and remove plugins really easily but when it comes to updating, you can choose which commits to deny (you get a full changelog of commits for each plugin once the update command finishes running). Also if you do nothing, it just accepts them all (which is what I do 99.9% of the time).


I tried to use something like: args or argdo but it’s slow or hangs, I found this far.vim and I’m already getting to do what I want :slight_smile: but I’ll try vim-enmasse and the sad.vim. Thanks for answer

Anyone know if a good Elixir refactoring solution for Vim? (extract variable, extract function, rename module, rename function, etc.)

1 Like

Check out :h load-plugins and just create your additional files in plugins/ directory in your ~/.vim/~/.config/nvim folder.