Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Vim
Etapas de desenvolvimento do livro - 5 fases Quase nenhum texto: Texto em criao: Texto em maturao: Texto desenvolvido: Texto abrangente:
Etapas de desenvolvimento do livro - 9 fases Incio: Bsico: Criao: Desenvolvimento: Maturao: Reviso: Desenvolvido: Finalizao: Finalizado:
1. Introduo 2. Movendo 3. Modos de operao 4. Os saltos 5. Editando 6. Desfazendo 7. Salvando 8. Usando marcas 9. Folders 10. Registros 11. Buscas e substituies 12. Dividindo a janela 13. Repetio de comandos 14. 15. 16. 17. 18. 19. 20. 21. 22. Usando comandos externos Como editar preferncias Configurando a verificao ortogrfica Snippets Um wiki para o Vim Hbitos para edio efetiva Modelines Plugins Referncias
Vim/Introduo
Vim/Introduo
Introduo
" " " v /(_)\ ^ ^ ( O O ) ====oOO==(_)==OOo=====
O Vim um editor extremamente configurvel, criado para permitir a edio de textos de forma eficiente. Tambm um melhoramento do editor vi, um tradicional programa dos sistemas UNIX. Possui uma srie de mudanas em relao a este ltimo. O prprio slogan do vim "Vi IMproved". Ou seja, Vi Melhorado. O Vim to conhecido e respeitado entre programadores, e to til para programao, que muitos o consideram uma verdadeira IDE. Ele capaz de reconhecer mais de 400 sintaxes de linguagens de programao e marcao, possui mapeamento para teclas, macros, abreviaes, busca por expresses regulares [1], entre outras facilidades. Conta com uma comunidade bastante atuante e , ao lado do Emacs um dos editores mais usados nos sistemas GNU, mas pode ser tambm instalado em outros sistemas, como o Windows e o Mac. O site oficial do Vim : http:/ / www. vim. org Para chamar o vim digite num terminal: vim meu_texto.txt Para chamar a ajuda do vim digite: :help Ou simplesmente: :h Obs: no vim quase todos os comandos podem ser abreviados, no caso 'help' pode ser chamado por 'h' e assim por diante. Para navegar na ajuda do vim use CTRL-], e para voltar use CTRL+O. Se voc estiver realmente desesperado, digite: :help!
Vim/Introduo
Dicas
Ao longo do livro lguns comando ou dicas podem estar duplicados, isto til devido ao contexto e tambm porque o aprendizado por saturao um timo recurso, portanto se ver uma dica duplicada, antes de reclamar procure ver se j sabe mesmo o que est sendo passado!
Em caso de erros
Recarregue o arquivo que est sendo editado assim: <esc> .......... para sair do modo de edio :e! ............ recarrega o arquivo sem qualquer edio ou saia do arquivo sem modifica-lo :q! ............ sai do arquivo sem edita-lo :wq! ........... tenta gravar e sair forado prximo tpico Movendo Voltar ao ndice
Referncias
[1] http:/ / guia-er. sourceforge. net/ guia-er. html
Vim/Movendo
Vim/Movendo
Movendo-se no Vim
Estando em modo insert <ESC> lhe leva para o modo normal as letras h,k,l,j funcionam como setas: k h j ou seja, a letra k usada para subir no texto a letra j para descer, a letra h para mover-se para a esquerda e a letra l para mover-se para a direita. A idia que se consiga ir para qualquer lugar do texto sem tirar as mo do teclado. A maioria dos comandos do vim pode ser precedida por um quantificador j ............... 5j .............. k ............... Ctrl-f .......... Ctrl-b .......... Em modo normal fx ............... Fx ............... tx ............... Tx ............... anterior w ................ W ................ E ................ hifens) e ................ zt ............... zm ............... move move move move o o o o cursor cursor cursor cursor at at at at a prxima ocorrncia de x a ocorrncia anterior de x um caractere antes de 'x' um caractere depois de 'x' em modo normal desce uma linha descer 5 linhas em modo normal sobe uma linha avana uma pgina (equivale a PAGEDOW) retrocede uma pgina (equivale a PAGEUP) l
move o cursor para o incio da prxima palavra pula para prxima palavra (desconsidera hifens) pula para o final de prxima palavra (desconsidera move o cursor para o final da prxima palavra posiciona o cursor no topo da pgina posiciona o cursor no meio da pgina
Em modo normal 'dd' deleta uma linha, ou seja o 'd' est associado a deleo, portanto voc pode fazer conbinaes do tipo... dfx .............. deleta at o prximo x d5j .............. deleta 5 linhas Em modo normal 'yy' copia a linha atual, ou seja o 'y' esto associado a cpia, portanto voc pode fazer conbinaes do tipo... yfx .............. copia at o prximo x y5j .............. copia 5 linhas O que foi deletado ou copiado pode ser colado
Vim/Movendo p ................ cola o que foi copiado ou deletado abaixo P ................ cola o que foi copiado ou deletado acima
Big word's
Para o vim 'palavras-separadas-por-hifen' so consideradas em separado, portanto se voc usar, em modo normal 'e' avanar entre as palavras ele pular uma de cada vez, noentanto se usar 'E' em maisculo (como visto) ele pular a "grande palavra :) E .......... pula para o final de palavras com hifen B .......... pula palavras com hifen (retrocede) W .......... pula palavras hifenizadas Podemos pular sentenas (at ponto ou vrgula usando parnteses ) ( } { .......... .......... .......... .......... pula pula pula pula uma sentena uma sentena um pargrafo um pargrafo para para para para frente trz frente trz
Dica: Voc pode combinar o comando de deleo 'd' com o comando de movimento (considere o modo normal) para apagar at a prxima vrgula use: df, Para entrar em Modo de Edio pressione i I a A o O ................inicia ................inicia ................inicia ................inicia ................inicia ................inicia o o o o o o modo modo modo modo modo modo insert insert insert insert insert insert na posio atual no incio da linha atual aps o caractere atual no final da linha atual na linha abaixo uma linha acima
Para ir para linhas especficas digite :n<ENTER> onde n corresponde ao nmero da linha Para retornar ao modo normal pressione ESC ou use Control+L ^L (letra minscula) Em modo normal voc pode ir para uma linha qualquer digitando ngg Onde n o nmero da linha que voc deseja
Saltos no documento
gg ............. G .............. 25gg ........... '' ............. estava `' ............. estava 0 .............. vai para o vai para o salta para salta para incio do arquivo final do arquivo a linha 25 a linha da ltima posio em que o cursor
salta exatamente para a posio em que o cursor vai para o incio da linha
Vim/Movendo $ .............. gi ............. gv ............. neste local gf ............. gd ............. gD ............. cursor vai para o final da linha entra em modo insert no ponto da ltima edio repete a ltima seleo visual e posiciona o cursor abre o arquivo sob o cursor salta para declarao de varivel sob o cursor salta para declaraao (global) de varivel sob o
Caso tenha uma estrutura como abaixo: def pot(x): return x**2 E tiver uma referncia qualquer para a funo 'pot' e desejar mover-se at sua definio basta posicionar o cursor sobre a palavra 'pot' e pressionar (em modo normal) gd Se a varivel for global, ou seja, estive fora do documento (provavelmente em outro) use... gD Quando definimos uma varivel tipo var = 'teste' e em algum ponto do documento houver referncia a esta varivel e quiser-mos ver seu contedo fazemos [i Obs: observe a barra de status do vim se o tipo de arquivo est certo, tipo ft=python a busca por definies de funo s funciona se o tipo de arquivo estiver correto :set ft=python outro detalhe para voltar ao ltimo ponto em que voc estava ''
Paginando
Para rolar uma pgina de cada vez (em modo normal) Ctrl-f Ctrl-b
Lista de saltos
:h jumps ........ :jumps .......... control-i ....... control-o ....... ajuda exibe salta salta sobre a lista de saltos a lista de saltos para a posio mais recente para a posio mais antiga
Vim/Movendo
Usando marcadores
No vim podemos marcar o ponto em que o cursor est, voc deve estar em modo normal, portanto pressione <ESC> voc estar em modo normal, assim podem pressionar a tecla 'm' seguida de uma das letras do alfabeto ma `a "cria uma marca 'a" move o cursor para a marca 'a'
Marcas globais
Marcas globais so marcas que permitem pular de um arquivo a outro. Para criar uma marca global use a letra que designa a marca em maisculo mA "cria uma marca global 'A' "
Veja tambm
Para ler mais sobre como mover-se veja a seo os saltos Voltar ao ndice
Vim/Modos de operao
Vim/Modos de operao
Modos de operao
Em oposio esmagadora maioria dos editores o vim um editor modal, a princpio isto dificulta a vida do iniciante, mas abre um universo de possibilidades imenso, pois ao trabalhar com modos distintos uma tecla de atalho pode ter vrios significados, seno vejamos: Em modo normal pressionar duas vezes a letra d... dd apaga a linha atual, j em modo insert ele ir se comportar como se voc estivesse usando qualquer outro editor, ou seja, ir inserir duas vezes a letra 'd'. Em modo normal pressionar a tecla 'v' inicia uma seleo visual (use as setas de direo). Para sair do novo visual <esc>, mas o vim tem, em modo normal teclas de direo mais prticas k h j Imagine as letras acima como teclas de direo, a letra 'k' uma seta acima a letra 'j' uma seta abaixo e assim por diante. l
Agora comeamos a sentir o gostinho de usar o vim, uma tecla seja maiscula ou minscula, faz muita diferena se voc no estiver em modo de insero, e para sair do do modo insert sempre use <esc>. A tabela abaixo mostra uma referncia rpida para os modos de operao do vim, a seguir mais detalhes sobre cada um dos modos.
Vim/Modos de operao
2
Para acessar: i ou a
Insert (Insero)
Neste modo feita a insero de texto, para entrar neste modo basta pressionar a tecla i de insert ou a tecla a de append.
Visual
Neste modo podemos selecionar blocos verticais de texto. exibido um destaque visual. uma das melhores formas de se copiar contedo no Vim. Neste modo digitamos comandos como o de salvar (:w</code) ou para ir para uma linha qualquer (:100).
Para acessar (a partir do modo normal): v - seleo de caracteres V (maisculo) - seleo de linhas inteiras ^V - seleo de blocos Para acessar: :
Comando
Dicas
Para usar um comando do modo normal no modo insert faa: Control+O (comando) Para repetir o ltimo trecho do modo insert faa: i Control+a Para inserir texto da rea de transferncia (caso esteja em modo insert) faa: Shift-insert Para entrar em modo de edio no mesmo ponto da ltima edio gi Para repetir uma seleo (visual) gv No vim cada arquivo aberto chamado de 'buffer' ou seja dados carregados na memria, voc pode acessar o mesmo buffer em mais de uma janela, bem como dividir a jenale em vrios buffers distintos, veremos isso mais adiante. Voltar ao ndice
Vim/Os saltos
Vim/Os saltos
Os saltos
Observap: lembre-se '^' equivale a CTRL, portanto ^I = CTROL-I Trechos entre colchetes so opcionais Para ir para o comeo do arquivo digite: gg Para ir para o fim do arquivo digite: G Para ir para o comeo de uma linha digite o caractere 0 Para ir para o final de uma linha digite o caractere $ Para ir para a prxima ocorrncia de uma letra faa: f<letra> - sentido inverso F<letra> Para colocar o cursor uma letra antes da desejada t<letra> - sentido inverso T<letra> Para saltar para a prxima ocorrncia da palavra onde est o cursor: * Para saltar para a ltima ocorrncia da palavra onde est o cursor: # Para localizar o parntese correspondente % Iniciar a insero no fim da linha A Iniciar a insero no comeo da linha I Pode-se fazer combinaes, por exemplo: fx..........move at o prximo x dfx.........deleta at o prximo x Retroceder na lista de saltos, incluindo outros arquivos, ^o Avanar na lista de saltos
Vim/Os saltos ^i Abrir o ltimo arquivo editado "modo normal" '0 Abrir o penltimo arquivo editado '1 Para pular para uma definio de funo (para mais detalhes veja :h gd) gd Para pular para o fim do pargrafo faa } Para pular para a coluna 10 da linha atual 10| Pular para definio de uma varivel [i ........ Mostra a primeira linha que contm a palavra sob o cursor
O atalho acima til quando se est programando, se estiver num trecho de cdigo pode visualizar o contedo das variveis que foram definidas acima Voc pode abrir vrios arquivos tipo txt usando wildcards tipo *.txt e fazer algo como gravar e ir para o prximo "write + next" com o comando a seguir :wn Ou gravar um arquivo e voltar ao anterior :wp Pode ainda "rebobinar" sua lista de arquivos :) :rew[wind] Ou ir para o primeiro :fir[ist]
Lista de alteraes
O vim mantm uma lista de alteraes, para avanar nas alteraes use g, Para recuar nas alteraes g; Para visualizar a lista de alteraes :changes Para mais detalhes
Vim/Os saltos if l:num != 1 echo l:list let l:input=input("Which ? (<enter>=nothing)\n") if strlen(l:input)==0 return endif if strlen(substitute(l:input, "[0-9]", "", "g"))>0 echo "Not a number" return endif if l:input<1 || l:input>l:num echo "Out of range" return endif let l:line=matchstr("\n".l:list, "\n".l:input."\t[^\n]*") else let l:line=l:list endif let l:line=substitute(l:line, "^[^\t]*\t./", "", "") execute ":e ".l:line endfunction command! -nargs=1 Find :call Find("<args>") -------------------8<-----------------------------------------Voltar ao ndice
Vim/Editando
Vim/Editando
Deletando uma parte do texto
O comando "d" deleta uma parte do texto, copiando o contedo para a memria. dd 5dd dw 5dw dl 5dl d^ d$ apaga a linha atual apaga 5 linhas (tambm pode ser: d5d) apaga uma palavra apaga 5 palavras (tambm pode ser: d5w) apaga uma letra (sinnimo: x) apaga 5 letras (tambm pode ser: d5l ou 5x) apaga da posio atual at o incio da linha (sinnimo: d0) apaga da posio atual at o final da linha (sinnimo: D)
dgg - apaga da posio atual at o incio do arquivo dG - apaga da posio atual at o final do arquivo D - apaga o resto da linha partir do ponto atual Depois do texto ter sido colocado na memria, digite "p" para "colar" o texto em uma outra posio. Outros comandos: diw - apaga uma palavra mesmo que o cursor no esteja posicionado no incio dela dip - apaga o pargrafo atual d4b - apaga as quatro palavras anteriores dfx - apaga at o prximo x d/casa/+1 - deleta do ponto atual at a linha aps a palava casa
Vim/Editando ygg yG copia da posio atual at o incio do arquivo copia da posio atual at o final do arquivo
Vim/Editando
Exemplos
Digamos que voc tem o seguinte texto... 1 2 3 4 5 6 7 8 9 10 este este este este este este este este este este um um um um um um um um um um texto texto texto texto texto texto texto texto texto texto novo novo novo novo novo novo novo novo novo novo
... e quer apagar " um texto" da linha 5 at o fim, isso pode ser feito assim :5,$ normal 0wd3w Exeplicando o comando acima: :5,$ ............ normal .......... 0 ............... w ............... d3w ............. indica o intervalo que da linha 5 at o fim "$" executa em modo normal zero move o cursor para o comeo da linha pula uma palavra delete 3 palavras 'w'
Obs: claro que um comando de substituio simples :5,$s/ um texto//g Resolveria neste caso, mas a vantagem do mtodo anterior que vlido para trs palavras, sejam quais forem. :)
Vim/Editando
"x3dd - apaga 3 linhas, copiando seu contedo para o registrador x "xp - "cola" o contedo do registrador x
"ayy - copia uma linha, sem apagar, para o registrador a "a3yy - copia 3 linhas, sem apagar, para o registrador a "ayw - copia uma palavra, sem apagar, para o registrador a "a3yw - copia 3 palavras, sem apagar, para o registrador a No modo insert voc pode usar um atalho para colar rapidamente o contedo de um registrador Control+r+(registro) Para colar o contedo do registrador "a" Control+r+a Para copiar a linha atual para a rea de transferncia "+yy Para colar da rea de transferncia "+p
Edies complexas
Trocando palavras de lugar: coloque o cursor no espao antes da 1 palavra e digite: deep Trocando letras de lugar: xp Trocando linhas de lugar: ddp Tornando todo o texto maisculo gggUG
Vim/Editando
Indentando
>> - Indenta a linha atual ^T - Indenta a linha atual em modo insert ^D - Remove indentao em modo insert >ip - indenta o pargrafo atual
Ordenando
O vim 7 passa a ter um comando de ordenao que tambm retira linhas duplicadas :sort u ............ ordena e retira linhas duplicadas :sort n ............ ordena numericamente Obs: a ordenao numerca diferente da ordenao alfabtica se em um trecho contendo algo como: 8 9 10 11 12 Voc tentar fazer: :sort
Vim/Editando O vim colocar nas trs primeiras linhas 10 11 12 Portanto lembre-se que se a ordenao elvover nmeros use: :sort n Voc pode fazer a ordenao em um intervalo assim: :1,15 sort n O comando acima diz: ordene numericamente da linha 1 at a linha 15
O arquivo alternativo
muito comum voc editar um arquivo no vim, e inocentemente imaginar que no vai mais modificar qualquer coisa nele, voc ento abre um novo arquivo: :e novo-arquivo.txt Mas no mais que de repente voc lembra "Poxa eu queria colocar mais uma linha no arquivo em que estava" Para estes casos use o atalho CTRL-6 Dica: Este comando booleano, ou seja, cada vez que voc pressionar o atalho ele pula para o ltimo arquivo editado!
Vim/Editando
Dicas adicionais
Que tal abrir um arquivo j na linha 10 por exemplo? vim +10 /caminho/para/o/arquivo Ou ainda abrir na linha que contm um determinado padro? vim +/padro arquivo Obs: caso o padro tenha espaos no nome coloque entre parnteses ou use escape "\" a fim de no obter erro. Movendo um trecho de forma inusitada :20,30m 0 O comando acima diz: da linha 20 at a linha trinta mova para a linha zero, ou seja, comeo do arquivo. vip .......... paragraph' yip .......... dip .......... "ayip ........ yit .......... xml adiciona seleo visual ao pargrafo atual 'inner copia o pargrafo atual deleta o pargrafo atual copia o pargrafo atual para o registro 'a' copia a tag agual 'inner tag' til para arquivos html
Vim/Editando
Veja tambm
Na seo Buscas e substituies voc encontra mais dicas de edio! Voltar ao ndice
Vim/Desfazendo
Vim/Desfazendo
Desfazendo
Se voc cometer um erro, no se preocupe! Use o comando "undo": u comandos) U CTRL-R desfaz todas as mudanas na ltima linha editada refaz as mudanas desfeitas (isto , um "undo do undo"). desfaz a ltima mudana (pode ser repetido para diversos
Undo tree
Um novo recurso muito interessante foi adicionado ao vim `a partir da verso 7 (Obs: para cada alterao sugerida saia do modo insert <esc> e inicie a nova alterao) a chamada rvore do desfazer. Se voc desfaz alguma coisa, fez uma alterao um novo 'branch' ou galho, derivao de altera, ou seja l como queira chamar criado. Suponha que voc edite um arquivo assim: one ~ | change 1 | one too ~ / \ change 2 change 3 | | one two me too ~ Se voc seguir as alteraes propostas acima, ou seja, voltar at alterao 1 e seguir para alterao 3, ver que o desfazer/refazer linear no resolve todos os seus problemas, isto se deve ao fato de que a maioria dos editores tem um desfazer/refazer linear, ou seja, no pode haver derivao (branch) de alteraes, para acessar todas as alteraes use gg+ ........ retrocede na rvore de alteraes ........ avana na lista de alteraes
Vim/Desfazendo
Obs: A necessidade do ESC para demarcar as aes, pois o vim considera cada insero uma ao. Agora usando o atalho de desfazer tradicional 'u' e de refazer Ctrl-r observe que no mais possvel acessar todas as alteraes efetuadas Em resumo, se voc fizer uma nova alterao aps um desfazer (alterao derivada) o comando refazer no mais vai ser possvel para aquele momento. Agora volte at a alterao 1 e use seguidas vezes g+ e / ou gDessa forma voc acessar todas as alteraes ocorridas no texto! Voltar ao ndice
Vim/Salvando
Vim/Salvando
Salvando
A maneira mais simples de salvar um arquivo, usar o comando :w. Para especificar um novo nome para o arquivo, simplesmente digite :w novo_nome. O contedo ser gravado no arquivo "novo_nome" e voc continuar no arquivo original. Tambm existe o comando :saveas, que salva o arquivo com um novo nome e muda para esse novo arquivo (o arquivo original no apagado). Para sair do editor, salvando o arquivo atual, digite :x (ou :wq).
:w :w novo_nome :saveas novo_nome :wq :x :10,20 w! ~\Desktop\teste.txt :w! Salva Salva com um novo nome Salva com um novo nome e muda para o novo arquivo Salva e sai da janela atual Salva (apenas se o arquivo foi modificado) e sai da janela atual salva as linhas de 10 a vinte em '~\Desktop\teste.txt'
Fora o salvamento
Vim/Usando marcas
Vim/Usando marcas
Usando marcas
As marcas so um meio eficiente de se pular para um local no arquivo. Para criar uma, estando em modo normal faa: ma Onde m indica a criao de uma marca e a o nome da marca. Para pular para a marca a faa: `a Para voltar ao ponto do ltimo salto '' Para deletar de at a marca a (em modo normal) d'a
Marcas globais
Durante a edio de vrios arquivos defina uma marca global com o comando mA Onde 'm' cria a marca e 'A' (maisculo) define uma marca 'A' acessvel a qualquer momento com o comando 'A Isto far o vim dar um salto at a marca A mesmo que esteja em outro arquivo, bastando apenas que o mesmo esteja aberto. Para abrir vrios arquivos uma soluo seria: vim *.txt Para ir para o prximo arquivo: :bn Para ir para o arquivo anterior :bp Caso existam modificaes no arquivo voc ter que usar write next :wn O comando acima diz: grave e v para o prximo!
Vim/Usando marcas
Dicas extras
Para manipular vrios arquivos voc pode mudar de buffer (arquivo) salvando 'write next' :wn Voltar ao ndice
Vim/Usando folders
Vim/Usando folders
Introduo
Folders so como dobras nas quais o vim esconde partes do texto, algo assim... +-- 10 linhas ------------------------------------------------------------Deste ponto em diante chamaremos os "folders" descritos no manual do vim como dobras! Quando tiver que manipular grandes quantidades de texto tente usar dobras, isto permite uma visualizao completa do texto. Um modo de entender rapidamente como funcionam as dobras no vim seria criando um folder para as prximas 10 (dez) linhas com o comando abaixo: zf10j
Mtodos de dobras
os vim tem seis modos 'fold' so eles: Sintaxe syntax Indentao indent Marcas marker Manual
Para determinar o tipo de dobra faa :set foldmethod=tipo onde o tipo pode ser um dos tipos listados acima, exemplo: :set foldmethod=marker Outro modo para determinar o mtodo de dobra seria colocando na ltima linha do seu arquivo algo assim: vim: set fdm=marker tw=78:ts=3: ft:potwiki Obs: deve haver um espao entre a palavra inicial 'vim' e o comeo da linha este recurso chama-se modeline (leia mais na seo apropriada) onde "fdm" significa foldmethod, ou seja, mtodo de dobra. Por curiosidade o tipo de arquivo seria ft:potwiki ou ft:txt
Manipulando dobras
zo ............... zR ............... zc ............... zfap ............. zd ............... zf/casa .......... abre uma dobra abre todas as dobras do arquivo atual fecha uma dobra cria uma dobra para o pargrafo 'ap' atual apaga o folder (no o seu contedo) cria uma dobra at a palavra casa
Vim/Usando folders zf'a ............. zj ............... zk ............... zi ............... :set fdl=0 ....... cria uma dobra at a marca 'a' desce 'j' at a prxima dobra sobe 'k' at a dobra anterior desabilita ou habilita os folders nivel de folder 0 (foldlevel)
Para abrir e fechar as dobras "em modo normal" usando a barra de espaos coloque o trecho abaixo no seu arquivo de configurao do vim .vimrc - veja como editar preferncias no vim nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
Veja tambm
Voltar ao ndice
Vim/Usando registros
Vim/Usando registros
O vim possui nove tipos de registros, cada tipo tem uma utilidade especfica, por exemplo voc pode usar um registro que guarda o ltimo comando digitado, pode ainda imprimir dentro do texto o nome do prprio arquivo, vamos aos detalhes. 1. 2. 3. 4. 5. 6. 7. 8. 9. O registro sem nome "" 10 registros nomeados de "0 a 9" O registro de pequenas delees "26 registros nomeados de "a at z" ou de "A at Z" 4 registros somente leitura O registro de expresses "= Os registro de seleo e arrastar "*, "+ e "~ O registro "buraco negro" Registro do ltimo padro de busca "/
Para acessar o contedo deste registro basta usar as letras p ou P que na verdade so comandos para colar abaixo da linha atual e acima da linha atual (em modo normal)
Registros nomeados de 0 a 9
O registro zero armazena o contedo da ltima cpia 'yy', partir do registro 1 vo sendo armazenadas as delees sucessivas de modo que a mais recente deleo ser armazenada no registro 1 e os registros vo sendo incrementados em direo ao nono. Deleo menores que uma linha no so armazenadas nestes registros, caso em que o vim usa o registro de pequenas delees ou que se tenha especificado algum outro registro. Para saber mais excees para este registro leia o manual "change.txt" partir da linha 1011. :help registers
Vim/Usando registros
Uma forma prtica de usar registros em modo insert usando Control-r Observao: lembre-se que no vim o circunflexo representa (nos atalhos) a tecla control. ^r% ^r: ^r/ ............. insere o nome do arquivo atual ............. insere o ltimo comando digitado ............. insere a ltima busca efetuada
Em modo insert voc pode repetir a ltima insero de texto simplesmente pressionando Control-a
Registro de expresses
"= Este registro na verdade usando em algumas funes avanadas
Vim/Usando registros
Manipulando registros
:let @a=@_ :let @a="" :let @a=@" :let @*=@a :let @*=@: colagem :let @*=@/ :let @*=@% colagem :reg Em modo insert <C-R>: Insere o registro de pequenas delees (also insert mode) <C-R>[0-9a-z] : Insere registros 0-9 e a-z (also insert mode) <C-R>% : Insere o nome do arquivo (also #) (also insert mode) <C-R>=somevar : Insere o contedo de uma varivel qualquer (eg :let sray="ray[0-9]") Voc pode manter registros pr-carregados assim: " Using a register as a map (preload registers in .vimrc) :let @m=":'a,'bs/" :let @s=":%!sort -u" Outro exemplo: pr-carregando o nome do arquivo no registro 'n' coloque em seu ~/.vimrc : : : : : limpa limpa salva copia copia o registro a o registro a registro sem nome *N* o registro para o buffer de colagem o ultimo comando para o buffer de
: copia a ltima busca para o buffer de colagem : copia o nome do arquivo para o buffer de : mostra o contedo de todos os registros
Vim/Usando registros :let @n=@% Como foi atribudo ao registro 'n' o contedo de @%, ou seja, o nome do arquivo, voc pode fazer algo assim em modo insert: control-r-n E o nome do arquivo ser inserido
Vim/Usando registros <esc> .................. para ter certeza que est em modo normal "ap .................... registro a 'paste', ou seja, cole Em movo inserte faa: control-r-a
Referncias
http:/ / rayninfo. co. uk/ vimtips. html Voltar ao ndice
Vim/Buscas e substituies
Vim/Buscas e substituies
Buscas
Para fazer uma busca, certifique-se de que est em modo normal, pressione "/" e digite a expresso a ser procurada. Para encontrar a primeira ocorrncia de "foo" no texto: /foo Busca a palavra 'foo' // Repete a ltima busca /teste/+3 Posiciona o cursor trs linhas aps a ocorrncia da palavra 'teste' Para encontrar as prximas ocorrncias, tecle "n". Para encontrar as ocorrncias anteriores, tecle "N". Fazer buscas pelo valor hexadecimal de um caractere /\%x69 ............... valor 069 localiza a letra 'i' que em hexadecimal tem
Dica: Um meio mais rpido para encontrar a prxima ocorrncia de uma palavra sob o cursor, teclar "*". Para encontrar uma ocorrncia anterior da palavra sob o cursor, tecle "#". (Para isso, o cursor deve estar posicionado sobre a palavra que deseja procurar.)
Substituies
Para fazer uma busca, certifique-se de que est em modo normal, em seguida digite use o comando ":s", conforme ser explicado. Para substituir "foo" por "bar" na linha atual: :s/foo/bar Para substituir "foo" por "bar" da primeira dcima linha do arquivo: :1,10 s/foo/bar Para substituir "foo" por "bar" da primeira ltima linha do arquivo: :1,$ s/foo/bar Ou simplesmente: :% s/foo/bar $ ............. significa para o vim final do arquivo % ............. representa o arquivo atual O comando ":s" possui muitas opes que modificam seu comportamento.
Vim/Buscas e substituies
Exemplos
Busca usando alternativas: /end\(if\|while\|for\) Buscar "endif", "endwhile" e "endfor". Observe que necessrio "escapar" os caracteres \(, \| e \), caso contrrio eles sero interpretados como caracteres comuns. Quebra de linha /quebra\nde linha Ignorando maisculas e minsculas /\cpalavra Usando \c o vim encontrar "palavra", "Palavra" ou at mesmo "PALAVRA" Uma dica colocar no seu arquivo de configurao 'vimrc' veja como editar preferncias set ignorecase ............... set smartcase ................ passa a considera-las set hlsearch ................. set incsearch ................ ignora maisculas e minsculas na bucsca se sua busca contiver maisculas ele mostra o que est sendo buscado em cores ativa a busca incremental
se voc no sabe ainda como colocar estas preferncias no arquivo de configurao pode ativa-las em modo de comando precedendo-as com dois pontos, assim: :set ignorecase<enter> Procurando palavras repetidas /\<\(\w*\) \1\> Multilinha /Hello\_s\+World Buscar "Hello World", separados por qualquer nmero de espaos, incluindo quebras de linha. Buscar as trs seqncias: Hello World Hello Hello World Buscar linhas de at 30 caracteres de comprimento /^.\{,30\}$ ^ .............. representa comeo de linha Apaga todas as tags html/xml de um arquivo :%s/<[^>]*>//g Apaga linhas vazias World
Vim/Buscas e substituies :%g/^$/d Ou :%s/^[\ \t]*\n//g Remover duas ou mais linhas vazias entre pargrafos diminuindo para uma s linha vazia. :%s/\(^\n\{2,}\)/\r/g Voc pode criar um mapeamento e colocar no seu ~/.vimrc map ,s <esc>:%s/\(^\n\{2,}\)/\r/g<cr> No exemplo acima ',s' um mapeamento para reduzir linhas em branco sucessivas para uma s Remove no dgitos (no pega nmeros) :%s/^\D.*//g Remove final de linha DOS/Windows ^M que tem cdigo hexadecimal igual a '0d' :%s/\%x0d//g Troca palavras de lugar usando expresses regulares :%s/\(.\+\)\s\(.\+\)/\2 \1/ - troca palavras de lugar
Inserir numerao de linhas do arquivo :%s/^/\=line('.'). ' ' Modificando todas as tags html para minusculo :%s/<\([^>]*\)>/<\L\1>/g move linhas 10 a 12 para alm da linha 30 :10,12m30
Vim/Buscas e substituies As opes 'gic' correspondem a global, ignore case e confirm, podendo ser omitidas deixando s o global pegar caracteres numericos e jogar no final do arquivo? :g/^\d\+.*/m $ inverter a ordem das linhas do arquivo? :g/^/m0 apagar as linhas que contm "Line commented" :g/Line commented/d copiar determinado pardro para um registro :g/pattern/ normal "Ayy copiar linhas que contm um padro e a linha subsequnte para o final :g/padro/;+1 copy $
Dicas
Para colocar a ltima busca em uma substituio faa: :%s/Control-r//novo/g A dupla barra corresponde ao ultimo padro procurado, e portanto o comando abaixo far a substituio da ultima busca por casinha :%s//casinha/g
Vim/Buscas e substituies
Gostaria de um comando que mudasse para ... // vrias linhas texto1001texto // texto1002texto // texto1003texto // texto1004texto // texto1005texto // ... // vrias linhas
Ou seja, somasse 1 a cada um dos nmeros entre os textos especificando como range as linhas i,i+4 :10,20! awk 'BEGIN{i=1}{if (match($0, "[0-9]+")) print "texto" (substr($0, RSTART, RLENGTH) + i++) "texto"}' Mas muitos sistemas no tem awk, e logo a melhor soluo mesmo usar o vim: :let i=1 | 10,20 g/texto\d\+texto/s/\d\+/\=submatch(0)+i/ | let i=i+1 Observao: 10,20 o intervalo, ou seja, da linha 10 at a linha 20 Para maiores informaes sobre buscas e substituies: :help / :help :s :help pattern
Vim/Buscas e substituies
Dicas do dicas-l
fonte: http:/ / www. dicas-l. com. br/ dicas-l/ 20081228. php
Vim/Dividindo a janela
Vim/Dividindo a janela
O Vim trabalha com o conceito de mltiplos buffers. Cada buffer um arquivo carregado para edio. Um buffer pode estar visvel ou no, e possvel dividir a tela em janelas, de forma a visualizar mais de um buffer simultaneamente.
Dividindo a janela
Observao: CTRL = ^ CTRL + w + s CTRL + w + o Divide a janela atual em duas (:split) Faz a janela atual ser a nica (:only)
Caso tenha duas janelas e use o atalho acima ^wo lembre-se de salvar tudo ao fechar, pois apesar de a outra janela estar fechada o arquivo ainda estar carregado, portanto faa: :wall ......... salva todos 'write all' :qall ......... fecha todos 'quite all'
Manipulando janelas
CTRL CTRL CTTL CTRL + + + + w w w w + + + + w j k r Alterna entre janelas (salta de uma para outra) desce uma janela j sobe uma janela k Rotaciona janelas na tela Aumenta o espao da janela atual Diminui o espao da janela atual
CTRL + w + + CTRL + w + -
File Explorer
Para abrir o gerenciador de arquivos do vim use: :Vex ........... abre o file explorer verticalmente :e . ......... abre o file explorer na janela atual aps abrir chame a ajuda <F1> Para abrir o arquivo sob o cursor em nova janela coloque a linha abaixo no seu ~/.vimrc let g:netrw_altv = 1 Caso queira pode mapear um atalho "no caso abaixo F2" para abrir o File Explorer. map <F2> <esc>:Vex<cr> Maiores informaes:
Dicas
Caso esteja editando um arquivo e nele houver referncia a outro arquivo tipo: /etc/hosts Voc pode usar este comando para abrir uma nova janela com o arquivo citado Control-w-f Mas lembre-se que posicionar o cursor sobre o nome do arquivo Veja tambm mapeamentos
Vim/Repetio de comandos
Vim/Repetio de comandos
Repetio de comandos
Para repetir a ltima edio saia do modo de Insero e pressione ponto (.): . Para inserir um texto que deve ser repetido vrias vezes: 1. 2. 3. 4. 5. Posicione o cursor no local desejado; Digite o nmero de repeties; Entre em modo de insero; Digite o texto; Saia do modo de insero (tecle ESC).
Por exemplo, se voc quiser inserir oitenta traos numa linha, em vez de digitar um por um, voc pode digitar o comando: 80i-<Esc> Veja, passo a passo, o que aconteceu: 80: repetir 80 vezes o comando a seguir: i: entrar no modo de insero; -: insere o caractere; <Esc>: finaliza a insero.
Vim/Repetio de comandos
No podemos simplesmente executar repetidas vezes um comando do Vim, pois precisamos incluir texto tanto no comeo quanto no fim da linha? necessrio mais de um comando para isso. a que entram as macros. Podemos gravar at 26 macros, j que elas so guardadas nos registros do Vim, que so identificados pelas letras do alfabeto. Para comear a gravar uma macro no registro a, digitamos qa No modo Normal. Tudo o que for digitado a partir da ser gravado no registro a at que terminemos com o comando <esc>
Repetindo substituies
Se voc fizer uma substituio em um intervalo como abaixo :5,32s/isto/aquilo/g Pode repetir esta substituio em qualquer linha que estiver apenas usando este smbolo & O vim substituir na linha corrente isto por aquilo.
Vim/Repetio de comandos
Repetindo comandos :
@: O atalho acima repete o ltimo comando no prprio modo de comandos
Scripts Vim
Usando um script para modificar um nome em vrios arquivos: Crie um arquivo chamado "subs.vim" contendo os comandos de substituio e o comando de salvamento :wq. %s/bgcolor="white"/bgcolor="#eeeeee"/g wq Para executar um script, digite o comando :source nome_do_script.vim
Vim/Repetio de comandos
Ordenando
Podemos usar o comando sort que ordena o contedo de um arquivo dessa forma: :5,15!sort O comando acima ordena da linha 5 at a linha 15. O comando sort existe tanto no Windows quanto nos sistemas Unix. Digitando simplesmente "sort", sem argumentos, o comportamento padro de classificar na ordem alfabtica (baseando-se na linha inteira). Para maiores informaes sobre argumentos do comando "sort", digite sort --help ou man sort (no Unix) ou sort /? (no Windows).
Beautifiers
A maior parte das linguagens de programao possui ferramentas externas chamadas "beautifiers", que servem para embelezar o cdigo, atravs da identao e espaamento. Por exemplo, para embelezar um arquivo HTML possvel usar a ferramenta "tidy", do W3C: :%!tidy
Comentrios
" linhas comeadas com aspas so comentrios " e portanto sero ignoradas pelo vim Ao fazer modificaes comente usando aspas duplas no comeo da linha, os comentrios lhe ajudaro mais tarde, pois medida que o seu vimrc cresce podem aparecer dvidas sobre o que determinado trecho faz :)
Vim/Como editar preferncias <CWORD> <CFILE> <CFILE>< <SFILE> <LEFT> <UP> <M-F4> <C-f> <BS> <space> <TAB> : : : : : : : : : : : Palavra sob o cursor Arquivo sob o cursor Arquivo sob o cursor sem extenso Contedo do arquivo sob o cursor Salta um caractere para esquerda Equivale clicar em 'seta acima' A tecla ALT -> M mais a tecla F4 Control f Backspace Espao Tab
No Vim podemos mapear uma tecla para o modo normal, realizando determinada operao e a mesma tecla pode desempenhar outra funo qualquer em modo insert ou comando, veja: " mostra o nome do arquivo com o caminho map <F2> :echo expand("%:p") " insere um texto qualquer imap <F2> Nome de uma pessoa A nica diferena nos mapeamentos acima que o mapeamento para modo insert comea com 'i', assim como para o modo comando ':' comea com 'c' no caso cmap.
Set
Os comandos set podem ser colocados no .vimrc: set nu ou digitados como comandos: :set nu set nu "mostra numerao de linhas set showmode "mostra o modo em que estamos set showcmd "mostra no status os comandos inseridos set ts=4 "tamanho das tabulaes syntax on "habilita cores set hls "destaca com cores os termos procurados set incsearch "habilita a busca incremental set ai "auto identao set aw "salvamento automtico - veja :help aw set ignorecase "faz o vim ignorar maisculas e minsculas nas buscas set smartcase "Se comear uma busca em maisculo ele habilita o case set ic "ignora maiscula e minsculas em uma busca set scs "ao fazer uma busca com maisculos considerar case sensitive set backup set backupext=.backup set backupdir=~/.backup,./ set cul "abreviao de cursor line (destaca linha atual) set ve=all "permite mover o cursor para reas onde no h texto set ttyfast "Envia mais caracteres ao terminal, melhorando o redraw de janelas. set columns=88 "Determina a largura da janela. set mousemodel=popup "exibe o contedo de folders e sugestes spell O comando gqap ajusta o pargrafo atual em modo normal " * coloca 2 espaos aps o . quando usando o gq "set nojoinspaces " ************************************************************************** " * * " * " * " * " * geralmente usamos ^I para representar uma tabulao * <Tab>, e $ para indicar o fim de linha. Mas possvel * customizar essas opes. sintaxe: *
Vim/Como editar preferncias * " * " * * " * * " * - eol:{char} * " * * " * " * * " * - tab:{char1}{char2} * " * * " * " * " * * " * - trail:{char} * " * * " * " * * " * - extends:{char} * " * * " * Esse caracter representa o incio do fim da linha sem Esse caracter representa os espaos em branco. * O tab mostrado pelo primeiro caracter {char1} e * seguido por {char2} * Define o caracter a ser posto depois do fim da linha * set listchars=key:string,key:string *
Vim/Como editar preferncias quebr-la * " * Est opo funciona com a opo nowrap habilitada * " * * " ************************************************************************** "exemplo 1: "set listchars=tab:>-,trail:.,eol:#,extends:@ "exemplo 2: "set listchars=tab:>"exemplo 3: "set listchars=tab:>"exemplo 4: set nowrap "Essa opo desabilita a quebra de linha "set listchars=extends:+ Caso esteja usando o gvim pode setar um esquema de cores set colo desert
Mapeamentos
Mapeamentos permitem criar atalhos de teclas para quase tudo. Tudo depende de sua criatividade e do quanto conhece o Vim. Os mapeamentos abaixo so teis para quem escreve cdigos html, permitem inserir caracteres reservados do html usando uma barra invertida para proteger os mesmos, o vim substituir os "barra alguma coisa" pelo caractere correspondente. inoremap inoremap inoremap inoremap \& &amp; \< &lt; \> &gt; \. &middot;
O termo inoremap significa: em modo "insert" no remapear, ou seja ele mapeia o atalho e no permite que o mesmo seja remapeado, e o mapeamento s funciona em modo insert, isso significa que um atalho pode ser mapeado para diferentes modos de operao. Veja este outro mapeamento: map <F11> <esc>:set nu!<cr> Permite habilitar ou desabilitar nmeros de linha do arquivo corrente. A exclamao ao final torna o comando booleano, ou seja, se a numerao estiver ativa ser desabilitada, caso contrrio ser ativada. O "<cr>" ao final representa um ENTER.
Vim/Como editar preferncias <esc> .................... : ........................ % ........................ s ........................ \n ....................... {2,} ..................... \r ....................... g ........................ <cr> ..................... se estive em modo insert sai em modo de comando em todo o arquivo substitua quebra de linha duas ou mais vezes trocado por \r enter globalmente confirmao do comando
As barras invertidas podem no ser usadas se o seu vim estiver com a opo magic habilitada :set magic Por acaso este um padro portanto tente usar assim pra ver se funciona map ,d :%s/\n{2,}/\r/g<cr>
Os atalhos
Para criar mapeamentos, precisamos conhecer a maneira de representar as teclas e combinaes. Alguns exemplos: <C-X> <Left> <Right> <C-M-A> onde 'C' corresponde a CTRL e 'X' a uma tecla qualquer seta para a esquerda seta para a direita CTRL+ALT+A
Podemos fazer mapeamentos globais ou que funcionam em apenas um modo: map - funciona em qualquer modo nmap - apenas no modo Normal imap - apenas no modo de Insero Mover linhas com Ctrl+(seta abaixo) ou Ctrl+(seta acima): " tem que estar em modo normal! nmap <C-Down> ddp nmap <C-Up> ddkP Salvando com uma tecla de funo: " salva com F9 nmap <F9> :w<cr> " F10 - sai do vim nmap <F10> <esc>:q<cr> Convertendo as iniciais de um documento para maisculas " MinusculasMaiusculas: converte a primeira letra de cada " frase para MAISCULAS nmap ,mm :%s/\C\([.!?][])"']*\($\|[ ]\)\_s*\)\(\l\)/\1\U\3/g<CR> "caso queira confirmao coloque uma letra 'c' no final da linha acima:
Autocomandos
Autocomandos habilitam comandos automticos para situaes especficas. Se voc deseja que seja executada uma determinada ao ao iniciar um novo arquivo o seu autocomando dever ser mais ou menos assim: au BufNewFile tipo ao Veja um exemplo: au BufNewFile,BufRead *.txt source ~/.vim/syntax/txt.vim No exemplo acima o vim aplica autocomandos para arquivos novos "BufNewFile" ou existentes "BufRead" do tipo 'txt' e para estes tipos carrega um arquivo de syntax, ou seja, um esquema de cores especfico. " http://aurelio.net/doc/vim/txt.vim coloque em ~/.vim/syntax au BufNewFile,BufRead *.txt source ~/.vim/syntax/txt.vim Para arquivos do tipo txt '*.txt' use um arquivo de syntax em particular O autocomando abaixo coloca um cabealho para scripts 'bash' caso a linha 1 esteja vazia, observe que os arquivos em questo tem que ter a extenso .sh au BufEnter *.sh if getline(1) == "" | :call setline(1, "#!/bin/bash") | endif Autocomando para arquivos python " autocomandos para python autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class
Vim/Como editar preferncias endif endfunction function! BC_GetChar() let l:char = b:robstack[strlen(b:robstack)-1] let b:robstack = strpart(b:robstack, 0, strlen(b:robstack)-1) return l:char endfunction Outra opo para fechamento de parnteses " Fechamento automtico de parnteses imap { {}<left> imap ( ()<left> imap [ []<left> " pular fora dos parnteses, colchetes e chaves, mover o cursor " no modo insert imap <c-l> <esc><right>a imap <c-h> <esc><left>a
Data automtica
Caso esta funo esteja configurada corretamente, a cada salvamento do arquivo a data contida no cabealho ser atualizada. " =============== DATA AUTOMTICA =========================== " insira na em seus arquivos = "ultima modificao:" " em qualquer das trs primeiras linhas fun! SetDate() mark z if getline(1) =~ ".*ultima modificao:" || \ getline(2) =~ ".*ultima modificao:" || \ getline(3) =~ ".*ultima modificao:" || \ getline(4) =~ ".*ultima modificao:" || \ getline(5) =~ ".*ultima modificao:" exec "1,5s/\s*ultima modificao: .*$/ultima modificao: " . strftime("%c") . "/" endif exec "'z" endfun " abaixo a chamada a funo de data que chamada toda vez que voc " salva um arquivo preexistente fun! LastChange()
Vim/Como editar preferncias mark z if getline(1) =~ ".*Last Change:" || \ getline(2) =~ ".*Last Change:" || \ getline(3) =~ ".*Last Change:" || \ getline(4) =~ ".*Last Change:" || \ getline(5) =~ ".*Last Change:" exec "1,5s/\s*Last Change: .*$/Last Change: " . strftime("%c") . "/" endif exec "'z" endfun " coloquei duas opes (alterao e modificao), assim " no tem perigo de voc esquecer e o sistema " no atualizar a data do salvamento, outra melhoria na funo " que agora vlida para qualquer tipo de arquivo. se usar " num html por exemplo insira um comeo de comentrio na linha " da data e feche o comentrio na prxima linha " abaixo a chamada a funo de data que chamada toda vez que voc " salva um arquivo preexistente au BufWritePre * call SetDate() au BufWritePre * call LastChange() "============ Fim da Data Automtica ===================
10
Change log
" === Cria um registro de alteraes de arquivo ======== " ChangeLog entry convenience " Funo para inserir um status do arquivo " cirado: data de criao, alterao, autor etc (em modo normal) fun! InsertChangeLog() normal(1G) call append(0, "Arquivo") call append(1, "Criado: " . strftime("%a %d/%b/%Y hs %H:%M")) call append(2, "ultima modificao: " . strftime("%a %d/%b/%Y hs %H:%M")) call append(3, "Autor: Srgio Luiz Arajo Silva") normal($) endfun map ,cl :call InsertChangeLog()<cr>A " " Cria um cabealho para scripts bash fun! InsertHeadBash() normal(1G) :set ft=bash :set ts=4 call append(0, "#!bin/bash") call append(1, "# Criado em:" . strftime("%a %d/%b/%Y hs %H:%M")) call append(2, "# ultima modificao:" . strftime("%a %d/%b/%Y hs
Vim/Como editar preferncias %H:%M")) call append(3, "# Nome da empresa") call append(3, "# Propsito do script") normal($) endfun map ,sh :call InsertHeadBash()<cr>A
11
Barra de status
" O trecho abaixo formata a barra de status com algumas opes interessantes! " mostra o cdigo ascii do caractere sob o cursor e outras coisas mais set statusline=%F%m%r%h%w [FORMATO=%{&ff}] [TIPO=%Y] [ASCII=\%03.3b] [HEX=\%02.2B] [POSIO=%04l,%04v][%p%%] [TAMANHO=%L] set laststatus=2 " Sempre exibe a barra de status
12
Vim/Como editar preferncias elseif g:colors_name == 'desert' colorscheme navajo-night elseif g:colors_name == 'navajo-night' colorscheme zenburn elseif g:colors_name == 'zenburn' colorscheme bmichaelsen elseif g:colors_name == 'bmichaelsen' colorscheme wintersday elseif g:colors_name == 'wintersday' colorscheme summerfruit elseif g:colors_name == 'summerfruit' colorscheme native endif endif endfunction map <silent> <F6> :call <SID>SwitchColorSchemes()<CR> baixe os esquemas aqui: http:/ / nanasi. jp/ old/ colorscheme_0. html
13
Miscelnea
Uma funo para inserir cabealho de scrip bash para chamar a funo basta pressionar, sh em modo normal " Cria um cabealho para scripts bash fun! InsertHeadBash() normal(1G) :set ft=bash :set ts=4 call append(0, "#!/bin/bash") call append(1, "# Criado em:" . strftime("%a %d/%b/%Y hs %H:%M")) call append(2, "# ultima modificao:" . strftime("%a %d/%b/%Y hs %H:%M")) call append(3, "# NOME DA SUA EMPRESA") call append(3, "# Propsito do script") normal($) endfun map ,sh :call InsertHeadBash()<cr> Funo para inserir cabealhos python " funo para inserir cabealhos python fun! BufNewFile_PY() normal(1G) :set ft=python :set ts=2 call append(0, "#!/usr/bin/env python") call append(1, "# # -*- coding: ISO-8859-1 -*-") call append(2, "# Criado em:" . strftime("%a %d/%b/%Y hs
Vim/Como editar preferncias %H:%M")) call append(3, "# Last Change: " . strftime("%a %d/%b/%Y hs %H:%M")) call append(4, "# Instituicao: <+nome+>") call append(5, "# Proposito do script: <+descreva+>") call append(6, "# Autor: <+seuNome+>") call append(7, "# site: <+seuSite+>") normal gg endfun autocmd BufNewFile *.py call BufNewFile_PY() map ,py :call BufNewFile_PY()<cr>A " Ao editar um arquivo ser aberto no ltimo ponto em " que foi editado autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal g`\"" | \ endif " " Permite recarregar o Vim para que modificaes no " Prprio vimrc seja ativadas com o mesmo sendo editado nmap <F12> :<C-u>source $HOME/.vimrc <BAR> echo "Vimrc recarregado!"<CR> Redimensionar janelas " Redimensionar a janela com " ALT+seta direita e esquerda map <M-right> <ESC>:resize +2 <CR> map <M-left> <ESC>:resize -2 <CR> Funo para pular para uma linha qualquer "ir para linha " ir para uma linha especfica function! GoToLine() let ln = inputdialog("ir para a linha...") exe ":" . ln endfunction "no meu caso o mapeamento com Ctrl-l "use o que melhor lhe convier imap <S-l> <C-o>:call GoToLine()<CR> nmap <S-l> :call GoToLine()<CR>
14
15
16
Criando um menu
Como no vim podemos ter infinitos comandos fica complicado memorizar tudo a que entram os menus, podemos colocar nossos plugins e atalhos favoritos em um menu veja este exemplo amenu Ferramentas.ExibirNomeDoTema :echo g:colors_name<cr> O comando acima diz: amenu ........................... cria um menu Ferramentas.ExibirNomeDoTema ......... Menu plugin submenu ExibirNomeDoTema :echo g:colors_name<cr> ......... comando para exibir o nome do tema de cores atual Caso haja espaos no nome a definir voc pode fazer assim amenu Ferramentas.Exibir\ nome\ do\ tema :echo g:colors_name<cr>
Exemplo de menu
" cores menu T&emas.cores.quagmire :colo quagmire<CR> menu T&emas.cores.inkpot :colo inkpot<CR> menu T&emas.cores.google :colo google<CR> menu T&emas.cores.ir_black :colo ir_black<CR> menu T&emas.cores.molokai :colo molokai<CR> " Fontes menu T&emas.fonte.Inconsolata :set gfn=Inconsolata:h10<CR> menu T&emas.fonte.Anonymous :set anti gfn=Anonymous:h8<CR> menu T&emas.fonte.Envy\ Code :set anti gfn=Envy_Code_R:h10<CR> menu T&emas.fonte.Monaco :set gfn=monaco:h9<CR> menu T&emas.fonte.Crisp :set anti gfn=Crisp:h12<CR> menu T&emas.fonte.Liberation\ Mono :set gfn=Liberation\ Mono:h10<CR> O comando :update
Vim/Como editar preferncias Atualiza o menu recem modificado. Quando o comando :amenu usado sem nenhum argumento o vim mostra os menus definidos atualmente Para listar todas as opes de menu para 'Plugin' por exemplo faa: :amenu Plugin
17
Outros mapeamentos
Destaca espaos e tabs redundantes Highlight redundant whitespace and tabs. highlight RedundantWhitespace ctermbg=red guibg=red match RedundantWhitespace /\s\+$\| \+\ze\t/ Explicando com detalhes \s ................ \+ ................ $ ................. \| ................ " " ............... \+ ................ \ze ............... \t ................ espao uma ou mais vezes no final da linha ou espao (veja imagem acima) uma ou mais vezes at o fim tabulao
Portanto a expresso regular acima localizar espaos ou tabulaes no final de linha e destacar em vermelho. "Remove espaos redundantes no fim das linhas map <F7> <esc>mz:%s/\s\+$//g<cr>`z Um detalhe important mz .............. marca a posio atual do cursor para ternornar no final do comando `z .............. retorna marca criada Se no fosse feito isto o cursor iria ficar na linha da ltima substituio! "Abre o vim-vim explorer map <F6> <esc>:vne .<cr><bar>:vertical resize -30<cr><bar>:set nonu<cr>
18
"mapeamento para retirar tags html com Ctrl+Alt+t nmap <C-M-t> :%s/<[^>]*>//g <cr> " Quebra a linha atual no local do cursor com F2 nmap <F2> a<CR><Esc> " join lines -- Junta as linhas com Shift F2 nmap <S-F2> A<Del><Space>
Abreviaes
Tambm no .vimrc voc pode colocar abreviaes, que so uma espcie de auto-texto para o vim iab slas Srgio Luiz Arajo Silva iab Linux GNU/Linux iab linux GNU/Linux " Esta abreviao legal para usar com o python im :<CR> :<CR><TAB>
Vim/Configurando a verificao ortogrfica linha no seu arquivo ~/.vimrc: let spell_auto_type="tex,doc,mail" A string contendo tex,doc,mail pode ser substituda pela listas de tipos de arquivo que voc deseja que tenham verificao ortogrfica automtica. Dica 5: alterando o idioma da verificao Note que o idioma padro ser o idioma configurado como padro pelo ispell. 1. instale o dicionrio do ispell para o idioma desejado. 2. liste no seu .vimrc os idiomas disponveis, na varivel spell_language_list. Por exemplo: let spell_language_list="brasileiro,american,castellano" Para alterar o idioma padro, utilize o comando SpellSetLanguage. Por exemplo, pra alterar o idioma para ingls: :SpellSetLanguage american :set spell spelllang=pt Nota: assim como outros softwares que provm verificao ortogrfica, a verificao automtica imperfeita. Felizmente, muito mais comum que a verificao marque como incorreta uma palavra correta do que no marcar uma palavra que esteja realmente incorreta. Em geral termos tcnicos de reas especficas e vocbulos de outros idiomas so destacados como incorretos erroneamente. Para definir a quantidade de palavras sugeridas use: set sps=10 Para detalhes :h sps Atalhos do spell ]s ............. vai para a prxima palavra zg ............. adiciona palavra zw ............. retira palavra z= ............. sugestes zug ........... contrario de zu zuw ........... contrario de zw
Como funciona
Tomando como base a linguagem python, como poderia ser qualquer outra for <{item}> in <{seq}>: <{}> O usurio digita a palavra reservada "for" (ser o tatilho que dispara este snippet), pressiona em seguida a tecla <tab> O esqueleto do cdigo gerado e o cursor posicionado em <{item}> O usurio digita o "item" e pressiona a tecla <tab> novamente e o cursor posicionado ento em <{seq}>. Finalmente o usurio pressiona <tab> e o cursor posicionado na posio final da funo <{}> em modo insert. "dois exemplos de como criar snippets Iabbr <buffer> for for ${}; in ${};<CR>${};<CR>end Snippet for for <{item}> in <{seq}>:<cr><{value}>
O script snippetsEmu
http:/ / www. vim. org/ scripts/ script. php?script_id=1318
Como instalar
Baixe estes dois scripts: Vimbal http:/ / vim. sourceforge. net/ scripts/ script. php?script_id=1502 SnippetsEmu http:/ / www. vim. org/ scripts/ script. php?script_id=1318 O primeiro script um utilitrio (script) para instalar outros scripts que vem no formato vba. Os scripts vba por sua vez quando carregados na memria instalam as coisas certas nos lugares certos. Ento vamos l. Instalando o script vimball install details 1. Remova qualquer vestgio da antiga verso do vimball, Normalmente cd /usr/share/vim/vim71 rm plugin/vimball*.vim rm autoload/vimball*.vim 2 . Descompacte o script vimball.tar.gz
Vim/Complementando cdigos com snippets tar zxvf vimball.tar.gz ; cd vimball chmod a+r autoload/vimball.vim doc/pi_vimball.txt plugin/vimballPlugin.vim copie as pastas para o seu diretorio ~/.vim Instalando o plugin snippetsEmu 1. Digite este comando mkdir -p ~/.vim/after/ftplugin Isso necessrio pois o script no cria esta pasta por alguma razo 2. Agora abra o arquivo snippy_plugin.vba com vim ou o gvim e rode este comando: :so % Voc pode baixar vrios snippets prontos aqui: http:/ / www. mediafire. com/ ?2wgc1acdf2n basta descompactar na pasta "No linux ~/.vim/after/ftplugin/ "No windows vimfiles/after/ftplugin Voc tambm pode encontrar um VimTarball para instal-los automaticamente (como o snippetsEmu) no endereco: http:/ / www. vim. org/ scripts/ script. php?script_id=1318
Placeholders
Do ingls "marcadores de posio" permitem algo parecido com os snippets, consiste em criar pontos de marcao para os quais podemos pular acionando determinados atalhos for <++> in range(<++>): <++> basta criar um mapeamento para pular para cada ocorrncia de <++> Um exemplo seria " A syntax for placeholders " Pressing Control-j jumps to the next match. inoremap <c-j> <ESC>/<++><CR><ESC>cf>
Vim/Complementando cdigos com snippets No caso acima estara-mos usando Control 'j' <c-j> Confira se o seu vimrc no tem este atalho ou escolha o que melhor lhe convier
Veja tambm
Voltar ao ndice
O potwiki [2] um wiki completo para o vim, funciona localmente embora possa ser aberto remotamente via ssh. Para criar um link no potwiki basta usar WikiNames, so nomes iniciados com letra maiscula e que contenham outra letra em maisculo no meio. Ao baixar o arquivo salve em ~/.vim/plugin Mais ou menos na linha 53 do potwiki ~/.vim/plugin/potwiki.vim voc define onde ele guardar os arquivos, no meu caso /home/docs/textos/wiki. a linha ficou assim: call s:default('home',"~/.wiki/HomePage") Outra forma de indicar a pgina inicial seria colocar no seu .virmc let potwiki_home = "$HOME/.wiki/HomePage"
Como usar
O potwiki trabalha com WikiWords, ou seja, palavras iniciadas com letras em maisculo e que tenham outra letra em maisculo no meio (sem espaos) para inici-lo abra o vim e pressione \ww <Leader> igual a \ \ww \wi \wf \we \\ <CR> Enter <Tab> <BS> \wr - veja :help leader
abra a sua HomePage abre o Wiki index segue uma WikiWords (can be used in any buffer!) edite um arquivo Wiki - Fecha o arquivo - segue WikiWords embaixo do cursor <CR> igual a - move para a prxima WikiWords - move para os WikiWords anteriores (mesma pgina) - recarrega WikiWords
Dicas
Como eu mantenho o meu wiki oculto ".wiki" criei um link para a pasta de textos ln -s ~/.wiki /home/sergio/docs/textos/wiki Vez por outra entro na pasta ~/docs/textos/wiki e crio um pacote tar.gz e mando para web como forma de manter um backup.
Referncias
[1] http:/ / sergioaraujo. pbwiki. com/ f/ potwiki. vim [2] http:/ / www. vim. org/ scripts/ script. php?script_id=1018
Alm das marcas o vim permite a movimentao por outros mtodos gg ................ G ................. 0 ................. $ ................. fx ................ dfx ............... g, ................ g; ................ p ................. P ................. H ................. M ................. L ................. vai para a linha 1 do arquivo vai para a ltima linha do arquivo vai para o incio da linha vai para o fim da linha pula at a prxima ocorrncia de x deleta at a prxima ocorrncia de x avana na lista de alteraes retrocede na lista de alteraes cola o que foi deletado/copiado abaixo cola o que foi deletado/copiado acima posiciona o cursor no primeiro caractere da tela posiciona o cursor no meio da tela posiciona o cursor na ltima linha da tela
Use asterisco * para localizar a palavra sob o cursor Use o percent % serve para localizar fechamento de parntese chaves etc '. apostrofo + ponto retorna ao ltimo local editado '' retorna ao local do ultimo salto Suponha que voc est procurando a palavra 'argc': /argc Digita 'n' para buscar a prxima ocorrncia n Um jeito mais fcil seria: "coloque a linha abaixo no seu vimrc :set hlsearch
Vim/Hbitos para edio efetiva Agora use asterisco para destacar todas as ocorrncias do padro desejado e use a letra 'n' para pular entre ocorrncias, caso deseje seguir o caminho inverso use 'N'.
Use quantificadores
Em modo normal voc pode fazer 10j ............. 5dd ............. :50 ............. 50gg ............ desce 10 apaga as vai para vai para linhas prximas 5 linhas a linha 50 a linha 50
Para um trecho muito copiado coloque o seu contedo em um registrador "ayy "ap ........... copia a linha atual para o registrador a ........... cola o registrador a
Crie abreviaes para erros comuns no seu arquivo de configurao (~/.vimrc) iabbrev teh the syntax keyword WordError teh As linhas acima criam uma abreviao para erro de digitao da palavra 'the' e destaca textos que voc abrir que contenham este erro.
Vim/Hbitos para edio efetiva vim *.html :bufdo :%s/bgcolor="ffffff"/bgcolor="eeeeee"/g :wall :qall Ainda com relao edio de vrios arquivos poderia-mos abrir alguns arquivos txt e mudar de um para o outro assim: :wn O w significa gravar e o 'n' significa next, ou seja gravaria-mos o que foi modificado no arquivo atual e mudaramos para o prximo.
Use autocomandos
No arquivo de configurao do vim ~/.vimrc voc pode criar comandos automticos que sero executados diante de uma determinada circunstncia O comando abaixo ser executado em qualquer arquivo existente, posicionando o cursor no ltimo local editado autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal g`\"" | \ endif Grupo de comandos para arquivos do tipo html/htm. Observe que o autocomando carrega um arquivo de configurao do vim exclusivo para o tipo html/htm e no caso de arquivos novos "BufNewFile" ele j cria um esqueleto puxando do endereo indicado augroup html au! <--> Remove all html autocommands au! au BufNewFile,BufRead *.html,*.shtml,*.htm set ft=html au BufNewFile,BufRead,BufEnter *.html,*.shtml,*.htm so ~/docs/vim/.vimrc-html au BufNewFile *.html 0r ~/docs/vim/skel.html au BufNewFile *.html*.shtml,*.htm /body/+ " coloca o cursor aps o corpo <body> au BufNewFile,BufRead *.html,*.shtml,*.htm set noautoindent augroup end Documentao on-line sobre autocomandos do vim http:/ / www. vim. org/ htmldoc/ autocmd. html
Referncias
http:/ / www. moolenaar. net/ habits_2007. pdf por Bram Moolenaar http:/ / vim. wikia. com/ wiki/ Did_you_know Voltar ao ndice
Referncias
[1] http:/ / www. moolenaar. net [2] http:/ / br-linux. org/ linux/ 7-habitos-da-edicao-de-texto-efetiva [3] http:/ / www. moolenaar. net
Vim/Modelines
Vim/Modelines
So um modo de guardar preferncias no prprio arquivo, suas preferncias viajam literalmente junto com o arquivo, basta usar em uma das 5 primeiras linhas ou na ltima linha do arquivo algo como: # vim:ft=sh: OBS: Voc deve colocar um espao entre a palavra 'vim' e a primeira coluna, ou seja, a palavra 'vim' deve vir precedida de um espao, da em diante cada opo fica assim: :opo: Por exemplo: posso salvar um arquivo com extenso .sh e dentro do mesmo indicar no modeline algo como: # vim:ft=txt:nu: Apesar de usar a extenso 'sh' o vim reconhecer este arquivo como 'txt', e caso eu no tenha habilitado a numerao, ainda assim o vim usar por causa da opo 'nu' Portanto o uso de modelines pode ser um grande recurso para o seu dia-a-dia pois voc pode coloca-las dentro dos comentrios!
Vim/Plugins
Vim/Plugins
Plugins so um meio de estender as funcionalidades do vim, h plugins para diversas tarefas, desde wikis para o Vim at ferramentas de auxlio a navegao em arquivos com o caso do plugin NerdTree [1] que divide uma janela que permite navegar pelos diretrios do sistema a fim de abrir arquivos a serem editados.
Complementao de cdigos
O plugin snippetsEmu um misto entre complementao de cdigos e os chamados modelos ou (skels). Insere um trecho de cdigo pronto, mas vai alm disso, permitindo saltar para trechos do modelo inserido atravs de um atalho configurvel de modo a agilizar o trabalho do programador. http:/ / www. vim. org/ scripts/ script. php?script_id=1318
Instalao
Um artigo ensinando como instalar o plugin snippetsEmu pode ser lido aqui: http:/ / vivaotux. blogspot. com/ 2008/ 03/ instalando-o-plugin-snippetsemu-no-vim. html
Referncias
[1] http:/ / www. vim. org/ scripts/ script. php?script_id=1658
Vim/Referncias
Vim/Referncias
VIM avanado (parte 1) [1] http:/ / www. rayninfo. co. uk/ vimtips. html http:/ / www. geocities. com/ yegappan/ vim_faq. txt http:/ / br. geocities. com/ cesarakg/ vim-cook-ptBR. html http:/ / larc. ee. nthu. edu. tw/ ~cthuang/ vim/ files/ vim-regex/ vim-regex. htm http:/ / aurelio. net/ vim/ vimrc-ivan. txt http:/ / vivaotux. blogspot. com/ search/ label/ vim
Referncias
[1] http:/ / www. vivaolinux. com. br/ artigos/ impressora. php?codigo=2914