-
Notifications
You must be signed in to change notification settings - Fork 0
Neovim
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
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
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
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
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
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 |
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
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
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
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
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
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
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 |
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
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
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
É 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
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
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
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
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?
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
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 é 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
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 ]
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
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
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
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
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
O mason é um gerenciador de pacotes relativamente novo criado pro neovim, e com ele você pode instalar LSPs, debug adapters e outras coisas
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
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
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
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
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
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
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
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
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 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 é 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 é 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 |
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
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 é 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
- onedark.nvim (Configurado como default)
- 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