1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
|
---
category: tool
tool: vim
contributors:
- ["RadhikaG", "https://github.com/RadhikaG"]
translators:
- ["David Lima", "https://github.com/davelima"]
- ["Raul Almeida", "https://github.com/almeidaraul"]
lang: pt-br
filename: LearnVim-pt.txt
---
[Vim](http://www.vim.org)
(Vi IMproved - Vi Melhorado) é um clone do editor vi para Unix. Ele é um
editor de texto projetado para ter velocidade e produtividade, e está presente
na maioria dos sistemas UNIX. O editor tem um grande número de atalhos de teclado
para agilizar a navegação para pontos específicos no arquivo, além de edição rápida.
## Navegação do Vim: o básico
```
vim <nome-do-arquivo> # Abre <nome-do-arquivo> no vim
:q # Fecha o vim
:w # Salva o arquivo atual
:wq # Salva o arquivo e fecha o vim
:q! # Fecha o vim e descarta as alterações no arquivo
# ! depois de qualquer comando força a sua execução
# ! *força* :q a executar, fechando o vim sem salvar antes
:x # Salva o arquivo e fecha o vim (atalho para :wq)
u # Desfazer
CTRL+R # Refazer
h # Move o cursor para a esquerda
j # Move o cursor para baixo
k # Move o cursor para cima
l # Move o cursor para a direita
# Movendo o cursor dentro da linha
0 # Move para o início da linha
$ # Move para o final da linha
^ # Move para o primeiro caractere da linha (ignora caracteres em branco)
# Pesquisa no texto
/palavra # Destaca todas as ocorrências de 'palavra' após o cursor
?palavra # Destaca todas as ocorrências de 'palavra' antes do cursor
n # Move o cursor para a próxima ocorrência após a pesquisa
N # Move o cursor para a ocorrência anterior após a pesquisa
:%s/foo/bar/g # Substitui 'foo' por 'bar' no arquivo inteiro
:s/foo/bar/g # Substitui 'foo' por 'bar' na linha atual
# Pulando para caracteres específicos
f<caracter> # Posiciona o cursor no próximo <caracter>
t<character> # Posiciona o cursor antes do próximo <caracter>
# Por exemplo,
f< # Posiciona o cursor no <
t< # Posiciona o cursor logo antes do <
# Movendo por palavras
w # Move o cursor uma palavra adiante
b # Move o cursor uma palavra atrás
e # Move o cursor ao fim da palavra atual
# Outros caracteres para mover o cursor no arquivo
gg # Move para o topo do arquivo
G # Move para o final do arquivo
:NUM # Move para a linha NUM (NUM é qualquer número)
H # Move para o topo da tela visível
M # Move para o meio da tela visível
L # Move para o final da tela visível
```
## Modos
O Vim é baseado no conceito de **modos**.
Modo Comando - usado para navegar e escrever comandos - o Vim já inicia nesse modo
Modo Inserção - usado para fazer alterações no arquivo
Modo Visual - usado para destacar textos e executar comandos neles
Modo Ex - usado para ir a linha com ':' no final da tela para executar comandos
```
i # Coloca o Vim no Modo Inserção, logo antes do cursor
a # Coloca o Vim no Modo Inserção, logo após o cursor
v # Coloca o Vim no Modo Visual
: # Coloca o Vim no Modo Ex
<esc> # Sai de qualquer modo que você estiver, e coloca o Vim no Modo Comando
# Copiando e colando texto
y # Coloca a seleção atual na área de transferência
yy # Coloca a linha atual na área de transferência
d # Deleta a seleção tual
dd # Deleta a linha atual
p # Cola o texto copiado após a posição do cursor
P # Cola o texto copiado antes da posição do cursor
x # Deleta o caractere que está na posição do cursor
```
## A 'Gramática' do Vim
Podemos pensar no Vim como uma série de comendos
em um formato 'Verbo-Modificador-Nome', onde:
Verbo - sua ação
Modificador - como você executará sua ação
Nome - o objeto onde você vai executar sua acão
Alguns exemplos importantes de 'Verbos', 'Modificadores' e 'Nomes':
```
# 'Verbos'
d # Apagar (Delete)
c # Alterar (Change)
y # Copiar (Yank)
v # Seleção Visual
# 'Modificadores'
i # Dentro (Inside)
a # Em torno de (Around)
NUM # Número (NUM qualquer número)
f # Pesquisa algo e posiciona o cursor acima do resultado
t # Pesquisa algo e posiciona o cursor logo antes do resultado
/ # Encontra algo a frente do cursor
? # Encontra algo antes do cursor
# 'Nomes'
w # Palavra (word)
s # Sentência
p # Parágrafo
b # Bloco
# Exemplos de comandos
d2w # Apaga 2 palavras
cis # Altera dentro de uma sentência
yip # Coloca o parágrafo atual da área de transferência)
ct< # Altera para '<'
# Altera todo o texto a partir da posição do cursor até o próximo '<'
d$ # Apaga tudo da posição do cursor até o final da linha
```
## Alguns atalhos e dicas
<!--TODO: Adicionar mais!-->
```
> # Adiciona um bloco de indentação
< # Remove um bloco de indentação
:earlier 15m # Reverte o documento para como ele estava há 15 minutos atrás
:later 15m # Reverte o comando acima
ddp # Troca linhas consecutivas de posição, dd e depois p
xp # Permuta caractere atual e o seguinte
Xp # Permuta caractere atual e o anterior
. # Repete a última ação
# Em geral, o usuário pode associar um comando em maísculas (exemplo: D) com
# "executar este comando até o final da linha"
# Usar a tecla de um comando duas vezes geralmente significa executar este
# comando sobre toda a linha (exemplo: dd apaga a linha inteira)
```
## Macros
Macros, basicamente, são ações graváveis.
Quando você começa a gravar uma macro, ele salva **toda** ação e comando
que você usar, até que você pare de gravar. Ao executar uma macro, ele aplica
exatamente a mesma sequencia de ações e comandos na seleção atual.
```
qa # Inicia a gravação de uma macro chamado 'a'
q # Para a gravação
@a # Executa a macro
@@ # Executa a última macro executada
```
### Configurando o ~/.vimrc
O arquivo .vimrc pode ser usado para configurar o Vim no seu início.
Exemplo de arquivo ~/.vimrc
```vim
" Exemplo de ~/.vimrc
" 2015.10
" Obrigatório para rodar apenas no Vim (Vi Improved)
set nocompatible
" Determina o tipo de arquivo pelo nome para habilitar indentação automática, etc
filetype indent plugin on
" Habilita sintaxe colorida
syntax on
" Ativa um 'auto-completar' melhor para a linha de comando
set wildmenu
" Faz as buscas não diferenciarem maiúsculas-minúsculas (case insensitive)
" Exceto quando você usar letras maiúsculas
set ignorecase
set smartcase
" Quando criar uma nova linha e a indentação por tipo de arquivo estiver
" desabilitada, mantem a mesma indentação da linha atual
set autoindent
" Mostra o número das linhas à esquerda
set number
" Opções de indentação, aqui você pode mudar como preferir
" Número de espaços visíveis por TAB
set tabstop=4
" Número de espaços por TAB ao editar um arquivo
set softtabstop=4
" Número de espaços usados nas funções de indentação (>> e <<)
set shiftwidth=4
" Converte TABs em espaços
set expandtab
" Habilita indentação/alinhamento inteligente
set smarttab
```
### Referências
[Vim | Home](http://www.vim.org/index.php) (EN)
`$ vimtutor pt`
[Vim: um tutorial/cartilha](https://danielmiessler.com/study/vim/) (EN)
[O que são as partes sombrias do Vim que sua mãe nunca te explicou? (tópico no Stack Overflow)](http://stackoverflow.com/questions/726894/what-are-the-dark-corners-of-vim-your-mom-never-told-you-about) (EN)
[Arch Linux Wiki](https://wiki.archlinux.org/index.php/Vim) (EN)
|