Skip to content
outragedline edited this page Oct 28, 2022 · 4 revisions

Neovim

Sobre

A grande dificuldade ao programar no celular é a falta de ferramentas, porém isso não é problema usando o neovim, pois é uma ferramenta muito mais leve, e tão poderosa quanto qualquer IDE

Nesse tutorial você vai aprender o basico sobre neovim e especificamente sobre a configuração que preparei e disponibilizei pra você

O neovim tem um tutorial embutido usando o comando :Tutor, depois de ler essa wiki e conseguir usar o basico do nvim, recomendo seguir o tutorial do :Tutor pra ir treinando

Modos

O vim fuciona com vários modos, onde cada um serve pra uma coisa, e saber usar eles é essencial

Aqui vamos falar sobre os 4 modos principais e alguns truques que podem melhorar sua produtividade

Modo normal

O modo normal é o modo que você vai utilizar como intermediário pra acessar outros modos, navegar pelo código ou usar hotkeys como CTRL ALT s pra salvar e CTRL ALT x pra fechar o neovim

keybidings

Aqui teremos algumas combinações de teclas nativas do vim no modo normal que tornam mais fácil para escrever seus códigos

Teclas ação
h move o cursor pra esquerda
j move o cursor pra baixo
k move o cursor pra cima
l move o cursor pra direita
^ leva o cursor ao início da linha
$ leva o cursor ao final da linha
e leva o cursor ao final da palavra
b leva o cursor ao início da palavra
gg leva o cursor ao início do arquivo
G leva o cursor ao final do arquivo
dd apaga a linha sob o cursor
de apaga até o fim da palavra sob o cursor
d$ apaga da posição do cursor até o fim da linha
d^ apaga da posição do cursor até o inicio da linha
x apaga caractere selecionado
yy copia a linha sob o cursor
ye copia até o fim da palavra sob o cursor
y$ copia da posição do cursor até o fim da linha
y^ copia da posição do cursor até o inicio da linha
p cola a ultima coisa copiada ou deletada
ZZ salvar e sair
u desfaz ultima ação
CTRL+r refaz ultima ação desfeita

você pode usar as teclas HOME e END da caixa de ferramentas no lugar das teclas ^ e $

Coisas copiadas ou deletadas no vim não vão para a clipboard por padrão e só podem ser coladas usando o p dentro do próprio vim

Se quiser colar algo da clipboard no vim é nescessário ter o termux api instalado e a configuração ativa no neovim, caso você tenha feito tudo seguindo o README, tudo que é nescessário já está devidamente instalado e configurado então não há com o que se preocupar

Ocultar linhas

No neovim é possível ocultar várias linhas de código para que ocupem menos espaço na tela, isso é chamado de folding

O modo como as linhas são ocultadas é baseado no foldmethod, nesta configuração as linhas são automaticamente ocultadas com base na indentação

Se quiser saber mais sobre folding, digite o comando :h fold

Folding keybidings

A opção de ocultar as linhas tem vários keybidings próprios, aqui os principais

teclas ação
za alterna entre ocultar e mostrar as linhas de um fold
zR abre todos os folds do arquivo atual

Modo insert

O modo insert é o modo que você vai usar pra escrever seus códigos

É o modo mais simples pois é basicamente um editor de texto, sem muito segredo

Existem várias formas de entrar no modo insert, e saber usar elas pode poupar bastante tempo

Entrando no modo insert

Para entrar no modo insert você só precisa estar no modo normal e digitar uma tecla

tecla ação
i entra no modo insert à esquerda do cursor
a entra no modo insert à direita do cursor
o cria uma linha vazia abaixo do cursor e entra no modo insert
O cria uma linha vazia acima do cursor e entra no modo insert

Pra sair do modo insert e voltar ao normal você só precisa apertar a tecla esc na caixa de ferramentas

Modo visual

O modo visual é basicamente um modo de seleção de texto, é o equivalente a clicar com o mouse e arrastar

As fucionalidades principais desse modo são yank que é equivalente ao copiar, delete e change que são equivalentes a recortar, por que tem 2 funções que fazem a mesma coisa? Não faço ideia, segue o roteiro

Existem 3 variantes do modo visual, cada um com seu uso específico

Entrando no modo visual

Essas são as formas de entrar no modo visual a partir do modo normal

comando modo uso
v visual selecionar um texto
V visual line seleciona linhas inteiras
CTRL+v visual block seleciona um bloco de texto sem precisar selecionar a linha inteira

Para sair do modo visual e cancelar a seleção de texto, aerte ESC

Usos

No modo visual você pode copiar o texto selecionado apertando y, recortar com d ou c, e substituir o texto selecionado pelo texto copiado com p, porem essa ultima não é um comando do vim, e sim um atalho, será falado mais sobre isso mais pra frente

Alguns comandos do modo normal tambem fucionam no modo visual, como o gg e o G

Então se você quiser por exemplo selecionar tudo do arquivo, você so precisa digitar ggVG a partir do modo normal

Modo command

O modo de comandos é o mais complexo, e com mais funções, até porque não há um limite de coisas que ele pode fazer, quanto mais plugins você adicionar, mais funcionalidades ele terá

O modo command é ativado quando vocé digita um :, após o : você pode usar o comando que você quiser em vim script, então vamos ver alguns conceitos e comandos básicos

Comandos básicos

Maior parte das coisas no neovim é feita por comandos, é impossível falar sobre todos, mas aqui vai os principais

comando execução
:w salva um arquivo
:w nome salva um arquivo com um novo nome
:wa salva todos os arquivos abertos, exceto aqueles sem nome ou readonly
:w! força o salvamento do arquivo
:q fecha o neovim, caso tenha mais de um split ou tab, ele fechará o atual, contanto que esteja salvo
:q! fecha o arquivo, split ou tab aberto mesmo que não esteja salvo
:qa fecha tudo que estiver aberto no neovim, só fuciona se tudo estiver salvo
:qa! fecha tudo do neovim sem salvar
:wq salvar e sair do arquivo atual
:wqa salva todos os arquivos e fecha o neovim
:split divide a tela horizontalmente pra que você possa abrir dois arquivos na tela ao mesmo tempo
:vsplit divide a tela verticalmente pra que você possa abrir dois arquivos na tela ao mesmo tempo
:resize +2 aumenta ou dimimui o tamanho do split horizontal, pra aumentar coloque +numero, para diminuir -numero
:vertical resize mesma coisa do outro, só que pra split vertical
:h alguma coisa busca a documentação de qualquer comando do vim ou plugins
:! comando do terminal colocar um ! logo no começo significa que você quer rodar comandos do terminal através do neovim, por exemplo :! pkg install luarocks, isso irá instalar o luarocks como se fosse no terminal comum
:checkhealth checa se está tudo como drveria
:Tutor abre um tutorial introdutorio sobre o nvim

Comandos especiais

pesquisar

Caso você queira encontrar algo no seu código, você pode usar um comando pra pesquisar pela palavra

Esse comando é o mais diferenciado pois é um unico que não usa : no começo

Para pesquisar por algo você só precisa estar no modo normal e digitar /, a partir daí você está pesquisando pela palavra digitada, e toda ocorrência dela

Se você der enter após pesquisar por uma palavra você voltará ao modo normal, porém todas as ocorrências da palavra pesquisada estarão destacadas, e você pode navegar até a próxima ocorrência clicando n

Para cancelar uma pesquisa é só apertar ESC

Para desmarcar as ocorrências da ultima pesquisa você só precisa pesquisar algo aleatório e dar enter, por exemplo /skksla))#)#(3!2(#)$, quase certeza que não tem algo assim no seu código

Encontrar e substituir

Outro comando extremamente útil é o encontrar e substituir

Com ele você procura por todas as ocorrências de uma palavra dentro de um range e substitui por outra palavra que você quiser

Caso eu queira substituir antiga por nova nas linhas 1 a 10, o comando seria assim

:1, 10s/antiga/nova

Porém esse comando só vai substituir a primeira ocorrência da palavra em cada linha, para substituir a palavra toda vez que ela aparecer, você deve adicionar um /g ao final

:1, 10s/antiga/nova/g

Agora todas as palavras antiga serão substiuídas pela palavra nova

Caso você queira substituir todas as palavras de um arwuivo, é só colocar % no range

:%s/antiga/nova/g

Informações adicionais

A lista de comandos é extremamente extensa, mesmo sem nenhum plugin, porém essses são os que você irá precisar mais, nos próximos tópicos veremos mais comandos de personalização, plugins, etc

O modo command tem uma especie de autocomplete, pra ativar você só precisa apertar TAB, a tecla que fica logo abaixo do ESC, e então irá abrir um painel com as possíveis completions

Pra navegar no painel de autocomplete utilize as setas da esquerda e direita

As setas cima e baixo servem pra navegar entre os ultimos comandos que você usou

O caractere % indica o caminho até o arquivo atual, então caso eu esteja editando um arquivo python e escreva :! python % ele irá entender e rodar

TREINE MUITO ESSES COMANDOS E OS DOS OUTROS MODOS, ELES SÃO MUITO IMPORTANTES

Keymaps

É possivel mapear um comando para um keymap como CTRL s, leader gt e coisas do tipo

Você pode ver uma lista de todos os keymaps e pesquisar por algum em especifico usando o comando Telescope keymaps, que está mapeado para leader fk

Leader key

O neovim tem uma tecla especial para keymaps chamada leader key, que por padrão é a tecla \, mas nessa configuração foi remapeada pra tecla space, a barra de espaço

Ou seja, caso tenha algum keymap como leader fk, você só precisar apertar space fk rapidamente

Plugins

No vim, e consequentemente no neovim, é possível instalar plugins que adicionam fucionalidades ao editor, são como as extênsões do vscode e tornam o neovim quase uma ide

Você aprenderá a instalar e configurar plugins no tópico personalização

NvimTree

mais informações

O primeiro a falar é o nvimtree, um explorador de arquivos muito completo e leve

Você pode abrir ou fechar o nvimtree usando o comando :NvimTreeToggle, ou o atalho mapeado CTRL+a

A nvimtree possui vários mappings para usar somente na própria nvimtree

Esta config do neovim está com a configuração padrão da nvintree, então caso queira saber mais sobre a configuração, olhe no github da nvimtree

Mapeamentos

atalho ação
g? com isso você vê todos os comandos da nvimtree, é nescessário apertar os dois botões rapidamente, ou usando a área de texto, aperte novamente pra desativar
enter, o ou 2 cliques abre o arquivo
CTRL+] muda a raiz do diretório, equivalente ao comando cd do termux
CTRL+v abre o arquivo em um split vertical
CTRL+x abre o arquivo em um split horizontal
CTRL+k vê algumas informações do arquivo
a cria um arquivo, colocar um / no final do nome cria um diretório ao invés de arquivo
r renomeia um arquivo mudando seu caminho, logo também serve pra mover um arquivo pra outros diretórios
d apaga um arquivo ou diretório, nescessita confirmação
c copia o caminho de um arquivo
p cola o caminho copiado

Esses são os atalhos principais da nvimtree, é um plugin simples porém poderoso

Se quiser ver os outros use o g?

move.nvim

mais informações

O move.nvim é um plugin simples com uma unica função, mover coisas

No modo normal você pode mover a linha atual pra cima e pra baixo com ALT+k e ALT+j, tambem é possivel mover um caractere pros lados com ALT+h e ALT+l

No modo visual fuciona da mesma forma que no normal, porém voccê pode mover várias linhas ou caracteres ao mesmo tempo

TreeSitter

mais informações O TreeSitter é um plugin que serve pra ter melhor highlighting e indentação pra certas linguagens

Ele fuciona muito bem em algumas, em outras nem tanto

Pra ativar ele é nescessário baixar o pacote com suporte para a linguagem que você quer rodando o comando :TSInstall python usei python como exemplo

Não gostou do highlighting do TreeSitter? É possivel desinstalar usando :TSUninstall python

O TreeSitter também é o responsável por deixar os parenteses coloridos, logo isso também para de fucionar

Para desabilitar o highlighting e/ou indentação sem desativar o resto, você pode rodar o comando :TSDisable highlight ou :TSDisable Indent toda vez que iniciar o neovim, ou adicionar sua linguagem a "highlight_disable_list" e "indent_disable_list" no arquivo ~/.config/nvim/lua/theme/treesitter.lua linha 6 e 7

comment

mais informações

Comment é um plugin que te permite facilmente facilmente comentar ou descomentar linhas em várias linguagens diferentes

Para comentar a linha atual no modo normal, aperte gcc rapidamente

Para comentar várias linhas, selecione no modo visual e aperte gc

Para comentar uma parte da linha, selecione no modo visual e aperte gb

Github copilot

mais informações

O nvim tem suporte ao Github copilot e para ativar você só precisa usar o comando :CopilotAuth, irá aparecer um código de 6 digitos, você copia e da enter, ele irá abrir automaticamente no github onde você só precisa colar seu código lá e ele vai configurar automaticamente

Você pode navegar nas sugestões do copilot usando ALT ] e ALT [, para negar a sugestão é CTRL ]

ToggleTerm

mais informações

O toggleterm serve pra abrir um terminal flutuante

Este plugin pode causar erros, embora seja muito conveniente, caso não queira correr riscos você pode abrir um novo terminal do termux e usar os comandos lá mesmo

Para abrir e fechar o terminal use o atalho mapeado CTRL+t

Telescope

mais informações

O telescope é sem dúvidas um dos plugins mais importantes e úteis, pois ele tem uma infinidade de fucionalidades, todas ligadas a encontrar alguma coisa

Mapeamentos

Se você quiser ver tudo que o telescope pode fazer, digite :Telescope e aperte TAB, é realmente muita coisa

Aqui estão algumas das principais, e mais úteis funções desss poderoso plugin, e alguns atalhos

atalho comando ação
leader+ff :Telescope find_files< CR> busca por arquivos
leader+fg :Telescope live_grep < CR> busca por um texto dentro de todos os arquivos do diretório atual
leader+fb :Telescope buffers < CR> procura por todos os buffers ativos
leader+fh :Telescope help_tags < CR> busca por ajuda e documentação, parecido com o :h
leader+fk :Telescope keymaps < CR> Busca por todos os keymaps do neovim

Saber usar o telescope pode te poupar muito tempo

LSP, autocomplete e formatação

Esse não é um plugin, e sim um conjunto de plugins que fornecem features como autocomplete, formatação de codigo, go to definition, etc

Essa é com certeza a parte mais complicada de se fazer no neovim, porém é uma feature muito importante pra qualquer editor de código

Sobre

O que exatamente é LSP? Basicamente é a abreviação de language server protocol, que é algo que te permite criar e instalar servidores de linguagem, esses servidores de linguagem te proporcionam essas festures tão importantes

Mason

mais informações

O mason é um gerenciador de pacotes relativamente novo criado pro neovim, e com ele você pode instalar LSPs, debug adapters e outras coisas

LSP

O primeiro passo é instalar a lsp do servidor de linguagem que você queira

você só precisa entrar em um arquivo da linguagem e usar o comando :LspInstall, irá aparecer uma lista com todos os servidores disponíveis pra aquele tipo de arquivo

Pesquise qual o melhor ou mais usado pra sua linguagem, recomendo o vscode marketplace pra ver esse tipo de coisa

lsp installer utiliza vários gerenciadores de pacotes, caso a instalação dê erro, pode ser que você não tenha o gerenciador nescessário

Para ver os gerenciadores instalados, use o comando :checkhealth

Após instalar o servidor, ele irá se configurar automaticamente usando o lsp-config

Para desinstalar um servidor use o comando :LspUninstall servidor

Lsp config

mais informações manual de configuração dos lsps

É o plugin responsável por configurar e rodar o lsp ao entrar em um arquivo compatível

Este plugin pode dar este erro ao entrar em um arquivo

Spawning language server with cmd: `lua-language-server` failed. The language server is either not installed, missing from PATH, or not executable.

Esse foi um erro que eu tive ao tentar usar o lsp da linguagem de programação lua, eu demorei bastante pra descobrir como resolver mas é bem fácil

Este erro significa que está faltando um arquivo binário no seu sistema, e por isso não é possivel ativar o lsp

Tudo que eu fiz pra resolver foi instalar o binário que estava faltando

apt install lua-language-server

Caso não fucione com apt, pesquise como instslar o binário informado, e aí dará tudo certo

cmp

O nvim cmp é basicamente aquele pop up que aparece com as sugestões de completion enquanto você escreve, ele possui snippets para facilitar sua vida

Você pode navegar entre as sugestões com as setas Up e Down

Após selecionar o desejado é só apertar enter

Quando uma sugestão está selecionada, ao lado irá aparecer a documentação da função, classe, snippet e coisas do tipo, caso a documentação seja extensa demais, é possivel rolar usando ALT+Up e ALT+Down

É possivel ativar e desativar o cmp com o atalho CTRL+Space, e a sugestão será cancelada, o cmp voltará assim que você começar a escrever de novo, normalmente desativar o cmp é util quando você não quer dar enter sem que a palavra seja completada

null-ls

O null-ls é um plugin que adiciona diagnósticos e formatação ao neovim, essas são fucionalidades do lsp, mas muitas vezes o lsp não tem essas funções

Basicamente, o null-ls é um complemento do lsp

O null-ls só precisa ser configurado caso o seu lsp não tenha suporte a diagnósticos e formatação, você pode testar isso escrevendo algo como print( 1, 2 , 3 ) e apertando CTRL+f, se o código for formatado, seu lsp possui suporte nativo

Se nada acontecer, é nescessário configurar

fucionamento

O null-ls fuciona por meio de binários que você precisa instalar no seu sistema, e depois de instalados precisam ser confifurados manualmente, mas não se assuste, é mais simples do que parece

Porém, caso não se sinta segura pra configurar não tem problema, você vai perder algumas fucionalidades legais mas é algo que dá pra viver sem

Quando ganhar mais experiência tente configurar novamente

Instalando os binários

A linguagem python será utilizada como exemplo

O primeiro passo é pesquisar quais os binários responsáveis por fazer esses serviços para sua linguagem, e então olhar se eles estão disponíveis nos builtins do null-ls

É interessante olhar nod builtins antes de pesquisar, caso você reconheça pelo nome isso pode poupar tempo

Agora que você já sabe quais binários irá precisar, pesquise como instalar eles

No caso do python se usa o autopep8 pra formatação e o flake8 para diagnósticos, então preciso instalar ambos

No caso deles, é possível instalar usando pip, o gerenciador de pacotes do python

pip install autopep8 flake8
Configurando os binários

Após instalar os binários, é nescessário configurar no arquivo do null-ls

Com esse comando é possível abrir ele diretamente, independentemente de onde você estiver

nvim ~/.config/nvim/lua/lsp/null-ls.lua

print do arquivo null-ls

Como visto na imagem acima, tudo que precisei fazer foi escrever dentro da lista sources, **formatting.black, ** para configurar o black como formatador, e **diagnostics.flake8, ** para adicionar os diagnósticos, todos com uma virgula no final, caso contrário dará erro

É o mesmo com todos os binários, agora só falta testar e ver se está fucionando corretamente

Tambem é possível passar argumentos ao configurar o binário, mas isso é algo meio avançado demais

Formatando

Com os binários instalados e configurados, você pode formatar o arquivo atual com o comando

:lua vim.lsp.buf.format()

Ou o atalho CTRL+f

Atalhos Lsp

Atalhos relacionados a ações fornecidas pelo lsp

Todos esses atalhos são usados no modo Normal

Para usar coisas como go to definition é só por o cursor encima da função ou classe, e apertar as telcas mapeadas como atalho

Atalho ação
gd go to definition
gD go to declaration
K hover
gi go to implementation
gl mostra os diagnósticos da linha atual
[d pula pra linha anterior com diagnósticos a serem mostrados
]d pula pra próxima linha com diagnósticos a serem mostrados
leader+q mostra uma lista com todos os diagnósticos do arquivos
CTRL+f formata o código
CTRL+s (modo insert) mostra a assinatura da função ou classe
ca code action, realiza ações como criar um construtor pra uma classe, renomear uma variavel e coisa do tipo

Bufferline

Bufferline é o plugin que te permite ter os buffers abertos na parte de cima da tela, e sendo facilmente acessados por toque ou comandos

É inconveniente escrever um comando só pra trocar de buffer, por isso alguns atalhos estão mapeados

Atalho | comando | acão CTRL+n | :BufferLineCycleNext!< CR>| alterna pro próximo buffer CTRL+p | :BufferLineCyclePrev!< CR>| alterna pro buffer anterior CTRL+d | :bdelete!< CR> | fecha o buffer atual leader+mn | :BufferLineMoveNext< CR> | move o buffer atual pra direita leader+mp | :BufferLineMovePrev< CR> | move o buffer atual pra esquerda leader+se | :BufferLineSortByExtension< CR> | organiza os buffers baseado pela extensão do arquivo leader+sd | :BufferLineSortByDirectory< CR> | organiza os buffers baseado em que diretório ele está

Gitsigns

Gitsigns é um plugin simples que mostra as mudanças feitas no arquivo desde o ultimo commit

Essas mudanças são mostradas pelas cores dos numeros

cores significado
verde linha adicionda
azul mudança na linha
vermelho Algo foi deletedo nessa linha

O gitsigns também possui comandos que te permitem comparar o arquivo do ultimo commit com o arquivo atual

E estão mapeados alguns atalhos para facilitar o uso desses comandos

Atalho Comando ação
leader+gs :Gitsigns show< CR> abre um novo buffer com o arquivo sem alterações desde o ultimo commit
leader+gt :Gitsigns toggle_deleted < CR> mostra no arquivo atual tudo que foi deletado com linhas marcadas em vermelho
leader+gd :Gitsigns diffthis< CR> abre o arquivo sem alterações em um split vertical e marca as alterações

Personalização

Uma das grandes vantagens do neovim é ser completamente personalizável, então aqui você aprenderá o básico, como instalar plugins, mudar o colorscheme, criar seus próprios keymaps, etc

Instalando plugins

mais informações sobre o packer No neovim é possível adicionar qualquer coisa através de plugins, então é importante saber como baixar um

Pra isso iremos precisar de um gerenciador de plugins, um plugin que instala outros plugins, nesse caso usaremos o packer caso você tenha feito tudo conforme este tutorial, ele já instalou assim que o neovim foi aberto pela primeira vez

Normalmente os plugins ficam em repositórios do github, então você só precia por o usuario/repositório

Exemplos:

navarasu/onedark.nvim, sainnhe/sonokai

Esses são dois plugins de colorschemes, caso pesquise por eles verá que são repositórios no github, nada demais

Agora para realmente instalar o plugin, agora que você já sabe o repositório do plugin desejado, você precisa abrir os arquivos plugins.lua, é possivel abrir ele diretamente com o comamdo abaixo

nvim ~/.config/nvim/lua/plugins/plugins.lua

Agora desça o código e você verá o seguinte return packer.startup(function(), 2 linhas abaixo disso é onde você pode instalar o seu plugin

Para instalar é só escrever use "usuario/repositório"(o usurario/repositório precisa estar entre aspas ou o código vai dar erro), salvar e então rodar o comando :PackerInstall, feito isso seu plugin está instalado

Para configurar eu recomendo criar um arquivo específico para o plugin no diretório ~/.config/nvim/lua/plugins/ e então requisitar ele no ~/.config/nvim/lua/plugins/main.lua, isso facilita a manutenção do código

Colorschemes / Temas

Colorschemes é o nome usado pra se referir aos temas do neovim, e existem milhares que você pode usar ou até mesmo criar o seu próprio

Nesta configuração eu já deixei instalado os meus favoritos

  1. onedark.nvim (Configurado como default)
  2. gruvbox

Caso queira outro tema, irá precisar instalar o plugin

Você pode mudar o tema por meio do comando :colorscheme tema, apertando TAB após o colorscheme irão aparecer toodos os temas disponíveis

Mudar o tema por linha de comando é algo temporário, e o tema default voltará da próxima vez que o neovim for aberto

Para mudar o tema default você precisa abrir o arquivo de configuração

nvim ~/.config/nvim/lua/theme/colorscheme.lua

você pode apagar tudo desse arquivo, use os keybidings do vim pra facilitar : ggVGd

Após isso, a forma mais facil de configurar é essa

vim.cmd([[
aqui vão todas as configurações do colorscheme


mesmo que sejam várias linhas
]])

Existe uma forma melhorde configurar o tema, porém exige um pouco de conhecimento de lua

É possivel ter as configurações de vários temas de uma vez no mesmo arquivo, eles não vão interferir um no outro

Para setar um tema como default, adicione isso logo ao final do arquivo

vim.cmd([[colorscheme tema]])

Substitua "tema" pelo nome do tema que você deseja, e toda vez que o neovim for aberto ele estará lá, da forma como foi configurado