Olá novamente! Neste artigo continuo com a configuração do Neovim usando Lua. Se você perdeu, clique aqui para ver o antigo anterior. Sem ele, não vai ser possível entender este texto que se segue.
Pequenas substituições
Pouco tempo após publicar o artigo anterior, fiquei sabendo (valeu, Sérgio Araújo!) que a extensão usada para facilitar a instalação de servidores de linguagem, o Neovim LSP Installer, foi aposentado. O sucessor dele é o Mason, que basicamente possui as mesmas ferramentas. Os nomes dos comandos mudam, mas a transição é suave: na superfície, apenas o nome e uma melhor apresentação nos diálogos. O que realmente muda é a parte interna, onde, segundo o desenvolvedor, está mais fácil para criar funcionalidades e fazer testes.
Para fazer a troca, basta alterar as linhas onde o LSP Installer é citado:
packer.startup(function()
-- use("williamboman/nvim-lsp-installer")
use("williamboman/mason.nvim")
end)
-- LSP Installer
require("mason").setup()
Após isso rode o comando :PackerSync
para e reinicie o Neovim para aplicar as alterações.
Módulos
Separação do arquivo de configuração em módulos
Propositalmente, fiz toda a configuração em Lua em apenas um arquivo no artigo anterior. Isso foi feito para facilitar a compreensão de como diferentes partes da configuração trabalham em conjunto. É claro que você pode manter assim, se quiser. Mas, se você precisa usar muitas extensões, trabalhar em um único arquivo vai se tornar um empecilho.
A organização de diretórios e arquivos que uso é a seguinte:
lua
├── configs
│ ├── completion.lua
│ ├── diagnostics.lua
│ ├── formatting.lua
│ ├── highlighting.lua
│ ├── keymaps.lua
│ ├── languages.lua
│ ├── options.lua
│ ├── plugins.lua
│ └── theming.lua
└── init.lua
Basicamente é uma pasta chamada configs/
, com diversos arquivos *.lua
dentro. Eles foram nomeados de acordo com suas respectivas funções. Todas as configurações de tema estão em theming.lua
e as opções do editor, em options.lua
, por exemplo. A minha categorização foi bem simples. Existem pessoas que separam ainda mais, por conta da complexidade de suas configurações. Fique a vontade para fazer a sua.
Para separar o arquivo único em módulos, não há segredo. No meu caso, apenas utilizei os comentários que havia colocado como separadores no arquivo como guias. Cada comentário desses, um arquivo.
Para ficar mais claro, eis um exemplo:
---------------------------------
-- Options
---------------------------------
local set = vim.opt
set.background = "dark"
set.clipboard = "unnamedplus"
---------------------------------
-- Plugins
---------------------------------
local packer = require("packer")
vim.cmd([[packadd packer.nvim]])
packer.startup(function()
use("hrsh7th/cmp-buffer")
use("hrsh7th/cmp-cmdline")
...
end)
Usada a estrutura acima, o que se segue após o comentário -- Options
será colocado no arquivo configs/options.lua
, o que vem abaixo do comentário -- Plugins
no arquivo configs/plugins.lua
, e assim por diante.
Arquivo de índice
A linguagem Lua usa arquivos init.lua
como índice, de forma semelhante ao index.html
no HTML ou main.rs
em Rust. O nosso init.lua
, que antes continha toda a configuração, agora apenas fará referência dos arquivos. Para mencioná-los no arquivo, basta usar a função require()
e mencionar o arquivo usando o formato <diretório>.<nome-do-arquivo>
:
require("configs.options")
require("configs.plugins")
require("configs.highlighting")
require("configs.theming")
require("configs.completion")
require("configs.diagnostics")
require("configs.languages")
require("configs.formatting")
require("configs.keymaps")
Onde colocar estes arquivos
Para que esses arquivos tenham efeito, basta colocá-los na pasta ~/.config/nvim
. Estando sem erros, tudo irá funcionar ao reiniciar o Neovim. Mas se você é como eu, e prefere deixar tudo versionado em um repositório GIT, recomendo que crie links simbólicos para o arquivo init.lua
e o diretório lua
dentro da pasta ~/.config/nvim
. Para criá-los, basta fazer estes comandos no terminal:
$ cd ~/.config/nvim/
$ ln -sf ~/.dotfiles/editors/nvim/init.lua .
$ ln -sf ~/.dotfiles/editors/nvim/lua .
Ao usar o comando ls -l
, você verá algo como isto:
lrwxrwxrwx 48 user 22 out 18:50 init.lua -> /home/user/.dotfiles/editors/nvim/init.lua
lrwxrwxrwx 43 user 20 out 20:21 lua -> /home/user/.dotfiles/editors/nvim/lua
Note que .dotfiles/editors/nvim
é apenas o local onde eu guardo os meus arquivos, logo, isto irá diferir no seu caso. Com isso, você não precisará repetir toda a configuração do zero novamente e poderá usar os mesmos arquivos em outras máquinas.
Acredito que com estas modificações, você terá uma boa estrutura para configurar o seu Neovim e extendê-lo para atender às suas necessidades.
Se quiser conferir o código completo, com todas as modificações que fiz, deixei o link para o meu repositório de .dotfiles
abaixo. Neste repositório também está incluso o antigo init.lua
feito no artigo anterior para conferência. Ele foi renomeado para init.lua.old
.
Até a próxima!