DEV Community

Cover image for Configurando NeoVim + Elixir
Iago Effting
Iago Effting

Posted on • Edited on

4

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

⚠ Uma atualização no AstroLSP está quebrando o template acima. Para resolver isso simplesmente substitui pela configuração da doc. Caso você tenha feito alguma alteração, vai precisar fazer um de para =D

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.

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

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

Top comments (0)

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay