Comandos básicos do Vim e configurações úteis
Tags: vim, linux, programming
Published: 2022-01-19 10:13:01

---
title: Comandos básicos do Vim e configurações úteis
published: true
description: Tutorial básico para utilizar o editor de textos Vim, no Linux, para iniciantes
tags: vim, linux, programming
cover_image: https://images.unsplash.com/photo-1518432031352-d6fc5c10da5a?ixid=MXwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHw%3D&ixlib=rb-1.2.1&auto=format&fit=crop&w=1267&q=80
---

Hoje vou falar um pouco sobre esse **editor de texto chamado Vim**. Se você já se pegou perguntando **como entrar no vim**, **como sair do vim**, **como editar no vim**, **como adicionar plugins no vim** ou coisas do tipo, esse texto é para você.

A intenção aqui é ser “pá-pum”, bem direto ao ponto, um resuminho para quem nunca usou esse editor de texto hardcore. Me lembro de ter visto alguns *handbooks* na época em que comecei, mas o que proponho aqui é bem mais enxuto.

## Como instalar o Vim
A instalação básica que costumo fazer é essa:

```bash
$ sudo apt install vim
```

Se você for no site oficial do editor de texto verá que há outra forma de instalar, mas por praticidade pode seguir com a acima.
 
## Como configurar o Vim 
O Vim instalado por si só não tem configurações úteis que nos fariam pensar, por exemplo, em abandonar o VS Code (eu acho rs). Para isso configuramos algumas coisas criando um arquivo chamado `.vimrc` para deixá-lo mais esperto.

Dentro do meu `.vimrc` eu tenho algumas configurações, por exemplo:

```vim
set number
set linebreak
set showbreak=+++
set textwidth=100
set autoindent
set shiftwidth=2
set smartindent
set smarttab
set softtabstop=2
set undolevels=1000
set background=dark
set backspace=indent,eol,start
```

**Cada uma dessas configurações tem uma utilidade e te encorajo a pesquisar sobre cada uma delas**. O `set number`, por exemplo, faz com que seja mostrada a numeração de cada linha no editor, o que é muito útil.

[Coloquei meu `.vimrc` completo esse repositório no GitHub](https://github.com/nfo94/vimrc/blob/master/.vimrc), caso tenha curiosidade.

## Gerenciando plugins

Para o Vim ficar ainda mais interessante, muitas pessoas utilizam um **gerenciador de plugins** para instalar plugins variados. Atualmente utilizo o [**Vundle Vim**](https://github.com/VundleVim/Vundle.vim).

Para instalar o Vundle, digite no seu terminal:

```bashrc
$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
```

É necessário que o seu `.vimrc` tenha algumas informações para funcionar com o Vundle corretamente:

```vim
set nocompatible              " be iMproved, required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'

" The following are examples of different formats supported.
" Keep Plugin commands between vundle#begin/end.
" plugin on GitHub repo
Plugin 'tpope/vim-fugitive'
" plugin from http://vim-scripts.org/vim/scripts.html
" Plugin 'L9'
" Git plugin not hosted on GitHub
Plugin 'git://git.wincent.com/command-t.git'
" git repos on your local machine (i.e. when working on your own plugin)
Plugin 'file:///home/gmarik/path/to/plugin'
" The sparkup vim script is in a subdirectory of this repo called vim.
" Pass the path to set the runtimepath properly.
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
" Install L9 and avoid a Naming conflict if you've already installed a
" different version somewhere else.
" Plugin 'ascenator/L9', {'name': 'newL9'}

" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList       - lists configured plugins
" :PluginInstall    - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean      - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line
```

**O texto acima foi retirado diretamente da documentação** e explica, em comentários (toda linha com aspas duplas é um comentário), algumas opções de como usar o Vundle e onde colocar cada informação no seu `.vimrc`.

Na última linha do arquivo temos algo como *coloque todas as informações que não são de plugins depois dessa linha*: é no final do arquivo que ficam nossas configurações básicas do Vim que falamos anteriormente. 

Localize as linhas que não estão com aspas duplas que começam com “Plugin”. Pronto, esses são alguns plugins que eles colocam de exemplo nesse arquivo para ilustrar.

Vamos configurar um `.vimrc` com Vundle agora. No seu terminal, digite:

```bash
$ vim .vimrc
```

Isso vai abrir o Vim com o arquivo `.vimrc`. Já no editor, **dê um `ctrl i` e cole com `ctrl shift v`** (deixei uns comentários para que você possa entender melhor):

```vim
" configurações essenciais
set nocompatible              " be iMproved, required
filetype off                  " required
set rtp+=~/.vim/bundle/Vundle.vim
" início da chamada de plugins
call vundle#begin()

Plugin 'VundleVim/Vundle.vim'
Plugin 'scrooloose/nerdtree'
Plugin 'majutsushi/tagbar'
Plugin 'tpope/vim-surround'
Plugin 'scrooloose/syntastic'
Plugin 'jiangmiao/auto-pairs'
Plugin 'morhetz/gruvbox'
Plugin 'valloric/youcompleteme' 

" fim da chamada de plugins
call vundle#end()            " required
filetype plugin indent on    " required

" configurações básicas do Vim
set number
set linebreak
set showbreak=+++
set textwidth=100
set showmatch
set hlsearch
set smartcase
set ignorecase
set incsearch
set autoindent
set shiftwidth=2
set smartindent
set smarttab
set softtabstop=2
set undolevels=1000
set background=dark
set backspace=indent,eol,start
colorscheme gruvbox 
```

Para definir meus plugins fui analisando a necessidade e procurando num site chamado [**Vim Awesome**](https://vimawesome.com/).

Essa é a cara do meu Vim atual quando abro algum arquivo:

![Vim image](https://dev-to-uploads.s3.amazonaws.com/i/ebqdy8nd56t0fhnvl3ua.png)

* A árvore de arquivos e pastas é proporcionada pelo `Plugin 'scrooloose/nerdtree'`
* O tema (`colorscheme`) é o `Plugin 'morhetz/gruvbox'`
* A linha com informações no canto inferior da tela vem do `Plugin 'majutsushi/tagbar'`

## Editando códigos e usando os plugins
No início anotei comandos no papel e fui olhando sempre até decorar. Hoje em dia utilizo um [plugin no VS Code que me permite utilizar comandos do Vim](https://github.com/VSCodeVim/Vim), porque acabei me acostumando com a praticidade. 

Mas como gosto de utilizar também alguns comandos do VS Code, precisei adequar algumas coisas nas minhas configurações. Aqui estão as [minhas settings do VS Code](https://gist.github.com/nfo94/ebdaf7012bb375c66ade47cf23f9c94a), caso tenha interesse. Tudo que tem `vim.handleKeys`  é para que eu possa utilizar “ctrl-alguma tecla” do VS Code ao invés do Vim.

### Modos do Vim

O Vim tem alguns modos:

* __Normal__ mode: para se movimentar pelo texto
* __Insert__ mode: para escrever no texto
* __Visual__ mode: para selecionar parte do texto
* __Command__ mode: para dar algum comando ao Vim

### Comandos básicos no modo normal
* `esc`: sair do modo atual e ir para o modo de comando
* `j`: mover o cursor para baixo
* `k`: mover o cursor para cima
* `h`: mover o cursor para a esquerda
* `l`: mover o cursor para a direita
* `ctrl i`: entrar no modo de edição no caracter em que está 
* `esc`: sair do modo atual e ir para os comandos
* `shift a`: entrar no modo de edição no final da linha  
* `shift o`: entra no modo de edição em uma nova linha abaixo da atual 
* `gg`: ir para o início do arquivo
* `shift g`: ir para o final do arquivo
* `w`: pular uma palavra para frente
* `b`: pular uma palavra para trás
* `ctrl ]`: pular um bloco de código para baixo
* `ctrl [`: pular um bloco de código para cima
* `y`: copiar código
* `c`: recortar código
* `p`: colar código um caractere depois do atual
* `x`: deletar caractere
* `dd`: deletar linha
* `ctrl u`: desfazer
* `ctrl r`: refazer
* `shift o`: abre uma nova linha de edição empurrando para baixo o código da linha

### Comandos no modo de comando
Entramos nesse modo depois de dar um `esc`. Perceba que aqui nós precisamos digitar dois pontos para dar o comando e dar enter no final. Aqui os comandos aparecem sendo digitados no canto inferior da tela (lá no finzinho).

![Vim image](https://dev-to-uploads.s3.amazonaws.com/i/wm2xhdbfb5i6hvjczj33.png)

* `:q`:  sair do arquivo atual
* `:q!`: saída forçada do arquivo atual
* `:w`: salvar
* `:wq`: salvar e sair

### Comandos no modo visual
Com o `v` entramos no visual mode, e com os comandos do modo normal movemos o cursor para que selecione o texto que queremos. Ficará um `VISUAL` no canto inferior.

![Vim image](https://dev-to-uploads.s3.amazonaws.com/i/j0spqsk2w5n0esibfzvh.png)

* `x`: deleta o que está selecionado
* `y`: copia o que está selecionado
* `s`: entra no modo de edição substituindo o que tinha antes
* `c`: recorta o código selecionado

Para copiar o código selecionado em algum lugar, dê um `esc` para voltar ao modo normal e depois um `p` (paste) no local desejado.

### Comandos do Vundle e do plugin NERDTree 
Para instalar os plugins que você definiu no seu `.vimrc` entre no Vim e, no modo de comando, digite:

```vim
:PluginInstall
```

Vai aparecer uma telinha como essa:

![Vim image](https://dev-to-uploads.s3.amazonaws.com/i/ozjs4dmich1zht5bqtrm.png)

É só dar `esc`, depois `:q` e enter para sair. Para desinstalar um plugin delete a linha no `.vimrc` e depois faça o mesmo esquema só que com `:PluginClean`. 

Para acessar a árvore de comandos que eu instalei, vá para o modo de comando e digite:

```vim
:NERDTree
```

Você pode navegar na NERDTree como no normal mode. Para abrir uma pasta pressione `o`, para fechá-la, pressione novamente. 

Para abrir um arquivo do lado pressione `o` no arquivo. Para abrir outro arquivo na vertical, dividindo a tela com um arquivo já aberto, pressione `i`. 

Para rodar entre os arquivos abertos e a árvore de arquivos pressione `ctrl w` e mais uma das teclas principais de navegação (h, j, k, l). 

**Cada plugin tem uma documentação e você deve ler cada uma delas para entender o que fazer**. Não tem para onde correr!

---

Para usar o Vim como editor principal é necessário aprender vários comandos e configurar muita coisa, então veja bem se você tem interesse de desprender esse tempo aprendendo. O importante mesmo é saber usar bem a ferramenta que você escolheu.

---
_Esse texto não tem intenção de esgotar o tema. Acrescente nos comentários, e também aponte erros quando os identificar._