
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.cmdpara 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 PackerCompilePackerLoad - Carrega o plugin opt imediatamente
    Alguns plugins podem ser instalados na pasta
optem~/.local/share/nvim/site/pack/packer/optem vez destartno 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/nvime 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-telescopepossui uma dependência que é onvim-plenarypor isso usamos as próprias configurações dopacker.nvimpara 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")