Esse é o terceiro episódio da série Tudo sobre Neovim com Lua se você não leu os anteriores, segue os links:
Antes de mais nada, vamos já organizar nossos arquivos e já definir todas as configurações(baseadas na minhas que uso diariamente).
O arquivo lua/tools.lua
foi só de exemplo, então já podemos removê-lo e o arquivo lua/settings.lua
vamos pôr dentro de um diretório de nome configs/
que iremos criar para ficar mais organizado.
Limpe seu init.lua
antes para não exibir erros:
cd ~/.config/nvim
cat /dev/null > init.lua
Agora vamos preparar o ambiente
rm lua/tools.lua
mkdir -p lua/configs
mv lua/settings.lua lua/configs/
Agora abra o init.lua
e insira esse conteúdo:
require("configs.settings")
Você também poderia usar assim:
require("configs/settings")
Agora utilize meu settings.lua
ou modifique do jeito que quiser:
nvim lua/configs/settings.lua
vim.cmd([[ set encoding=utf8 ]])
vim.cmd([[ set nu! ]])
vim.cmd([[ set mouse=a ]])
vim.cmd([[ set wildmenu ]])
vim.cmd([[ set confirm ]])
vim.cmd([[ set incsearch ]])
vim.cmd([[ set title ]])
vim.cmd([[ set t_Co=256 ]])
vim.cmd([[ set shiftwidth=2 ]])
vim.cmd([[ set softtabstop=2 ]])
vim.cmd([[ set expandtab ]])
vim.cmd([[ set shiftwidth=2 ]])
vim.cmd([[ set softtabstop=2 ]])
vim.cmd([[ set expandtab ]])
vim.cmd([[ set guicursor= ]])
vim.cmd([[ set cursorline ]])
vim.cmd([[ syntax on ]])
Observação: Você também pode usar um único
vim.cmd
para executar todas as configurações, mas isso não influencia no desempenho.
A maioria dessas configurações para quem utiliza Vim já sabem do que se trata, se você não souber veja esse vídeo . Depois feche e abra novamente seu Neovim para ver as alterações, vamos alterar só mais 3 linhas desse arquivo quando instalarmos um tema de cores!
ATUALIZAÇÃO - LEIA ISSO: Quando algum plugin deseja a versão mais recente e o repositório do seu sistema operacional ainda não possui. Para isso, instale veja o artigo abaixo de COMO COMPILAR O NEOVIM DO ZERO:
O packer.nvim é um plugin que instala plugins! Ele é similar a plugins como o vim-plug e o Vundle que são usados no Vim.
O diferencial dele é que foi totalmente escrito em Lua além de utilizar recursos do LuaJIT para compilar e possui recursos de atualização de plugins, remoção, interfaces UI mais precisas e bem detalhadas. Para todos os recursos dele veja o repositório .
Ele instala plugins escritos tanto em Lua quanto em VimScript e roda normalmente!
Para instalarmos, basta rodar esse comando:
Observação: Você precisa ter o Git instalado.
Para sistemas Unix e GNU/Linux
git clone --depth 1 https://github.com/wbthomason/packer.nvim\
~/.local/share/nvim/site/pack/packer/start/packer.nvim
Copie e cole no seu terminal e pressione [ENTER]
Após clonar agora vamos criar um novo diretório dentro de lua/
e vamos criar dois novos arquivos com os conteúdos que iremos indicar.
Criar o sub diretório:
mkdir -p lua/plugins
Criar e abrir o arquivo que ficará as instalações do packer
:
nvim lua/plugins/plugins.lua
E insira esse conteúdo dentro:
vim.cmd [[packadd packer.nvim]]
return require('packer').startup(function()
use 'wbthomason/packer.nvim'
use 'terroo/vim-simple-emoji'
use 'navarasu/onedark.nvim'
end)
A função use
determina qual plugins serão usados/manipulados .
Note que o packer.nvim manipula a ele mesmo e aproveitamos já para iniciá-lo instalando dois novos plugins:
O packer.nvim possui os seguintes comandos:
:PackerCompile
- Gera o arquivo compilado em: ~/.config/nvim/plugins/packer_compiled.lua
(Note que é um diretório plugins na raíz do nvim
e não é o dentro do diretório lua/
)PackerClean
- Remove todos os plugins desativados ou não usadosPackerInstall
- Instala ou Limpa os plugins ausentesPackerUpdate
- Limpa, atualiza e instala os pluginsPackerSync
- Mesmo que rodar PackerUpdate
e, em seguida PackerCompile
PackerLoad
- Carrega o plugin opt
imediatamente
Alguns plugins podem ser instalados na pasta
opt
em~/.local/share/nvim/site/pack/packer/opt
em vez destart
no mesmo caminho. Para isso precisa informar a tabela{ source = opt }
para a funçãouse
.
Agora basta abrir seu init.lua
na raíz do diretório de configuração do seu Neovim e adicionar essa linha:
require("configs.settings")
require("plugins.plugins") -- Para ler o packer.nvim
Agora feche e abra o init.lua
novamente e rode o comando:
:PackerInstall
Ele grava os arquivos no diretório:
~/.local/share/nvim
e os plugins ficam no subdiretório:site/pack/packer/start
.
E assim que terminar rode: :PackerCompile
. Você pode automatizar o :PackerCompile
para toda vez que houver novas instalações, se quiser adicione essa linha ao seu settings.lua
:
vim.cmd([[
augroup packer_user_config
autocmd!
autocmd BufWritePost plugins.lua source <afile> | PackerCompile
augroup end
]])
Ele irá instalar os plugins e já podemos utilizá-los! Para ativar o tema de cores abra o arquivo: nvim lua/configs/settings.lua
e adicione essas 3 linhas ao final:
vim.cmd([[ set bg=dark ]])
vim.cmd([[ set termguicolors ]])
vim.cmd([[ colorscheme onedark ]])
Ao fechar abra qualquer arquivo(Ex.:
nvim main.cpp
) e note um visual mais agradável! 😃
Se quiser um fundo ainda mais escuro altere a linha em settings.lua
que tem esse conteúdo: vim.cmd([[ colorscheme onedark ]])
por esse:
vim.cmd([[
let g:onedark_style = 'darker'
colorscheme onedark
]])
Para mais dicas de “sub-temas” do onedark.nvim(além do darker) consulte o repositório.
Para usar o vim-simple-emoji veja as dicas no repositório.
O Telescope.nvim é o que há de mais moderno, ele é uma melhor alternativa ao fzf.
Possui uma interface moderna e serve para: Localizar, filtrar, visualizar, selecionar e abrir arquivos de forma simples e rápida. Também foi escrito totalmente em Lua.
Para instalá-lo, adicione essa linha ao arquivo: plugins/plugins.lua
use {
'nvim-telescope/telescope.nvim',
requires = { {'nvim-lua/plenary.nvim'} }
}
Note que o
nvim-telescope
possui uma dependência que é onvim-plenary
por isso usamos as próprias configurações dopacker.nvim
para isso!
As novas configurações do plugins.lua
ficarão assim:
vim.cmd [[packadd packer.nvim]]
return require('packer').startup(function()
use 'wbthomason/packer.nvim'
use 'terroo/vim-simple-emoji'
use 'navarasu/onedark.nvim'
use {
'nvim-telescope/telescope.nvim',
requires = { {'nvim-lua/plenary.nvim'} }
}
end)
Feche e abra o Neovim e rode o comando: :PackerInstall
. Após fechar e abrir novamente rode o comando:
:Telescope
Será aberta uma “janela” no combo de baixo você pode digitar o nome do arquivo de deseja manipular, para mais detalhes veja o repositório .
Veja abaixo a saída do Telescope:
Para finalizar esse episódio vou deixar o arquivo de mapeamentos que eu utilizo no dia-a-dia. Crie uma arquivo:
vim lua/configs/mappings.lua
E insira esse conteúdo dentro:
-- Sair com 'q' , se usar gravação de macros altere para <C-q> → Ctrl + q
vim.cmd([[ map q :q<CR> ]])
-- Para Salvar com 'Ctrl + S' nos modos: Normal, Inserção e Visual
-- Precisa adicionar a linha: stty -ixon , ao seu ~/.bashrc
vim.cmd([[ nnoremap <C-s> :w<CR> ]])
vim.cmd([[ inoremap <C-s> <Esc>:w<CR>l ]])
vim.cmd([[ vnoremap <C-s> <Esc>:w<CR> ]])
-- Selecionar tudo com 'Ctrl + A'
vim.cmd([[ map <C-a> ggVG ]])
-- BASH - Auto preenche arquivos .sh que não existirem com a SheBang
vim.cmd([[ autocmd BufNewFile *.sh :call append(0, '#!/usr/bin/env bash') ]])
-- Se não existir o arquivo C++ de extensão .cpp ele preenche da forma abaixo
-- altere para sua(s) linguagens preferidas
vim.cmd([[
function! AutoCpp()
call append(0, '#include <iostream>')
call append(1, '')
call append(2, 'int main( int argc , char **argv ){')
call append(3, " std::cout << \"Olá, Mundo!\" << '\\n';")
call append(4, ' return 0;')
call append(5, '}')
call cursor(4, 17)
endfunction
autocmd BufNewFile *.cpp :call AutoCpp()
]])
Leia os comentários e altere da forma que desejar e em seguida não esqueça de chamá-lo no seu init.lua
require("configs.mappings")