Como migrar o init.vim para a linguagem lua – Parte 2

Olá! Continuando a série Como migrar o init.vim para a linguagem lua – Parte 2, no bit de hoje vamos à configuração do neovim utilizando a linguagem lua. Se você não acompanhou a parte 1, sem dúvida seria uma boa ideia seguir este link para poder preparar seu ambiente, e voltar aqui quando tiver tudo concluído.

init.lua

Como vimos no post anterior, o arquivo init.lua é o ponto de partida para a sua configuração. Com a finalidade de evitar que todas as configurações do neovim fiquem em um só arquivo, vamos separar as configurações em diversos arquivos a fim de facilitar a manutenção.

Abra o arquivo init.lua que criamos no post anterior com o comando nvim ~/.config/nvim/init.lua, e adicione a seguinte linha:

require("fsg.options")

Lembrando que fsg é o nome da pasta que foi criada dentro da pasta lua, no diretório ~/.config/nvim. Caso você tenha criado a pasta com outro nome, faça a substituição no código acima.

Salve e feche o arquivo. Abra novamente o terminal e crie o options.lua que referenciamos no código acima. Para tal, execute o comando no terminal:
touch ~/.config/nvim/lua/fsg/options.lua

Por fim, abra o arquivo options.lua para enfim iniciarmos a inclusão das opções genéricas do neovim.
nvim ~/.config/nvim/lua/fsg/options.lua

Options

Dentro do arquivo options.lua, vamos adicionar as opções genéricas do editor, tais como: exibir os números das linhas, números de linha relativos, entre muitas outras opções. Em resumo, estaremos adicionando algumas funcionalidades que não vem habilitadas por padrão, ou opções cujo valor padrão não é tão útil:

--[[
Basic neovim configs
--]]

local g = vim.g
local o = vim.opt

g.mapleader = ' '
g.maplocalleader = ' '
o.completeopt = "menu,menuone,noselect"
o.confirm = false
o.formatoptions = "jcroqlnt"
o.swapfile = false
o.laststatus = 2
o.encoding = "utf-8"
o.showmatch = true
o.ignorecase = true
o.smartcase = true
o.incsearch = true
o.clipboard = "unnamedplus"
o.list = true
o.listchars:append "tab:» ,space:·,trail:·,eol:¬"
o.number = true
o.smarttab = true
o.tabstop = 2
o.shiftwidth = 2
o.expandtab = true
o.hlsearch = false
o.wrap = false
o.scrolloff = 3
o.updatetime = 50
o.hidden = true
o.signcolumn = "yes"
o.cursorline = true
o.mouse:append "a"
o.shortmess:append({ W = true, I = true, c = true, s = true, C = true })
o.relativenumber = true
o.splitbelow = true
o.splitright = true
o.showmode = false
o.termguicolors = true
g.loaded_perl_provider = 0
g.loaded_ruby_provider = 0
g.loaded_netrw = 1
g.loaded_netrwPlugin = 1
Ver mais

As opções acima são as que eu utilizo no meu dia-a-dia, razão pela qual as considero mais úteis. Vou explicar abaixo as mais importantes:

mapleader e maplocalleader

O neovim usa uma combinação de teclas para executar comandos. Muitos desses comandos são precedidos pela tecla leader, que vem configurada na tecla \. Alguns layouts de teclado possuem a tecla \ no dedo mínimo da mão esquerda, de tal forma que pode ser cansativo acionar esta tecla repetidas vezes.

Neste código estamos remapeando a tecla leader para a tecla espaço, por vezes mais conveniente.

confirm

O neovim não vai pedir pra você salvar um arquivo quando você tentar fechar um documento com modificações. Ele ainda vai continuar a exibir uma mensagem de erro informando que o arquivo foi modificado no momento em que tentar fechá-lo.

formatoptions

Esta opção serve para configurar o comportamento da formatação de código do neovim. Cada letra da string tem um significado específico, que pode ser consultado na documentação.

swapfile

Quando você abre um arquivo para edição o neovim automaticamente cria um arquivo swap para controlar edição concorrente, entre outros controles internos.

laststatus

Controlar em quais casos a última janela deve exibir a barra de status padrão do neovim.

showmatch

Quando você deixar o cursor sobre um ( [ { o neovim automaticamente vai destacar o } ] ) correspondente.

ignorecase, smartcase, incsearch

Estas são três opções relacionadas à pesquisa de texto dentro do arquivo. O ignorecase serve para que a pesquisa ignore maiusculas e minúsculas mas, de tal forma que o smartcase permite que você informe alguma letra em maiuscula na pesquisa para torná-la case sensitive. Finalmente, o incsearch refere-se à pesquisa incremental.

list e listchars

Eu criei o hábito de deixar os caracteres de controle (tab, espaços, enter, etc) sempre visíveis, pois eu tenho TOC e não gosto de caracteres sobrando no final das linhas 😅.

number e relativenumber

A opção number serve para exibir os números das linhas, já o relativenumber serve para exibir os números das linhas relativas à linha que se encontra o cursor, e por consequência, serve para facilitar a movimentação vertical dentro dos arquivos.

Em resumo, as opções acima são as mais impactantes no trabalho de forma geral, mas se você tiver curiosidade, pode consultar as demais opções na documentação oficial.

Sempre que você alterar o arquivo options.lua, lembre-se de fechar o neovim e abri-lo novamente, para que as alterações tenham efeito.

Por fim, gostaria de salientar que as opções acima são uma preferência pessoal e certamente vale a pena você experimentar diferentes valores que se adequem à sua realidade.

Conclusão

Neste momento temos um editor básico com “poucas” funcionalidades. Nas próximas postagens da série “Como migrar o init.vim para a linguagem lua”, vamos espandir ainda mais a configuração atual trazendo mais funcionalidades gradativamente.

Siga na parte 3.

Deixe um comentário