Você está na página 1de 34

Editor VIM

Luck Domingues
a.k.a }-SiRi-{

Setembro.2023
O vi e seu criador
● O programa vi (visual) foi criado por Bill Joy em 1976 para o BSD em um terminal
ADM-3A.
O vim e seu criador
● O Vim (uma contração de Vi
IMproved, em português Vi
Melhorado) é um clone do programa
editor de textos vi.
● Foi escrito por Bram Moolenaar com
o primeiro lançamento público em
1991 (15 anos depois).
● Site oficial:
https://www.moolenaar.net/
O teclado
Folhas de Dicas - Cheat Sheet
Modos do VIM
● Normal
○ Modo “padrão” do vim
○ Tecla ESC
● Edição
○ tecla i
● Comandos
○ Iniciamos com o os
dois pontos “:”
● Visual
○ Tecla v
○ CTRL + V (bloco)
Instalação , entrando e saindo
● Instalando:
○ Comando : sudo apt install vim
● Tornando o vim padrão
○ export EDITOR=vim
○ ex. visudo (usa o editor padrão do ambiente)
● Criando ou abrindo o arquivo.txt
○ vim arquivo.txt
● Sai sem salvar: <ESC> :q!
● Sai salvando: <ESC> :wq!
● Caso ocorra travamento: <ESC> CTRL+q
● <ESC> = Clicar na tecla ESC
Comandos 1/5
● vim arquivo.txt = Abre o arquivo.txt (comando)
● i = Entrar modo EDIÇÃO na posição do cursor
● a = Entrar em modo EDIÇÃO após cursor
● ESC = modo NORMAL do vim (tecla coringa)
● :w = Salva (modo COMANDO)
● :wq = Salva e sai
● ZZ = Zalva e Zai (Salva e sai) - shift + zz
● :q = Sai sem salvar
● :q! = Sai sem salvar (na força, perde modificações)
● CTRL+q = sair de travamentos
Comandos 2/5
● Setas para navegar (não uso o teclado => h,j,k,l)
● G = Vai (go) para a última linha do arquivo
● gg = Vai (go) para primeira linha do arquivo
● 1G = Vai (go) para primeira linha do arquivo
● 0 = Cursor no início da linha (zero)
● $ = Cursor no final da linha
● u = Desfazer última ação
● . = refaz o último comando (ponto)
● dd = deletar linha
● D = Deleta da posição do cursor até o final da linha
● o = adiciona uma linha em branco abaixo do cursor (edição)
● O = adiciona uma linha em branco acima do cursor (edição)
Comandos 3/5
● r = substitui o caracter na posição do cursor
● yy = copia a linha (joga no buffer)
● p = cola o conteúdo do buffer abaixo do cursor (paste)
● P = cola o conteúdo do buffer acima do cursor
● v = entra no modo visual (caractere)
● Y = copia linha
● V = entra no modo visual (linha)
● x = deleta um caractere (pra frente)
● X = deleta um caractere (para trás)
Comandos 4/5
● ESC : = entra no modo de comando
● :set number = numera as linhas
● :set nonu = retira enumeração das linhas
● :term = abre um terminal em janela
● :set relativenumber = numeração relativa de linhas
● :!comando = executa um comando no terminal e volta pro VIM
● :r!comando = executa e joga a saída do comando no arquivo
atualmente aberto no vim
Comandos 5/5
● /palavra = pesquisa (n = próxima ocorrência)
● :%s/joao/jose/gc = Substituição solicitando confirmação
● :%s/joao/jose/gn = Conta o número de ocorrências encontradas, mas
não realiza a substituição
● :1,10s/eu/tu/g = Substituição apenas no intervalo (linha 1 a 10),
sem confirmação
● Teclas PgUp e PgDn = subir e descer páginas
● CTRL + b = PgUp
● CTRL + f = PgDn
● :1,$d = deleta todas as linhas do arquivo
Versão e Ajuda
● ESC -> :ve
● ESC -> :help
● Ajuda sobre um determinado comando
○ ESC -> :help insert
● ~ (til) = linha vazia
Ajustando o .vimrc
● O arquivo de configuração do VIM é o .vimrc
● Esse arquivo fica no seu diretório home:
○ ~/.vimrc
● Cole o conteúdo do próximo slide dentro desse arquivo para ter
uma configuração legal inicial do seu VIM
Configuração básica .vimrc
set expandtab " espaços em branco em vez de tabulação, tecla TAB
set tabstop=4 " Número de espaços para tabulação
set shiftwidth=4 " Espaços usados para a operação de recuo automático
set autoindent " Indentação automática
set smartindent " Indentação inteligente para linguagens de programação
set bg=dark " esquema de cores , fundo escuro
set nowrap " desativa quebra automática de linhas
set cursorline " exibição de uma linha sob o cursor atual
set colorscheme murphy " Altera o esquema de cores para “murphy”
set number " Ativa a numeração das linhas
set termguicolors " suporte a cores GUI
set undofile " função desfazer persistente
if !isdirectory(expand("$HOME/.vim/undodir"))
call mkdir(expand("$HOME/.vim/undodir"), "p")
endif
set undodir=$HOME/.vim/undodir
Examinando mais comandos
● Os comandos em amarelo são os que mais uso
● Fazendo pesquisas no código
○ /texto = pesquisa o texto
○ ? = pesquisa reversa
○ n = vai para o próximo texto pesquisado (=next)
● Bom para pular entre funções
○ * = pesquisa a palavra sobre o cursor
○ # = pesquisa reversa da palavra sobre o cursor
Movimentação
● gg = início arquivo
● G = fim arquivo
● CTRL + b = pgup (back)
● CTRL + f = pgdown (forward)
● 100 g = vai para a linha 100 (go)
● :20 = vai para linha 20 (modo controle)
● 50% = vai para o meio do arquivo (0% - 100%)
● ( e ) = pula entre frases (faça testes no seu codigo)
● [ e ] = pula entre parágrafos
● w = salta palavras (pontuações são quebras)
● W = salta entre palavras grandes (espaços são quebras)
Movimentação
● b = salta palavras voltando (back)
● e = final da palavra
● $ = ir final de linha
● ^ = ir para início do primeiro caractere da linha atual
● 0 = ir para início da linha atual
● zz = centraliza a tela
● zb = alinha a tela para baixo
● zt = alinha a tela para cima
● M = salta para o meio da tela
● H - salta para o topo da tela (head)
● L = salta para o final (last)
Movimentação
● [m = salta entre métodos
● 3[m = salta para o 3o método
● [[ = salta entre classes para cima
● ]] = salta entre classes para baixo
● % e % = vai e volta entre os agrupadores (entre os {} () )
● v% = marca do { atual até o próximo } (modo visual)
● gi = volta para a linha que estava editando (go to insert)
● CTRL + o = volta para o último salto
● CTRL + i = avança um salto
● :help cursos-motions
Conversando com o VIM
● <quantitativo><verbo><substantivo><adjetivo>
○ dw = apague palavra
○ da} = apague ao redor das chaves
○ 3dw = 3x apague palavras
○ dt> = apague até >
○ cit = mude dentro da tag
● f = encontra o caractere naquela linha, parando nele
● t = encontra o caractere naquela linha, para antes (until)
● dt> = delete tudo até (t) o caractere >
Dobrando trechos do código (folds) - 1/2
● Esconder trechos do código (fold)
○ início função
○ v = modo visual
○ marca toda a função
○ zf
● Modo mais rápido
○ v = entra em modo de marcação
○ 150g = marca até a linha 150
○ zf
● Outro modo rápido
○ :10,20fold
Dobrando trechos do código (folds) - 2/2
● Criamos o diretório de armazenamento dos folds
○ ::! mkdir -p .vim/view
○ :mkview
○ :loadview
● Teclas rápidas
○ za = exibe e esconde o fold
○ zo = abre novamente o fold (open)
○ zc = fecha o fold (close)
○ zd = apaga o fold (delete)
○ zR = expandir todos folds
○ zM = recolhe todos os folds
○ zE = excluir todas os folds
Comandos diversos
● i = modo de edição (insert)
● y = copia
● Y = copia linha inteira
● p = cola o que foi copiado depois do cursor
● P = cola o que foi copiado antes do cursor
● u = desfaz alterações
● r = faz substituições rápidas , um caractere (replace)
● R = faz modo replace de editor (sobrescrevendo)
● t = encontra caracter para frente (para antes)
● T = encontra caracter para trás (para antes)
Comandos diversos
● J = junta as linhas
● x = deleta um caractere (pra frente)
● X = deleta voltando
● c = change
● v = entra no modo seleção
● V = modo seleção de linha
● b = volta palavra
● n = avança na pesquisa pra frente
● N = avança na pesquisa pra trás
Criando marcações e movimentando entre elas
● Criando marcação
○ ms (s = letra referência para marcação)
○ m1 (1 = marcação com numero)
● Movimentar entre as marcações
○ 's (aspas simples + marcação)
○ '1
● :marks = visualizar as marcações
● :delmarks 1 (deleta a marcação referenciada como 1)
● :delmarks a-c (deleta intervalo)
● :delmarks 1 3 (grupo por espaços)
● :delmarks! = remove todas as marcações criadas
Busca na linha
● f + caractere = busca a ocorrência na linha
● F + caractere = busca reversa da ocorrência
● Deleção com busca
○ df + caractere = deleta do cursor até o caractere
Várias telas no VIM
● CTRL + w v = divide na vertical
● CTRL + w w = se movimenta entre as telas
● CTRL + w s = divide na horizontal
● CTRL + w q = fecha a janela atual
● :e arquivo = abre o arquivo na tela atual
● ESC :q! = fecha o arquivo da tela atual
● ESC :qa! = fecha todos os arquivos
● ESC :term = abre um terminal na tela atual (exit = fecha)
● ESC :vertical :term = abre um terminal na vertical
● CTRL + w 10- = redimensiona a janela atual menos 10 linhas
● CTRL + w 10+ = redimensiona a janela atual mais 10 linhas
Buffers
● ESC :ls = exibe lista de buffers
○ 1 = número do buffer
○ %a = identifica buffer ativo
○ nome = nome do arquivo
○ onde se encontra o cursor no arquivo
● ESC :bp = vai para o buffer anterior (preview)
● ESC :bn = vai para o próximo buffer (next)
● CTRL + 6 = alterna entre os buffers ativo (%a) e o (#)
● ESC :b3 = vai para o buffer número 3
● ESC :e! = retorna para o último estado salvo (checkout)
● ESC :bd1 = deleta o buffer de número 1
Macros
● q = inicia a gravação de uma macro
● ATENÇÃO: Cada letra ou número do teclado o vim entende como um
registrador
● qa = inicia a gravação da macro , identificando ela com a letra
“a”, para poder chamá-la depois
● q = apertando novamente finaliza a gravação da macro
● @a = Executa a macro que chamamos de “a”
● @@ = Executa a última macro executada
● 10@a = Executa a macro “a” 10 vezes
● 99@@ = Executa a última macro 99 vezes
Tabs
● Abrindo vários arquivos
○ vim -p a b c
● gt = avança entre as abas
● gT = volta entre as abas
● 3gt = vai para a aba número 3
● :tabedit d = abre o arquivo de nome d em uma aba
● :qa! = fecha todas as abas
● Carregando a saída do comando em uma Tab
○ :tabnew | read !grep -Hnr 'Server'
● :tabs = lista as tabs
Mais splits e windows
● CTRL+w v = abre janela na vertical
● CTRL+w s = abre janela na horizontal
● :sp <fname> = abre arquivo em janela na horizontal
● :vs <fname> = abre arquivo em janela na vertical
● CTRL+w q = fecha janela
outros…
● CTRL+x CTRL+n = autocompletar (usando palavras dentro do arquivo
atual)
● CTRL+x CTRL+l = autocompletar a linha inteira
● CTRL+x CTRL+f = autocompletar sistema de arquivos (insert antes)
● Usando xargs
○ :%!xargs
● :ls = lista os buffers abertos
● Percorre todo o arquivo e vai encodando em base64 cada linha
○ :%!xargs -I{} bash -c 'echo {} | base64'
REFERÊNCIAS
● Geofisicando - Curso de VIM
● Tom Hudson @tomnomnom chats with STÖK - VIM tutorial: linux terminal
tools for bug bounty pentest and redteams
● Tom Hudson - Bug Bounties With Bash - VirSecCon2020 Talk
● Livros: https://iccf-holland.org/vim_books.html
● https://debxp.org/teclas-e-comandos-essenciais-do-vim/
● https://quickref.me/vim.html
● https://openvim.com/
● https://vimdoc.sourceforge.net/htmldoc/
● https://learnbyexample.gitbooks.io/vim-reference/content/Command_Line
_mode.html
● https://paikialog.wordpress.com/2010/11/10/vim-graphical-cheet-sheet/
Obrigado !

Você também pode gostar