=====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 vi arquivo 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, 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//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~~ ---- {{tag>vim}} ===Referencias:=== ---- * http://aurelio.net/vim/vimcard.txt * http://groups.yahoo.com/group/vi-br/ * http://pt.wikibooks.org/wiki/vim * http://rayninfo.co.uk/vimtips.html * http://vimdoc.sourceforge.net/htmldoc/vimfaq.html * http://writequit.org/blog/?cat=464] * http://www.ime.usp.br/~baroni/docs/vim-ide.html * http://www.vim.org/ ---- Dúvidas ou sugestões, comente abaixo: ~~DISCUSSION~~