DEV Community

Cover image for Configurando NeoVim + Elixir
Iago Effting
Iago Effting

Posted on • Updated on

Configurando NeoVim + Elixir

Introdução

De idas e vindas acabei trabalhando muito tempo com elixir no VS Code. Até então tudo certo. De um tempo para cá, comecei a sentir lentidão no autocomplete e dificuldade de utilizar algumas ferramentas. Isso me levou a fazer essa pergunta no twitter / X.

Trabalhei a alguns anos atrás com VIM e no geral gostava dele, mas achava complexo a configuração e customização. Com isso em mente fui ver como funcionava a configuração do Nvim que muitos comentaram na thread. Fui atras também de um jeito fácil de configurar e encontrei o Astronvim que me interessou bastante. Tendo isso em mãos, iniciei o setup.

Configuração

  • NeoVim
  • AstroNvim
  • Elixir-tools

Instalações

Requisitos

Requisitos Versão
neovim 0.9.5+

NeoVim

A versão estável atual do Nvim é o 0.7.x, porém, Astronvim pede 0.8+. Isso buscando das versões não estáveis. Tendei diretamente pelo repositório unstable e instalar a versão nighty. Porém, me trouxe muitos problemas que não tive paciência para ir em frente. Foi então que me lembrei do gerencias asdf e por ele ficou mais simples

Repositório: https://github.com/richin13/asdf-neovim

asdf plugin add neovim
asdf install neovim 0.10.0
Enter fullscreen mode Exit fullscreen mode

Feito. Nvim instalado. Porém, se você rodar o nvim agora, ele vai receber o erro

No version is set for command nvim
Enter fullscreen mode Exit fullscreen mode

Precisamos definir a versão padrão para a ferramenta. Caso não exista, precisamos criar o arquivo no root do seu usuário. ~/.tool-versions e adicione no conteúdo a ferramenta e a versão

neovim 0.10.0
Enter fullscreen mode Exit fullscreen mode

Com isso, podemos rodar o comando e abrir a ferramenta

nvim
Enter fullscreen mode Exit fullscreen mode

AstroNvim

Astro é uma ferramenta que une extensibilidade com gerenciamento de plugin utilizando o Mason. Ele facilita a adição de novos plugins e o gerenciamento de dependencia e configurações, por isso decidi usar ele.

E tive uma boa impressão. ele é simples de rodar, basta seguir o guia oficial e tudo funciona como deveria.

A configuração é simples

git clone --depth 1 https://github.com/AstroNvim/template ~/.config/nvim # baixa e coloca a configuração no local certo
rm -rf ~/.config/nvim/.git # Remove o .git do que foi clonado
Enter fullscreen mode Exit fullscreen mode

Depois disso, bastou rodar o nvim e ele já saiu funcionando

nvim
Enter fullscreen mode Exit fullscreen mode

Você pode receber o erro que não encontrou o compilador C. Para isso precisa ter as dependêmncias base. No linux temos o pacote essencial.

 sudo apt-get install build-essential 
Enter fullscreen mode Exit fullscreen mode

Depois disso só abrir novamente o nvim e o erro deve ter sumido.

Nvim rodando

Ao abrir, ele começa a instalar as dependências automaticamente. Lindo demais <3

Talvez você tenha problema com a font e icones. Para isso, instale a nerdfonts no link.

Eu instalei a font 0xProto Nerd Font e ficou bom para mim =D

Elixir-tools

Precisei adicionar suporte a linguagem. Para minha surpresa, foi fácil. Existe esse plugin para NeoVim que da suporte a tudo que precisamos do elixir o Elixir-tools

Para isso precisamos acessar a pasta de configuração do nvim, mesmo lugar que fizemos o clone do astro.

cd ~/.config/nvim
Enter fullscreen mode Exit fullscreen mode

Essa é a estrutura das configurações

.nvim/
├─ lua/
│  ├─ plugins/
│  │  ├─ ...
│  ├─ community.lua
│  ├─ lazy_setup.lua
│  ├─ polish.lua
.neoconf.json
.stylua.toml
init.lua
lazy-lock.json
neovim.yml
README.md
selene.toml
Enter fullscreen mode Exit fullscreen mode

De forma visual, fica fácil saber onde adicionar um plugin, não? Criei um novo arquivo dentro de .nvim/lua/plugins/ e o chamei de elixir.lua.

Dentro da documentação do plugin elixir-tools, tem uma seção de configuração usando o lazy.nvim, resolvi usar ele.

{
  "elixir-tools/elixir-tools.nvim",
  version = "*",
  event = { "BufReadPre", "BufNewFile" },
  config = function()
    local elixir = require("elixir")
    local elixirls = require("elixir.elixirls")

    elixir.setup {
      nextls = {enable = true},
      credo = {},
      elixirls = {
        enable = true,
        settings = elixirls.settings {
          dialyzerEnabled = false,
          enableTestLenses = false,
        },
        on_attach = function(client, bufnr)
          vim.keymap.set("n", "<space>fp", ":ElixirFromPipe<cr>", { buffer = true, noremap = true })
          vim.keymap.set("n", "<space>tp", ":ElixirToPipe<cr>", { buffer = true, noremap = true })
          vim.keymap.set("v", "<space>em", ":ElixirExpandMacro<cr>", { buffer = true, noremap = true })
        end,
      }
    }
  end,
  dependencies = {
    "nvim-lua/plenary.nvim",
  },
}
Enter fullscreen mode Exit fullscreen mode

Já de cara da de ver que podemos configurar o que for necessário. Mas deixei ele padrão por hora.

Dentro do arquivo .nvim/lua/plugins/elixir.lua adicionei a configuração para o lazy e um retorno para devolver a configuração

return {
  "elixir-tools/elixir-tools.nvim",
  version = "*",
  event = { "BufReadPre", "BufNewFile" },
  config = function()
    local elixir = require("elixir")
    local elixirls = require("elixir.elixirls")

    elixir.setup {
      nextls = {enable = false},
      credo = {},
      elixirls = {
        enable = true,
        settings = elixirls.settings {
          dialyzerEnabled = false,
          enableTestLenses = true,
        },
        on_attach = function(client, bufnr)
          vim.keymap.set("n", "<space>fp", ":ElixirFromPipe<cr>", { buffer = true, noremap = true })
          vim.keymap.set("n", "<space>tp", ":ElixirToPipe<cr>", { buffer = true, noremap = true })
          vim.keymap.set("v", "<space>em", ":ElixirExpandMacro<cr>", { buffer = true, noremap = true })
        end,
      }
    }
  end,
  dependencies = {
    "nvim-lua/plenary.nvim",
  },
}
Enter fullscreen mode Exit fullscreen mode

feito isso, fechei meu nvim e abri ele diretamente em um arquivo elixir.

nvim some_place/file.ex
Enter fullscreen mode Exit fullscreen mode

Ele começou a perguntar se queria instalar o

  • nextls
  • Credo Language Server
  • ElixirLS

E eu, so aceitei. Feito isso, tudo funcionou bem.

NVim funcionando

Problemas

  • Versão do NeoVim 0,11+ me dava muitos warnings que resolvi voltando para a 0.10 usando asdf
  • Tive problema de permissão também, resolvido mudando a permissão da pasta.

Agradecimentos

A thread teve vários comentários e queria agradecer todos que participaram <3

Top comments (0)