Nuxtstop

For all things nuxt.js

Criando plugins Lua para Neovim - Parte 1

12 0

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/
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Caso essa pasta não exista em seu sistema, crie com

$ mkdir -p ~/.local/share/nvim/site/plugin
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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, {})
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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