Acredito que muitos de vocês já tenham ouvido falar sobre o vim, eu particularmente sempre tive medo de usa-lo ou de nunca conseguir sair dele. Mas hoje, iremos falar do NeoVim que nada mais é do que um fork do vim. E ai, bora ver como configuramos ele ?
Instalando o NeoVim
Linux
sudo apt install neovim
macOS
brew install neovim
Windows
choco install neovim
Configurando
Primeiramente precisamos instalar um plugin para poder instalar os demais plugins
Meio estranho eu sei, mas precisamos dele para poder gerenciar os demais plugins e bem, particularmente, eu uso o vim-plug e é o que iremos usar
curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
Agora precisamos criar nosso arquivo de configuração do vim, para Linux e macOs, o diretorio de configuração fica em ~/.config/nivm/init.vim
.
Adicionaremos o seguinte no arquivo:
call plug#begin()
"Seção do plugin
call plug#end()
"Seção de configuração
Tema
Eu particularmente não uso um tema em especifico, vivo trocando de tema em tema mas se preferir irei deixar alguns
Ok mas como instalar ? Simples ! Lembra do código acima onde deixei marcado aseção de plugins ? Basta adicionar Plug 'user_github/nome_repo'
olha só:
Plug 'joshdick/onedark.vim'
e ativar o tema da seguinte forma:
colorscheme onedark
Confuso ? Deverá ficar da seguinte forma
call plug#begin()
PLug 'cseelus/vim-colors-lucid'
call plug#end()
solorscheme lucid
Agora basta salvar o arquivo e abri-lo novamente.
Para que uma alteração seja visivel é preciso abrir e fechar o arquivo novamente
Uma vez configurado o tema, precisamos instala-lo, mas como ? Como sabemos o Vim tem uma seção de comandos onde pressionamos esc
e :
e ele abre a seção de comandos, basta digitar:
PlugInstall
Legal mas é bem chato ficar slavando e saindo toda hora ne ?
Então saca só, vamos criar um atalho para isso mas antes precisamos definir um prefixo
let mapleader="\<space>"
nnoremap <leader>sv :source ~/.config/nvim/init.vim<CR>
Agora basta salvar, fechar e abrir novamente pela última vez e após salvar o arquivo, para obter as atualizações é só pressionar space
+ sv
e pronto o arquivo será atualizado.
Explorador de Arquivos
Claro, não é obrigatório ter um explorador de arquivos, mas é sempre bom poder um arquivo rápido
Plug 'preservim/nerdtree'
Plug 'ryanoasis/vim-devicons'
Plug 'Xuyuanp/nerdtree-git-plugin'
Agora algumas configurações básicas:
set encoding=UTF-8
"nerdtree
let NERDTreeShowHidden = 1
let NERDTreeMinimalUI = 1
let NERDTreeDirArrows = 1
let NERDTreeIgnore = []
let NERDTreeStatusline = ''
"nerdtree-git-plugin
let g:NERDTreeIndicatorMapCustom = {
\ "Modified" : "✹",
\ "Staged" : "✚",
\ "Untracked" : "✭",
\ "Renamed" : "➜",
\ "Unmerged" : "═",
\ "Deleted" : "✖",
\ "Dirty" : "✗",
\ "Clean" : "✔︎",
\ 'Ignored' : '☒',
\ "Unknown" : "?"
\ }
Pressionamos ctrl+b
e teremos:
Busca
Bom, não basta apenas ter um explorador de arquivos e um tema daora, sempre precisaremos procurar um arquivo e sair do terminal pra pocurar externamente não é o que queremos
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
Um atalho pra ele: ctrl+p
nnoremap <c-p> :Files<cr>
O legal do fzf
é que se você tiver o The Silver Search ele se integra automaticamente, com a configuração a baixo basta apenas combinarmos as teclas ctrl+f
nnoremap <c-f> :Ag<cr>
Abaixo uma breve demostração de como ficou
Intellisense
Desde quando comecei a usar o vim/Neovim eu uso o ale mas um tempo depois conheci o coc.nvim, mas neste caso iremos usar os dois, então bora lá, e claro, faze-los trabalhar juntos
Plug 'dense-analysis/ale'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
ale
"ale
let b:ale_fixers = ['prettier', 'eslint']
let g:ale_echo_msg_error_str = 'E'
let g:ale_echo_msg_warning_str = 'W'
let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
let g:ale_sign_error = '✘'
let g:ale_sign_warning = '⚠'
coc
let g:coc_global_extensions = [
\ 'coc-snippets',
\ 'coc-emmet',
\ 'coc-html',
\ 'coc-css',
\ 'coc-json',
\ 'coc-phpls',
\ 'coc-yaml',
\ 'coc-prettier',
\ 'coc-eslint',
\ 'coc-jedi',
\ 'coc-python',
\ ]
nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent> gr <Plug>(coc-references)
nnoremap <silent> K :call <SID>show_documentation()<CR>
autocmd CursorHold * silent call CocActionAsync('highlight')
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
function! s:check_back_space() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction
" Use <c-space> to trigger completion.
inoremap <silent><expr> <c-space> coc#refresh()
" Use <cr> to confirm completion, `<C-g>u` means break undo chain at current position.
" Coc only does snippet and additional edit on confirm.
inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
Pronto ! Temos eles configurados, mas ainda falta fazer os dois trabalharem juntos, para isso basta acessar as configurações do coc com :CocConfig
e colocar o seguinte
{
"suggest.noselect": false,
"coc.preferences.formatOnSaveFiletypes": [
"javascript",
"typescript",
"javascriptreact",
"typescriptreact",
"css",
"json",
"yaml"
],
"diagnostic.displayByAle": true,
"coc.preferences.colorSupport": true,
"prettier.eslintIntegration": true,
"prettier.tabWidth": 2
}
Bom, aqui configuramos algumas outras coisas além da integração do coc com o ale, agora toda vez que salvar o arquivo, ele irá formata-lo, definimos o tamanhos de espaçamento do tab, etc
Go-to Definition
Como toda IDE, precisamos ir para a definição de 'X' método, variável e por ai vai. Como já temos o coc configurado, basta apenas pressionar gd
(go to definition) e ctrl+o
para retornar
Terminal Integrado
E claro, não poderia faltar, sempre precisamos executar algum comando então aqui irei deixar uma configuração para podermos executar o terminal dentro do NeoVim
" Mude para o modo normal com o esc
tnoremap <Esc> <C-\><C-j>
" start terminal in insert mode
au BufEnter * if &buftype == 'terminal' | :startinsert | endif
function! OpenTerminal()
split term://zsh
resize 10
endfunction
nnoremap <c-j> :call OpenTerminal()<CR>
" use alt+hjkl para mover entre split/vsplit paineis
tnoremap <A-h> <C-\><C-n><C-w>h
tnoremap <A-j> <C-\><C-n><C-w>j
tnoremap <A-k> <C-\><C-n><C-w>k
tnoremap <A-l> <C-\><C-n><C-w>l
nnoremap <A-h> <C-w>h
nnoremap <A-j> <C-w>j
nnoremap <A-k> <C-w>k
nnoremap <A-l> <C-w>l
Pronto ! Basta pressionarmos ctrl+j
(vscode feelings)
Fim !
E ai curtiu ? Então passa lá no meu github e vê as demais configurações que tenho para o vim.
Top comments (12)
[coc.nvim] Error on execute python script: request error nvim_comand - Vim(pyxfile):E319: No "python3" provider found.
Ao inicciar o NVIM é apresentada essa msg de erro.
No win10...
Instalei o python 2.7.18 e 3.9.1, e configurei o path nos dois.
Pelo erro apresentado parece que o NVIM não encontra os executaveis, é isso?
Por favor, como corrigo?
A fonte abaixo eu consigo instalar no win?
let g:ale_sign_error = '✘'
let g:ale_sign_warning = '⚠'
Você esta tendo erro na hora de adicionar o host do python ?
let g:python3_host_prog='/usr/bin/python3'
se for, tente dar uma olhada aquiSobre os símbolos do ale, acredito que sim, só se tiver usando o coc junto terá que integrar os dois
Failed to load python3 host.
Agora apresenta essa msg após Incluir:
let g:python3_host_prog = 'C:\Program Files\Python39\python3.exe'
Você instalou o
pynvim
?python3 -m pip install pynvim
Se sim, não sei o que possa ser não tentei configurar no windows ainda.
Andei pesquisando e achei esse gist mas não tenho certeza de que irá funcionar
Deu certo agora!!!
Declarei a variável global apontando p/ o diretório correto e os dois comandos de upgrade:
let g:python3_host_prog = 'C:\Program Files\Python39\python3.exe'
python3 -m pip install --user --upgrade pynvim
python -m pip install --user --upgrade pynvim
Comentei a linha:
let g:python3_host_prog = 'C:\Program Files\Python39\python3.exe'
e continou ok ainda.
O unico erro apresentado agora é p/ o ruby. Estou pesquisando.
Segue o :checkhealth
health#coc#check
OK: Environment check passed
OK: Javascript bundle build/index.js found
OK: Service started
health#nvim#check
Configuration
Performance
Remote Plugins
health#provider#check
Clipboard (optional)
Python 2 provider (optional)
g:python_host_prog
is not set. Searching for python in the environment.g:python_host_prog
to avoid surprises.Python 3 provider (optional)
Ruby provider (optional)
neovim-ruby-host
not found.gem install neovim
to ensure the neovim RubyGem is installed.gem environment
to ensure the gem bin directory is in $PATH.Node.js provider (optional)
Boa ! Já tentou rodar
gem install neovim
? Acredito que o procedimento seja o mesmo, declarar o path do executavel do ruby:let g:ruby_host_prog='path/to/exec'
Tentei. Quando tento executar o gem install neovim, dá erro tbm.
PS C:\Users\anlima> gem install neovim
ERROR: Could not find a valid gem 'neovim' (>= 0), here is why:
Unable to download data from rubygems.org/ - timed out (rubygems.org/specs.4.8.gz)
Curti bastante a configuração, principalmente a parte do terminal, muito obrigado pelo post!
Aqui ta minha config: github.com/Tashima42/install-scrip...
Estou usando o neovide no momento.
Fico feliz que tenha gostado do post, espero que lhe ajude de alguma forma
Valeu !!
eu não consigo, que merda velho eu queria tanto usar esse como meu editor principal.
Qual o problema ?
eu não consigo, criar as pastas.