Erik Zaadi

The tales of a developer with passion for dad jokes

Onboarding vim'ers

Vim FTW

(Neo)Vim often seems daunting for people to start to work on.

The basic out of the box experience with Vim isn’t very vi improved I’m afraid.

But then they see me vim’in, they cravin'

Being one of the cool kids with vim, I’m often asked how people can get started with vim without all the classic exiting vim memes.

A new hope arises

Recently, I had a chad at work ask me to get him started with vim!

YAAY a new incoming convert I thought!

Initial attempt

Having that my dotFiles can be ahem a bit over-engineered, I naively told him to try the following route:

  1. Add a vim bindings plugin to his VsCode
  2. Install SpaceVim for a quickstart
  3. Get used to stuff
  4. Roll his own config like a boss

The first step was fine, then we got to SpaceVim.

My days, after he showed me it (and it took a couple of seconds to load), I was instantly regretful of my actions.

I admit that I might be extremely opinionated about my vim defaults, but this experience with SpaceVim caused the exact opposite of what I wanted to achieve!

To be frank (I’d have to change my name), it backfired and the chad postponed his vim enlightenment!

THE HORROR!!1

So, going forward, I’m creating a simple 4 STEPS TO SUCCESS LADDER for on-boarding vim’ers:

  1. Vim bindings in whatever blasphemy they call IDE
  2. Vimium
  3. UBER simple native vim configuration (just syntax highlight and spell check for git commits and markdown):
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
    " be iMproved, required
    set nocompatible

    autocmd FileType markdown setlocal spell
    autocmd FileType gitcommit setlocal spell

    hi Normal guibg=NONE ctermbg=NONE
    hi Pmenu guibg=NONE ctermbg=NONE
    filetype plugin indent on
    if !exists("g:syntax_on")
        syntax enable
    endif
  1. Basic NeoVim config which allows simple code navigation and completion
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# bootstrap
mkdir -p ~/.config/nvim
curl -s \
    https://github.com/erikzaadi/dotFiles/raw/refs/heads/master/nvim/beginner.lua \
    > ~/.config/nvim/init.lua
# Dependencies
brew install hashicorp/tap/terraform-ls neovim rg tflint fnm golang
if [[ ! $(which npm )]]; then
    fnm install 22
fi
npm i -g sql-language-server yaml-language-server \
    vscode-langservers-extracted dockerfile-language-server-nodejs \
    bash-language-server typescript
pip install neovim ruff
go install golang.org/x/tools/gopls@latest
# Pre-install all packages
nvim --headless "+Lazy! sync" +qa
nvim --headless -c 'UpdateRemotePlugins | TSUpdateSync | qa'

Try it out!

Share on: