Aprenda a usar o NeoVim com terminal integrado
Hoje eu quero compartilhar com você uma dica de um plugin que eu acho super bacana. Ele permite que você tenha, no NeoVim, um terminal integrado semelhante ao VSCode. É um plugim escrito em lua, muito bonito e com várias configurações.
Instalação 🚀
Com Packer
use {'akinsho/toggleterm.nvim', tag = 'v2.*'}
Com Plug
Plug 'akinsho/toggleterm.nvim', {'tag' : 'v2.*'}
Configuração 🤖
O plugin permite diversas configurações de aparência e permite até mesmo transferir o texto do editor direto para o terminal em execução.
Orientações de terminal
- Float
- Vertical
- Tab
Vale a pena conferir o README do projeto para deixar conforme o seu gosto. Aqui a baixo segue a configuração que eu uso em linguagem lua.
require("toggleterm").setup{
-- size can be a number or function which is passed the current terminal
size = 22,
open_mapping = [[<c-s>]],
hide_numbers = true, -- hide the number column in toggleterm buffers
shade_filetypes = {},
shade_terminals = true, -- NOTE: this option takes priority over highlights specified so if you specify Normal highlights you should set this to false
-- shading_factor = '<number>', -- the degree by which to darken to terminal colour, default: 1 for dark backgrounds, 3 for light
start_in_insert = true,
insert_mappings = true, -- whether or not the open mapping applies in insert mode
terminal_mappings = true, -- whether or not the open mapping applies in the opened terminals
persist_size = true,
direction = 'float', -- 'vertical' | 'horizontal' | 'tab' | 'float'
close_on_exit = true, -- close the terminal window when the process exits
-- shell = vim.o.shell, -- change the default shell
-- This field is only relevant if direction is set to 'float'
float_opts = {
-- The border key is *almost* the same as 'nvim_open_win'
-- see :h nvim_open_win for details on borders however
-- the 'curved' border is a custom border type
-- not natively supported but implemented in this plugin.
border = 'curved', -- 'single' | 'double' | 'shadow' | 'curved'
-- width = <value>,
-- height = <value>,
winblend = 3,
}
}
function _G.set_terminal_keymaps()
local opts = {noremap = true}
vim.api.nvim_buf_set_keymap(0, 't', '<esc>', [[<C-\><C-n>]], opts)
-- vim.api.nvim_buf_set_keymap(0, 't', 'jk', [[<C-\><C-n>]], opts)
-- vim.api.nvim_buf_set_keymap(0, 't', '<C-h>', [[<C-\><C-n><C-W>h]], opts)
-- vim.api.nvim_buf_set_keymap(0, 't', '<C-j>', [[<C-\><C-n><C-W>j]], opts)
-- vim.api.nvim_buf_set_keymap(0, 't', '<C-k>', [[<C-\><C-n><C-W>k]], opts)
-- vim.api.nvim_buf_set_keymap(0, 't', '<C-l>', [[<C-\><C-n><C-W>l]], opts)
end
-- if you only want these mappings for toggle term use term://*toggleterm#* instead
vim.cmd('autocmd! TermOpen term://* lua set_terminal_keymaps()')
O resultado fica assim:
Lembrando é claro que o visual também é influenciado pelo seu shell. Eu uso um tema personalizado do zsh, que é o powerlevel10k.