Neovim: How to Use init.vim and init.lua Concurrently
Lua configuration support is all the rage in the Neovim community right now. I do see the advantages and welcome the opportunity to dive into Lua.
However, when I add an init.lua
file, Neovim loads this one exclusively and I
lose all of my current configuration. I do not see myself converting my entire
Vim configuration to the new format any time soon. I’m aware of the fallback
option to just wrap any raw VimL
vim.cmd([[
set notimeout
set encoding=utf-8
]])
but given that 100% of my existing configuration is in VimL format, that’s just silly. There must be a better way. And there is. Something that was not apparent to me is the ability to add inline Lua code blocks to a VimL file, effectively doing the inverse. Like so:
lua <<EOF
-- Setup packer
local use = require('packer').use
require('packer').startup(function()
use 'wbthomason/packer.nvim' -- Package manager
use 'neovim/nvim-lspconfig' -- Configurations for Nvim LSP
end)
-- Setup lspconfig
require'lspconfig'.jedi_language_server.setup{}
require'lspconfig'.tsserver.setup{}
EOF
Note the lua <<EOF
and EOF
markers. Like doing inline processing in shell
scripts.
The minimal example above initializes the packer plugin manager and
the Neovim language server configuration plugin. Before this works, you have to
manually install packer, which is just a simple git clone
away.
The lspconfig part tells the nvim-lspconfig plugin to use the Jedi and
TypeScript language servers. These need to be manually installed separately.
Fortunately, all supported language servers are listed here, along
with instructions to install, configure and use them. They could benefit from
being grouped by language, though.
But before you’re doing that, know that I’m using lazy.nvim now, which is infinitely better. In fact, even packer’s original author now uses it in his own dotfiles. Speaking of dotfiles, feel free to get inspired by mine.
While you’re at it, take a look at the suggested lspconfig configuration. You’ll be using most of the power of VSCode in no time.
If you’re like me and don’t just throw everything into one place, you may
want to move this section into a separate file and source it in init.vim
:
" Add Lua configuration
source $HOME/.config/nvim/init.lua.vim