Published July 01, 2026
I've been a vim user for a long time. It was never my primary editor - I still tend to prefer a GUI - but it was my
go-to when working from the command line. I've tried nano and emacs but for some reason, I've always preferred
vim. Last year I was introduced to neovim and I saw right away that it was a huge improvement
over base vim but it still had a pretty steep learning curve. A couple of weeks ago I was introduced to
LazyVim and it is so much better.
Under the hood, LazyVim is just neovim. It's the same editor. What LazyVim gives you is a plugin manager and a base
set of plugins that makes it much easier to configure. I have also found that the documentation for it tends to be
simpler to understand making using it so much easier. I currently have my setup configured to use ruff for linting and
formatting as well as the based PyRight LSP installed. (I am, after all, a Python developer.) I've also added a couple
of custom key-maps:
vim.keymap.set("i", "qw", "", { noremap = true, silent = true }) -- use qw to exit from interactive mode
vim.keymap.set("n", "jj", ":%!jq ", { noremap = true, silent = true }) -- Use "jj" to format a JSON file.
The first one lets me use qw to exit interactive mode (and wasn't it just so much fun typing that in?) which is
something useful because I will connect to my desktop from my iPad to do some things but the iPad's Magic Keyboard
doesn't have an ESC key so I need to have some way to actually control the editor while I'm working.
The second one is a shortcut for formatting a JSON file. If I type jj in normal mode it will pass the entire buffer to
jq and update the buffer contents with the response. Since I deal with a lot of JSON files in my day to day this is a
huge help. Very often I get files that aren't formatted and being able to quickly load them in and format them makes my
life much easier.
I'm sure that as I go along I will find more shortcuts and other customizations I want to add. As I'm typing this, the
markdown linter is yelling at me for line lengths that are shorter than I would like (it's set to 80 and I prefer 120).
That's easy to handle in free text but not so much in a code block so I'll need to figure out just how to configure that
properly. Overall, I've been very pleased with what I've seen from LazyVim and would recommend you take a look at it if
you are a vim user.
I was able to fix the markdown issue after some searching. LazyVim is using markdownlint-cli for the linting and
formatting so it was a matter of configuring it to look in the right place for a config file. I added this:
-- ~/.config/nvim/lua/plugins/markdown.lua
return {
{
"mfussenegger/nvim-lint",
opts = {
linters = {
["markdownlint-cli2"] = {
args = { "--config", vim.fn.expand("$HOME/.markdownlint.json"), "--" },
},
},
},
},
{
"stevearc/conform.nvim",
opts = {
formatters = {
["markdownlint-cli2"] = {
args = { "--config", vim.fn.expand("$HOME/.markdownlint.json"), "--fix", "$FILENAME" },
},
},
},
},
}
and put this config file in my home directory:
{
"MD013": {
"line_length": 120,
"tables": false,
"code_blocks": false
},
"MD041": false,
"MD054": {
"inline": true,
"url_inline": false,
"collapsed": false
}
}
Once I did that it stopped yelling at me for things I don't care about. The bonus is that I enabled the formatter so it handles the line length issue automatically.