dois:pontos

Neovim no mundo da Lua - parte II

2 de dezembro de 2022 - 4 min

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!

Links

Apoie este blog

Se este artigo te ajudou de alguma forma, considere fazer uma doação. Isto vai me ajudar a criar mais conteúdos como este!
Clique aqui!

Comentários

Elves Sousa © 2023