User Tools

Site Tools


vim

Vim


O vim é um fork do vi e está presente na maioria dos sistemas operacionais modernos, por isso o dominio básico ajudará muito o administrador de sistema a ter condições de trabalhar sem dificuldade em todos eles. Esta erramenta faz uso intensivo de teclado, o que na verdade, faz com que seja muito mais elegante e funcional. A versão atual é a 7.4 com anúncio de lançamento da versão 8.

Aqui coloco algumas dicas que fui colecionando ao longo do tempo.


Para instalação do vim, proceda de acordo com sua distribuição. Considerando o Debian aptitude install vim vim-doc .


O vim tem múltiplos modos de operação e escolher estes modos é importante para seu efetivo uso. Fazer esta escolha não é dificil. Por exemplo, no modo (i)nserção use somente para escrever, não para se movimentar no texto. Use modo normal para se movimentar, modificar, rearranjar a extrutura de seu arquivo. Use o modo (v)isual para visualizar uma seleção, copiar, mover, formatar. Finalmente, o modo de linha de comando permite a entrada de comando, como :set nu ou :set nonu.

dicas:

  • ao abrir um arquivo, o vim está no modo normal
  • para iniciar uma inserção de texto, pressione i
  • para sair do modo inserção, pressione “esc”
  • para entrar no modo de linha de comando, após pressionar “esc”, digite “:“ e entre o comando desejado, como :help
  • o vim usa um arquivo de configurações para cada usuário. Este arquivo fica em /home/usuario/.vimrc. observe arquivo exemplo em .vimrc e acrescente ao seu .vimrc.

vim como editor padrão

Caso o vim não esteja como editor padrão, por exemplo ao executar crontab -e, você pode alterar usando o comando update-alternatives –config editor como root ou com sudo e fazendo sua seleção, como abaixo:

#update-alternatives --config editor
Existem 3 escolhas para a alternativa editor (disponibiliza /usr/bin/editor).
Selecção   Caminho             Prioridade Estado
------------------------------------------------------------
  0            /bin/nano            40        modo automático
  1            /bin/nano            40        modo manual
* 2            /usr/bin/vim.basic   30        modo manual
  3            /usr/bin/vim.tiny    10        modo manual

Básico:

modos de edição de arquivos:


 vi <sem argumento, abre editor>
 vi arquivo <carrega arquivo na memória, cria arquivo se o mesmo não existir> 
 vi -p *.txt --> abre todos os arquivos txt no diretorio. use :tabn e :tabp para navegar entre as janelas; 
 :qa ou :qa! salva e fecha todos os arquivos
 
 
 Para sair do vi, <Esc> para sair do modo edição, q: para sair sem salvar ou  :x para salvar o conteúdo.
 :e! para carregar novamente o arquivo, descartando as últimas alterações.
 :enew! fecha arquivo atual e inicia outro.      
 Caso tenha iniciado o vi sem um nome de arquivo definido, será solicitado que informe um nome de arquivo.
 :w arquivo -> salva arquivo atual
 vi -b arquivo –> abre arquivo no modo binario
 vi -R arquivo –> abre no modo somente leitura
 vi +10 arquivo –> abre o aquivo na linha 10
 vi +/palavra arquivo –> abre o arquivo e procura palavra
 vi +%s/velho/novo arquivo –> abre arquivo e troca palavra velho por novo

Intermediário:

quebra de linha


 %s/,/,\r/g (help sub-replace-special)
 para inserir uma quebra de linha apos um delimitador como ”,”.
 util quando voce tem um arquivo assim : 1,2,3,4
 e quer um arquivo assim
 1,
 2,
 3,
 4

:%s/\//\r/g - Uma quebra de linha sempre que encontrar uma "/";

quebra de linha sem delimitador:


 %s/$/\r/
 10,20s/$/\r/

apagar textos


 x –> apaga texto sobre o cursor
 a –> insere texto
 dd –> apaga uma linha inteira
 dw –> apaga palavra sobre o cursor
 d$ –> apaga tudo do cursor atéo final da linha
 dG –> apaga tudo do cursor ate o final do arquivo

alterando textos


 R –> pressionando antes de uma palavra, basta digitar a palavra nova
 r –> substitui um unico caractere no texto
 ~ –> altera um caractere para Mm (maiusculo/minusculo)
 cw –> altera palavra ou parte da palavra a esquerda do cursor
 cc –> altera linha
 C –> altera parte da linha a direita do cursor
 J –> junta linha corrente com a proxima linha
 xp –> muda o caracter que o cursor esta posicionado com o caracter a direita
 u –> desfaz o comando anterior
 U –> desfaz todas as alteracoes da linha
 :u –> desfaz o comando anterior da linha
 :g/.*/mo0 –> inverte o texto
 :g/^/mo0 –> coloca o texto invertido na ordem correta
 

comandos de movimentacao no texto


 h –> esquerda
 j –> para baixo
 k –> para cima
 l –> para direita
 w –> move cursor para inicio da proxima palavra
 b –> move cursor para comeco da palavra anterior
 CTRL-F –> move o cursor uma pagina a frente
 CTRL-B –> move o cursor uma pagina para tras
 G – > move o cursor para o final do arquivo
 55G –> move o cursor para a linha 55
 |1| para navegar diretamente para uma posicao em um arquivo texto, use | n |, onde n eh o numero da posicao que deseja ir

copiar ou mover texto


 yy ou Y –> marca linha a ser copiada
 p –> copia linha marcada abaixo da linha corrente
 P–> copia linha marcada acima da linha corrente
 dd –> apaga linha
 1,2 co 3 –> copia linha 1 e 2 e coloca apos a linha 3
 4,5 m 10 –> move linha 4,5 colocando apos a linha 10
 :g/^$/d   apaga linhas em branco
 :%s/^\n// apaga linhas em branco

caracteres especiais em procuras


 ^ início de linha
 $ final de linha
 . qualquer caracter
 * 0 ou mais caracteres
 \+ uma ou mais ocorrência
 ^$ linhas em branco
 \s,\S espaço em branco,não-espa
 \d,\D dígito, não-dígit
 \u,\U,\l,\L maiúsculas,não-maiúsculas,minúsculas,não-minú
 \<,\> início,fim de uma palavr
 / \<.\{3}\> sequências de exatamente três caractere
 / \<\w\{,5} palavras (sem dígitos ou caracteres especiais) de até digitos
 :bufdo BufferDo: realiza as substituições em todos os arquivos do buffer

Avançado:

comandos com janelas


Ctrl+ ^Wn Nova Janela
Ctrl+ ^Wn Dividir a Janela
Ctrl+ ^Wn^^ Dividir para #
Ctrl+ ^Wv Dividir verticalmente
Ctrl+ ^Wc Fechar
Ctrl+ ^Wo Fechar outra(s)
Ctrl+ ^WR Girar para cima
Ctrl+ ^Wr Girar para baixo
Ctrl+ ^W= Mesmo Tamanho
Ctrl+ ^W_ Altura Maxima
Ctrl+ ^W1_ Altura Minima
Ctrl+ ^W| Largura Maxima
Ctrl+ ^W1| Largura Minima
Ctrl+ ^WK Mover para cima
Ctrl+ ^WJ Mover para Baixo
Ctrl+ ^WH Mover para esquerda
Ctrl+ ^WL Mover para Direita
 

trabalhando com abas


 abrir nova aba - :tabnew ou :tabnew /caminho/para/arquivo
 ir para proxima aba -  :tabnext
 ir para aba anterior - :tabprevious
 ir para última aba -   :tablast
 ir para primeira aba-  :tabfirst
 fechar aba corrente -  :tabclose
 
 fechar todas as abas, exceto a atual- :tabonly
 sair de todas as abas - :qall
 sair de todas as abas ignorando mudancas - :qall!
 salvar todas as abas - :wall
 salvar e sair de todas as abas - : xall

dividindo a tela


 horizontalmente - :split
 verticalmente - :vsplit
 navegar entre as divisoes da tela - manter pressionado e digitar ww
 fechar a divisao de tela atual - :q

em modo visual


 selecao visual, recortar, copiar, colar:
 para comecar/encerrar o modo de selecao visual, va para o modo de visualizacao (esc) e tecle v
 selecao da linha inteira: V (sim, V maiusculo, pode ser com shift ou caps lock)
 recortar: no vim recortar e deletar sao a mesma coisa, pense como uma remocao que mantem o item removido em memoria:
 deletar/recortar a linha inteira: dd
 colar do cursor em diante: p (funciona em modo visual, substituindo o item selecionado)
 colar do cursor para tras: p
 copiar em modo nao visual: yy (copia a linha inteira)
 copiar visualmente:y
 desfazendo acoes: u
 refazendo o desfeito: r
 

auto-completion


 enquanto estiver em modo de insercao tecle:
 n ou p para autocompletar reaproveitando as palavras do arquivo atual
 para autocompletar usando recursos do tipo de arquivo atual(javascript, html, python, css, ruby, etc):
 mantenha pressionado e tecle xo
 

transformando em UPPERCASE ou lowercase


 :%s/./\U&/g –> Uppercase para todo o texto
 :%s/./\L&/g –> Lowercase para todos o texto
 guu -> lowercase para a linha corrente
 gUU -> Uppercase para a linha corrente
 ~   -> inverte case para o caracter atual
 

inserindo comentarios


 :1,10s/^/#/g –> insere comentario da linha 1 ate a linha 10
 :.,+5s/$/#/ –> insere comentario no final das proximas 5 linhas
 para repetir na linha 11 por exemplo, digite
 :11  &
 

Editando com :g

 :g/^$/d      --> apaga linhas em branco
 :g/^\s*$/d   --> apaga todas as linhas vazias ou em branco 
 :g/^$/././-j --> converte múltiplas linhas em branco para uma linha
 :g/padrao/d  --> apaga a linha que contem o padrão procurado
 :g/padrao/ . w >> extrai o padrão procurado e grava em arquivo  
 :g/^/m0      --> inverte o arquivo 
 

Tips & Tricks:

impressão com o vim

 Para imprimir todo o texto :ha :ha –> hardcopy
 Para imprimir um intervalo :10,50 ha
 Para definir outra impressora :set pdev=printer 
                               :set pdev=usblp2
 
 Para definir uma impressora pdf :set pdev=pdf 
                                 :set printoptions=paper:A4,syntax:y,wrap:y

O comando :ha ou :hardcopy converte o texto em postscript e envia para a fila padrão; Para uma lista completa de opções consulte :help popt

Sequências numéricas

Uma sequência numérica usando o for:

:for i in range(1,254) | .put ='192.168.1.'.i  | endfor

Uma sequência numérica normal também pode ser obtida usando a função put:

:put =range(30,40)

Pode se usar valores negativos:

:put =range(-40,-30)

Uma sequência numérica normal também pode ser obtida com a função seq do shell:

:%!seq 10 100 -> uma sequência de 10 a 100 
:%!seq 10     -> sequência até 10
:%!seq -10 100 -> uma sequência de -10 a 100 

executando comandos no linux

 :!command
 :!date
 :!sh
 :r !date
 :!ls
 :r arquivo
 :1,10!sort –> ordena da linha 1 ate a 10
 :sort!     --> inverte ordem
 :sort //flags// 
 i ignora Maiuculas/Minusculas
 u apaga duplicados 
 n ordena pelo primeiro decimal da linha

O sort ainda pode ser chamado como comando externo, por exemplo !sort. Suas opções mais comuns são:

 :%!sort -u  --> apresenta linha únicas
 :%!sort -f  --> ignora min/mai ao ordenar
 :%!sort -r  --> apresenta na ordem inversa

unir linhas

 :g/<padrao>/j  -> procura global por um padrao e une com a próxima linha
 :shift+j       -> une linha atual com a próxima

paste

Ao colar um texto no vim, o vim pode quebrar as linhas, identando as estranhamente. Isto acontede pois o vim não consegue identificar entre o texto digitado e o texto “colado” ou seja, pasted.

:set paste
:set nopaste 
ggVG=  -->formatará todo o documento

Explorando

:pwd   --> mostra o diretório do documento atual
:Ex    --> explora diretórios
:cd ..  cd ~ --> move para diretórios (:cd /home/~ )

Mostrando somente linhas sem comentários

:g!/^#
:g!/^#\|^$    ''ocultando linhas em branco''

com o grep:
grep -Ev '[:blank]*#|^[:blank]*$' arq.txt

~~socialite twitter email~~


Referencias:

Discussion

Enter your comment. Wiki syntax is allowed:
 
vim.txt · Last modified: 2018/09/06 15:08 by fafanet