Criando plugins Lua para Neovim - Parte 1
Uma série mostrando um passo a passo na criação de plugins Lua para o Neovim
Desde que migrei para o Neovim em 2019, depois passar 8 anos usando vim com seus plugins fantásticos, comecei a descobrir as motivações que levaram os core devs a criar esse fork.
Podemos ficar um bom tempo aqui falando sobre elas (e você pode ver uma palestra muito interessante sobre clicando aqui), mas o intuito desde texto é apenas destacar uma delas, e a que eu considero uma das mais importantes: Lua
Quando você instala o Neovim hoje, a linguagem Lua, ou mais especificamente o LuaJIT, uma versão otimizada da linguagem está inserida no core e você consegue usá-la diretamente num vimscript ou chamando um arquivo lua diretamente. Mas como isso acontece?
Esse texto vai fazer parte de uma série onde vou mostrar como é possível criar seu primeiro plugin para o Neovim usando puramente Lua. Primeiro vamos voltar um pouco e mostrar a estrutura de um plugin convencional para o Vim:
~/seu-plugin/
|--plugin/
|--ftplugin/
|--after/
|--autoload/
Para nossa série, iremos focar na pasta plugin
por enquanto.
A pasta plugin
é usada como ponto de entrada no carregamento do vim. Lá é o lugar onde irão viver os plugins globais. Guarde essa informação pois ela vai ser importante na criação do nosso plugin.
Criando nosso hello-world.nvim plugin
TL;DR : Código para o plugin da primeira parte aqui
Como não utilizaremos de nenhum gerenciador de plugins nessa série, vamos facilitar um pouco o carregamento do mesmo e iremos criar os arquivos diretamente no runtimepath do neovim, mais precisamente em
~/.local/share/nvim/site/plugin
Caso essa pasta não exista em seu sistema, crie com
$ mkdir -p ~/.local/share/nvim/site/plugin
Nosso plugin irá utilizar a versão 0.7 (stable até o momento) do neovim.
Dentro da pasta plugin crie a pasta hello-world.nvim
e a subpasta plugin
.
$ mkdir -p hello-world.nvim/plugin
Desde a versão 0.6, podemos executar scripts lua diretamente da pasta plugin
. Quando falamos no início do post sobre essa pasta e o valor especial que ela tem, estamos falando justamente sobre o ponto de partida do plugin. Se o seu plugin precisa ser carregado toda vez que o neovim abre, o código do seu projeto precisa ser inicializado ou feito diretamente na pasta plugin
.
Dentro da pasta, crie o arquivo hello-world.lua
e digite:
vim.api.nvim_create_user_command("HelloWorld", function() print("hello world lua!") end, {})
Podemos ver o uso do vim.cmd
, uma ponte entre lua e a chamada da função ou de um comando vimscript. Iremos explicar mais exemplos dele e outras APIs, como o vim.api
, a mais importante delas.
Agora você pode reiniciar o editor e testar o novo plugin. Depois de fechar e abrir, digite:
:HelloWorld
e poderá ver no prompt de comando a mensagem
hello world lua!
Conclusão
Esta é só a ponta do iceberg do que podemos fazer com Lua no neovim hoje. Nos próximos posts da série iremos abordar como criar floating windows, configurar seu Neovim para usar o LSP nativo (e fugir daquele plugin javascript que você deseja tanto) e no fim da série vou explicar como migrar seu vimfiles totalmente para lua usando o máximo de plugins puramente feitos em lua no dia-a-dia (sim, isso já é possível!)
Aguardem os próximos posts e não esqueçam de seguir nossas redes
Links Úteis
Para ouvir