Neovim - Workflow para Java, C# e JS/TypeScript
Tags: vim, neovim, workflow, editor
Published: 2020-08-29 03:21:19

# Neovim - Workflow para Java, C# e JS/TypeScript

Atualização 01/01/2023: como esse post usava a versão Neovim 0.4.x, [escrevi um novo post](https://dev.to/wesleyegberto/neovim-workflow-para-java-c-e-jstypescript-atualizacao-com-neovim-08-e-lsp-4jih) com setup na versão Neovim 0.8 e LSP.

## Background

Sou desenvolvedor especializado em Java e trabalho em projetos desenvolvidos em Java, C#, Javascript/TypeScript e Angular.

## Introdução

Neovim é um projeto que, de acordo com o repositório no [Github](https://github.com/neovim/neovim), busca refatorar agressivamente o Vim para que seja possível:

* Simplificar manutenção e encorajar contribuição;
* Dividir o trabalho entre múltiplos desenvolvedores;
* Habilitar UI avançada sem modificações no core;
* Maximizar extensibilidade.

A maior vantagem que percebi foi a comunidade provendo diversas interfaces e extensões que facilitam a transição de uma IDE para o Neovim.
Um exemplo de interface é o [VimR](https://github.com/qvacua/vimr).

Para introdução e motivação completa acesse a [Wiki no Github](https://github.com/neovim/neovim/wiki/Introduction).

## Instalação

Para instalação basta seguir os passos descritos [aqui](https://github.com/neovim/neovim/wiki/Installing-Neovim) onde são disponibilizados os pacotes e comandos para instalação em diversos SOs.

Todos os comandos do Vim funcionam normalmente no Neovim visto que é um fork da versão Vim 7.4.160 e que vem sendo atualizado constantemente.

## Plugins

Alguns plugins que uso:

* [Vundle](https://github.com/VundleVim/Vundle.vim): gerenciar os plugins =), permite instalar/atualizar os plugins através da referência do github (ex.: `Plug 'VundleVim/Vundle.vim'`), vale a pena adicionar uma referência dele mesmo para permitir
    atualizações automáticas.
* [Fzf](https://github.com/junegunn/fzf) e [Fzf.vim](https://github.com/junegunn/fzf.vim): plugin para permitir pesquisar arquivos no disco, texto, etc, igual ao famoso `Ctrl+P` do Sublime Text.
* [Vim-airline](https://github.com/vim-airline/vim-airline): plugin para exibir algumas informações no rodapé do painel (como branch, linguagem, tamanho do arquivo, etc).
* [Vim-numbertoggle](https://github.com/jeffkreeftmeijer/vim-numbertoggle): plugin para facilitar a navegação relativa com `j` e `k`.
* [Vim-easymotion](https://github.com/easymotion/vim-easymotion): plugin para facilitar e acelerar a navegação no arquivo.
* [Vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors): plugin para habilitar multiplos cursores igual ao `Ctrl+D` do VS Code.
* [Coc.nvim](https://github.com/neoclide/coc.nvim): plugin para habilitar intellisense com autocomplete, LSP e snippets, tudo de forma assíncrona e leve. Provê ótima
    [extensibilidade](https://github.com/neoclide/coc.nvim/wiki/Using-coc-extensions) com vários plugins para várias linguagens. Utilizo em Java, C# e Javascript/Typescript.
* [Vim-Syntastic](https://github.com/vim-syntastic/syntastic): plugin para code checking e exibição do resultado no editor.
* [Omnisharp-vim](https://github.com/OmniSharp/omnisharp-vim): plugin para suporte do desenvolvimento completo em C#.

## Workflow

O plugin `Coc.nvim` basicamente provê suporte para as principais linguagens que utilizo no dia-a-dia.
Para facilitar a experiência no Neovim e trazer aquele feeling de IDE utilizo as extensões abaixo:

* [coc-actions](https://github.com/iamcco/coc-actions): implementa popups no `Coc.nvim` de forma que as sugestões de snippets, ações e contexto sejam mostradas no próprio cursor.
* [coc-explorer](https://github.com/weirongxu/coc-explorer): explorador de arquivos leve e customizável, permitindo funcionar em um painel fixo ou popup.
* [coc-snippets](https://github.com/neoclide/coc-snippets): provê suporte para utilizar extensões de diversos plugins (UltiSnips, snipmate e até VSCode) com preview.

Também utilizo o [antoinemadec/coc-fzf](https://github.com/antoinemadec/coc-fzf) para exibir as ações do `Coc.nvim` em popups com Fzf que permite agilizar a visualização e ação necessária.

Para facilitar minha vida nas tarefas rápidas que faço pelo terminal (como docker, git, npm, etc) utilizo o [vim-floaterm](https://github.com/voldikss/vim-floaterm) que permite executar diversas tarefas através de popups.

E alguns plugins para snippets:

* [ultisnips](https://github.com/SirVer/ultisnips): provê suporte de snippets leve e rápido.
* [vim-snippets](https://github.com/honza/vim-snippets): disponibiliza diversos snippets para diversas linguagens.

Abaixo segue as combinações de plugins que utilizo para cada linguagem de forma que tenha sempre autocomplete, snippets, code checking e builds:

### Java

Utilizo `Coc.nvim` com a extensão [coc-java](https://github.com/neoclide/coc-java) que instala o [JDT do Eclipse](https://www.eclipse.org/jdt/) que provê suporte completo igual ao Eclipse.
E utilizo o `vim-syntastic` que efetua o code checking de forma assíncrona.

### Csharp

Utilizo os plugins `Coc.nvim` com a extensão [coc-omnisharp](https://github.com/coc-extensions/coc-omnisharp) e `Omnisharp-vim`.

### Javascript/TypeScript

Utilizo o `Coc.nvim` com a extensão [coc-tsserver](https://github.com/neoclide/coc-tsserver).

## Dotfiles

Além desses existem diversos outros plugins para facilitar navegação, edição e suporte de linguagens e highlight de sintaxes.

Para ver todos os plugins e configurações que utilizo até a escrita deste post, acesse meu [Dotfiles no Github na branch para Neovim 0.4](https://github.com/wesleyegberto/dotfiles/tree/neovim-0.4).