Resolvi começar o ano aprendendo algo novo. Nada melhor do que eliminar um antigo trauma: O medo do vim, o poderoso e temido editor do Linux!

Só existe uma maneira de dominar o Vim: usando! Então, desinstalei o Vscode e passei a usar o vim efetivamente para todas as tarefas.

Nessa aventura, acabei criando uma lista para consulta rápida dos atalhos mais usados. Assim eu posso abrir o arquivo que estou editando em uma janela do vim e minha lista de atalhos numa janela lateral (vertical split), onde posso consultar rapidamente o comando que estou procurando, sem perder o foco no trabalho.

Segue abaixo a lista de atalhos que uso efetivamente no vim. Se quiser, é só copiar e salvar em algum arquivo.txt para consulta, assim como faço.

Feliz 2020!

## Comandos vim

### Entrada e saida (modo normal)
:new arquivo    ## abre segundo arquivo split horizontal'
:edit arquivo	## abre outro arquivo
:vnew arquivo   ## abre novo arquivo split vertical
:split arquivo  ## abre novo arquivo
:q		        ## sair do vim
:q!         	## forca saida do vim
:w		        ## salva arquivo
:x		        ## salva e sai (se modificado)
:w novonome	    ## salva como novo nome
:saveas novon	## salva cmoo novo nome e muda p/ novo arquivo
:wq		        ## salva arquivo e sai
:10,20 w! novo	## salva da linha 10 a 20 em novo arquivo
:enew!		    ## não salva e abre novo
:Vex		    ## Abre file explorer na vertical
:e .		    ## abre file explorer na janela atual
vim .		    ## abre o vim com file explorer
'0		        ## solicitar reabertura do ultimo arquivo aberto
'1		        ## solicitar reabertura do penultimo arquivo aberto
:bp		        ## vai para arquivo anterior
:bn		        ## vai para proximo arquivo
:wn		        ## salva e vai para proximo arquivo
:shell		    ## abre shell (exit para voltar
:!		        ## run external comando
:terminal	    ## abre shell numa janela


### buffer de arquivos
badd		## adiciona arquivo ao buffer
bn		    ## next file of buffer
bp		    ## arquivo anterior
ls		    ## lista arquivos do buffer
b1		    ## carrega arquivo 1 do buffer
bdelete		## apaga arquivo do buffer
split #2	## carrega arquivo 2 do buffer em janela horizontal
vplit #2    ## carrega arquivo 2 do bufffer em janela vertical


### janelas
ctrl wn		## abre nova janela sobrepondo atual (:new)
ctrl wq		## fecha janela atual (:quit)
ctrl wc		## fecha janela atual
ctrl ws		## Divide janela em duas (:split)
ctrl wo		## Faz janela atual ser unica (:only)
ctrl w w 	## alterna entre janelas
ctrl wj		## desce uma janela
ctrl wk		## sobe uma janela
crtl wr		## rotaciona janelas
ctrl w+		## aumenta espaço da janela
ctrl w-		## diminui espaço da janela
:hide		## esconde a janela sem fechar buffer
:wall		## salva todas janelas abertas
:qall		## sai de todas janelas
:res +5		## aumenta janela horizonal 5
:resize 60	## janela horizontal 60

:vertical resize 80
:vertical resize +5


### abas
tabnew file	## abre arquivo em nova aba
tabnext		## avanca proxima aba
tabprevios	## retorna aba anterior


### Ações (modo normal)
d		## deletar
dd		## deletar linha
i		## inserir
I 		## inserir no inicio da linha atua
a 		## inserir apos caracter atual
A		## inserir no final da lina atual
o		## insert na linha abaixo (nova linha)
O		## insert na linha acima (nova linha)
p		## colar abaixo
P		## colar acima
y		## copiar
yy		## copiar linha
x		## recortar
x		## apagar uma letra
xx		## recortar linha
u		## desfazer (undo)
di		## deletar dentro
yi		## copiar dentro
v		## visual / seleção
/		## buscar (find) n proxima ocorrencia
// 		## repete ultima busca
%		## busca fechamento de parenteses ou chave
:s		## substituir (replace)
:50		## vai para linha 50
50gg	## vai para linha 50
A		## iniciar insercao no fim da linha
I		## inciar insercao no inicio da linha
J		## Remove break line da linha atual c/ anterior
ZZ		## sai do arquivo e salva


### Movimentos (modo normal)
e		## fim da palavra atual
b		## incio palavra anterior
w		## inicio proxima palavra
hjkl	## esquerda baixo cima direita
$ 		## fim da linha
0		## inicio da linha
G		## fim do arquivo
nG		## pular para linha n
)		## avançar uma frase
}		## avançar um parágrafo
gg		## vai pra linha 1 do arquivo
H		## vai para primeiro caracter da tela
M 		## poe cursor no meio da tela
L		## vai para ultima linha da tela
*		## salta proxima ocorrencia da palavra
ctrl f	## page foward
ctrl b	## page back
zt		## cursor no topo da pagina
zm		## cursor no fim da pagina

###  alteracoes (modo normal)
g,		    ## avança lista de alteraçoes
g; 		    ## retrocede lista de alterações
u		    ## desfaz ultima mudança
:changes	## ver lista de alterações
:h changes	## lista de alterações detalhadas
UU		    ## desfaz mudanças da linha editada
ctrl -r 	## refaz mudanças desfeitas  undo undo


### comandos modo insert
ctrl y 		    ## copia caracter caracter linha acima
ctrl e 		    ## copia caracter caracter linha abaixo
ctrl w ctrl f	## abre arquivo sob cursor na janela atual
Shift insert	## inserir texto da area de transferencia


### modo visual
v 		## seleção de caracteres
V		## selecão de linhas inteiras
^V		## seleção de blocos


### Marcas
ma		## cria marca a em modo normal
'a		## move cursor até marca a
d'a		## delete ate a marca a
y'a		## copia ate a marca a


### Exemplos:
d$		## apaga até o final da linha
d^		## apaga até o inicio da linha
dG		## apagar até o final do arquivo
dl		## apagar uma letra
D		## apagar resto da linha
d3j		## deletar 3 linhas abaixo
yw		## copiar proxima palavra cursor no inicio
yiW	    ## copiar palavra (c/ caracteres especiais ) curso no meio
10j		## avançar 10 linhas
di}		## apagar tudo dentro das chaves
2{		## subir 2 paragrafos
5p 		## colar selecao atual 5 vezes
i		## Editar onde o cursor apresentar "I can vim now"
ayy		## copia linha atual para registrador a
ap		## cola registrador a
fx		## vai ate proxima ocorrencia de x
dfx		## deleta ate proxima ocorrencia de x
ctrl f	## page foward
ctrl b	## page back
gi		## insert no ultimo ponto de edição
gv		## repete ultima selecao visual
gf		## abre arquivo sob o cursor

:s:/foo/bar	    ## substitui foo por bar na linha atual
:1,10 s/foo/bar ## substitui foo por bar até a 10a linha
:% s/foo/bar	## substitui foo por bar no arquivo todo
:1,$ s/foo/bar	## substitui foo por bar no arquivo todo


### configuracoes
set number	            ## show line numbers
set nonumber	        ## ride line numbers
set relativenumber      ## set relative linenumber
set norelativenumber    ## unset relative linenumber