Table of Contents
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:
Dúvidas ou sugestões, comente abaixo:
Discussion