Plugins para Python no Neovim

Pedro Fonseca
5 min readOct 28, 2023

--

Por que eu deveria utilizar o Neovim?

O Neovim, como sua própria descrição afirma, é um fork do Vim com foco em “extensibilidade e usabilidade”. Dessa forma, ele se torna mais do que apenas um editor de texto e, dependendo da customização, pode se tornar uma ferramenta tão poderosa quanto os editores de texto disponíveis hoje em dia.

Não pretendo afirmar ou sustentar a posição de que o Neovim é superior ao VS Code, JetBrains ou qualquer outro tipo de IDE ou editor de código mais simples. Uso ambos (VS Code, PyCharm, GoLand, WebStorm…). A questão é: o Neovim, para mim, é uma terapia quando busco programar algo para estudo ou simplesmente por vontade.

Já precisei usar o Vim quando não tinha memória suficiente para usar o VS Code e um navegador ao programar em React. Foi bem difícil ter que aprender um novo editor, principalmente um que rodava no meu terminal, mas de qualquer forma, isso me ajudou a gostar muito.

Seja para economizar memória, obter mais desempenho ou simplesmente por querer aprender a programar, o Neovim é uma solução maravilhosa.

Requisitos

  • Neovim >= 0.9.0
  • Node v18.18.0 (versão que estou usando)
  • Linux (estou usando Linux Mint e Arch Linux)

Configurando Neovim

Crie uma pasta chamada “nvim” em seu diretório .config. A pasta “.config” está dentro da pasta Home. Você pode acessá-la assim: cd $HOME/.config e, em seguida, mkdir nvim.

Após isso, crie um arquivo chamado “init.lua”. É lá que vamos configurar todas as informações do nosso projeto. Atualmente, o meu “init.lua” está assim:

require("config.default")
require('config.maps')
require('plugins.lspconfig')
require('plugins.completions')
require('plugins.nvim-tree')
require("plugins.packer")
require('plugins.treesitter')

require'nvim-web-devicons'.get_icons()
require'lspconfig'.pyright.setup{}
require("bufferline").setup{}
require('lualine').setup{
options = { theme = 'moonfly', },
}

Esses são os módulos que utilizo para desenvolver em Python. Os primeiros imports antes de pular uma linha são arquivos de configuração que utilizo para o Neovim. Os demais são requisições obrigatórias para os plugins que preciso, como por exemplo o Lualine.

De forma resumida, meus módulos estão organizados assim:

├── init.lua
└── lua
├── config
│ ├── default.lua
│ └── maps.lua
└── plugins
├── completions.lua
├── lspconfig.lua
├── nvim-tree.lua
├── packer.lua
└── treesitter.lua

Tenho uma pasta para configurações padrões chamada ‘config’, que não necessariamente usa plugins, e outra pasta para meus plugins chamada ‘plugins’.

Em meu config/default.lua tenho a seguinte configuração

vim.wo.number = true
vim.g.maplocalleader = ' '
vim.g.loaded_netrw = 1
vim.g.mapleader = ' '
vim.g.loaded_netrwPlugin = 1
vim.g.encoding = "utf8"

vim.o.hlsearch = false
vim.o.mouse = 'a'
vim.o.clipboard = 'unnamedplus'
vim.o.breakindent = true
vim.o.undofile = true
vim.o.ignorecase = true
vim.o.smartcase = true
vim.o.updatetime = 250
vim.o.timeout = true
vim.o.timeoutlen = 300
vim.o.tabstop = 2
vim.o.smartindent = true
vim.o.shiftwidth = 2
vim.o.expandtab = true
vim.o.completeopt = 'menuone,noselect'

vim.o.background = "dark"
vim.o.termguicolors = true

vim.cmd[[colorscheme tokyonight-storm]]

Este arquivo em Lua configura o Neovim com várias preferências e configurações. De forma simples:

  • Ativa a exibição de números nas linhas.
  • Define o local leader como espaço.
  • Carrega configurações básicas de arquivos e navegação.
  • Define a codificação como UTF-8.
  • Configura opções de busca, mouse, clipboard, indentação e tempo de atualização.
  • Define preferências para tabulação, indentação e cores.
  • Aplica o esquema de cores TokyoNight Storm.

Plugins

Antes de instalar qualquer plugin, precisamos instalar o Packer. Este será nosso gerenciador de plugins, é por meio dele que conseguiremos instalar novos plugins, removê-los, atualizá-los, entre outras coisas.

git clone — depth 1 https://github.com/wbthomason/packer.nvim\
~/.local/share/nvim/site/pack/packer/start/packer.nvim

Para usar o nvim-lspconfig é preciso instalar o pyright

npm i -g pyright

vim.cmd [[packadd packer.nvim]]

return require('packer').startup(function(use)
use "folke/tokyonight.nvim"

use 'wbthomason/packer.nvim'

use 'nvim-treesitter/nvim-treesitter'

use 'wakatime/vim-wakatime'

use {'akinsho/bufferline.nvim', tag = "*", requires = 'nvim-tree/nvim-web-devicons'}

use 'neovim/nvim-lspconfig'
use 'hrsh7th/nvim-cmp'
use 'hrsh7th/cmp-nvim-lsp'

use 'nvim-tree/nvim-web-devicons'
use {
'nvim-lualine/lualine.nvim',
requires = { 'kyazdani42/nvim-web-devicons', opt = true }
}
use {
'nvim-tree/nvim-tree.lua',
requires = {'nvim-tree/nvim-web-devicons',},
}
end)

Tokyonight.nvim é um tema de colorização de sintaxe para Neovim.

Packer.nvim é o gerenciador de plugins para Neovim. Ele permite gerenciar todos os nossos plugins com facilidade.

Nvim-treesitter é um plugin que fornece análise sintática para uma ampla variedade de idiomas. Ele permite que visualizemos a estrutura de um arquivo de código em uma árvore.

Vim-wakatime permite rastreio do seu tempo de codificação com o WakaTime.

Bufferline.nvim fornece uma barra de guias para Neovim. Ele permite que você visualize rapidamente todos os seus buffers abertos, o que pode ser muito útil para a navegação entre arquivos.

vim-lspconfig fornece uma interface para os servidores de linguagem (LSP) do Neovim. Ele permite que seja configurado e use servidores de linguagem para uma ampla variedade de idiomas.

Nvim-cmp possui um sistema de preenchimento de código (o equivalente ao IntelliSense da Microsoft)para Neovim. Ele permite que você preencha código automaticamente, o que pode economizar muito tempo.

Cmp-nvim-lsp fornece integração entre Nvim-cmp e Nvim-lspconfig. Ele permite que você use Nvim-cmp para preencher código sugerido pelo servidor de linguagem.

Nvim-web-devicons inclui ícones para arquivos e diretórios.

Lualine.nvim é um plugin que fornece um statusline para Neovim. Ele permite que você personalize o statusline de acordo com as suas preferências.

Nvim-tree.nvim AKA Barra de navegação de arquivos. Permite que você visualize e navegue rapidamente pelos seus arquivos e diretórios.

Após seguir esses passos, basta abrir o neovim e digitar o seguinte comando :PackerInstall , com isso todos os plugins serão instalados e prontos para ser usados.

--

--

Pedro Fonseca

Um iniciante em desenvolvimento web que ama o que faz. “Prefiro o Paraíso”, São Felipe Néri — https://github.com/peidrao/