Obra: Vim/Como editar preferências
como editar preferências no vim arquivo de preferências do vim vimrc um arquivo oculto que pode ser criado no home do usuário vimrc caso use windows arquivo onde colocar plugins temas de cor no windows procure ou crie uma pasta chamada vimfiles que fica em documents and settings seuusuario no linux procure ou crie uma pasta chamada vim que deve ficar em home user vim nesta pasta vim ou vimfiles deve haver pastas tipo vimfiles color doc syntax plugin comentários linhas começadas com aspas são comentários portanto serão ignoradas pelo vim ao fazer modificações comente usando aspas duplas no começo da linha os comentários lhe ajudarão mais tarde pois medida que seu vimrc cresce podem aparecer dúvidas sobre que determinado trecho faz notas sobre mapeamentos mapeamentos são um ponto importante do vim com eles podemos controlar ações com quaisquer teclas mas antes temos que saber que tecla tecla mapeada enter escape normalmente pipe palavra sob cursor arquivo sob cursor conteúdo do arquivo sob cursor salta um caractere para esquerda equivale clicar em seta acima tecla alt mais tecla control backspace espaço tab no vim podemos mapear uma tecla para modo normal realizando determinada operação mesma tecla pode desempenhar outra função qualquer em modo insert ou comando veja mostra nome do arquivo com caminho map echo expand insere um texto qualquer imap nome de uma pessoa única diferença nos mapeamentos acima que mapeamento para modo insert começa com assim como para modo comando começa com no caso cmap recarregando arquivo de configuração cada alteração no arquivo de configuração do vim só terá efeito na próxima vez que você abrir vim menos que você coloque isto dentro do mesmo recarregar vimrc source the vimrc or file depending on system if term win pcterm has gui_win map home nmap source echo vimrc recarregado else map home vimrc nmap source vimrc echo vimrc recarregado endif agora basta pressionar em modo normal as alterações passam valer set os comandos set podem ser colocados no vimrc set nu ou digitados como comandos set nu set nu mostra numeração de linhas set showmode mostra modo em que estamos set showcmd mostra no status os comandos inseridos set ts tamanho das tabulações syntax on habilita cores set hls destaca com cores os termos procurados set incsearch habilita busca incremental set ai auto identação set aw salvamento automático veja help aw set ignorecase faz vim ignorar maiúsculas minúsculas nas buscas set smartcase se começar uma busca em maiúsculo ele habilita case set ic ignora maiúscula minúsculas em uma busca set scs ao fazer uma busca com maiúsculos considerar case sensitive set backup set backupext backup set backupdir backup set cul abreviação de cursor line destaca linha atual set ve all permite mover cursor para áreas onde não há texto set ttyfast envia mais caracteres ao terminal melhorando redraw de janelas set columns determina largura da janela set mousemodel popup exibe conteúdo de folders sugestões spell comando gqap ajust
largura da janela set mousemodel popup exibe conteúdo de folders sugestões spell comando gqap ajusta parágrafo atual em modo normal coloca espaços após quando usando gq set nojoinspaces geralmente usamos para representar uma tabulação para indicar fim de linha mas possível customizar essas opções sintaxe set listchars key string key string eol char define caracter ser posto depois do fim da linha tab char char tab mostrado pelo primeiro caracter char seguido por char trail char esse caracter representa os espaços em branco extends char esse caracter representa início do fim da linha sem quebrá la está opção funciona com opção nowrap habilitada exemplo set listchars tab trail eol extends exemplo set listchars tab exemplo set listchars tab exemplo set nowrap essa opção desabilita quebra de linha set listchars extends caso esteja usando gvim pode setar um esquema de cores set colo desert exibindo caracteres invisíveis set list setando macros prévias definindo uma macro de nome para ordenar retirar linhas duplicadas let sort para executar macro definida acima faça vim colocará no comando sort bastando pressionar observação esta macro prévia pode ficar no vimrc ou ser digitada em comando obs vim partir de sua versão passou ter um comando de ordenação próprio ou seja ele não depende mais de comandos externos para ordenar retirar duplicados sort da linha até linha ordene retire duplicados sort ordene meu documento considerando números isto útil pois se primeira coluna contiver números ordenação pode ficar errada caso não usemos parâmetro mapeamentos mapeamentos permitem criar atalhos de teclas para quase tudo tudo depende de sua criatividade do quanto conhece vim os mapeamentos abaixo são úteis para quem escreve códigos html permitem inserir caracteres reservados do html usando uma barra invertida para proteger os mesmos vim substituirá os barra alguma coisa pelo caractere correspondente inoremap amp inoremap gt inoremap middot termo inoremap significa em modo insert não remapear ou seja ele mapeia atalho não permite que mesmo seja remapeado mapeamento só funciona em modo insert isso significa que um atalho pode ser mapeado para diferentes modos de operação veja este outro mapeamento map set nu permite habilitar ou desabilitar números de linha do arquivo corrente exclamação ao final torna comando booleano ou seja se numeração estiver ativa será desabilitada caso contrário será ativada ao final representa um enter limpando buffer de buscas cada busca se opção hls estiver habilitada vim faz um destaque colorido mas se você quiser limpar pode fazer este mapeamento nno let um mapeamento para modo normal que faz com que combinação de teclas shift limpe buffer de buscas destacar palavra sob cursor nmap let atalho acima corresponde shift remover linhas em branco duplicadas map no mapeamento acima estamos associando atalho ação desejada fazer com que linhas em branco sucessivas seja substituidas por uma só linha em branco vejaos como funciona map mapear atalho
ranco sucessivas seja substituidas por uma só linha em branco vejaos como funciona map mapear atalho que quermos se estive em modo insert sai em modo de comando em todo arquivo substitua quebra de linha duas ou mais vezes trocado por enter globalmente confirmação do comando as barras invertidas podem não ser usadas se seu vim estiver com opção magic habilitada set magic por acaso este um padrão portanto tente usar assim pra ver se funciona map os atalhos para criar mapeamentos precisamos conhecer maneira de representar as teclas combinações alguns exemplos onde corresponde ctrl uma tecla qualquer seta para esquerda seta para direita ctrl alt 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 inserção mover linhas com ctrl seta abaixo ou ctrl seta acima tem que estar em modo normal nmap ddp nmap ddkp salvando com uma tecla de função salva com nmap sai do vim nmap convertendo as iniciais de um documento para maiúsculas converte primeira letra de cada frase para maiúsculas nmap mm caso queira confirmação coloque uma letra no final da linha acima gc autocomandos autocomandos habilitam comandos automáticos para situações específicas se você deseja que seja executada uma determinada ação ao iniciar um novo arquivo seu autocomando deverá ser mais ou menos assim au bufnewfile tipo ação veja um exemplo au bufnewfile bufread txt source vim syntax txt vim no exemplo acima vim aplica autocomandos para arquivos novos bufnewfile ou existentes bufread do tipo txt para estes tipos carrega um arquivo de syntax ou seja um esquema de cores específico 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 autocomando abaixo coloca um cabeçalho para scripts bash caso linha esteja vazia observe que os arquivos em questão tem que ter extensão sh au bufenter sh if getline call setline 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 fechamento automático de parênteses ativa fechamento automático para parêntese set automatic expansion of parenthesis brackets inoremap call bc_addchar inoremap call bc_addchar inoremap call bc_addchar inoremap call bc_addchar mapeia ctrl para pular fora de parênteses colchetes etc inoremap call search bc_getchar function for the above function bc_addchar schar if exists robstack let robstack robstack schar else let robstack schar endif endfunction function bc_getchar let char robstackstrlen robstack let robstack strpart robstack strlen robstack return char endfunction outra opção para fechamento de parênteses fechamento automático de parênteses imap imap imap pular fora dos parênteses colchetes chaves mover cursor no modo insert imap imap destaque colorido para endereços ip referências http vim wikia com wik
rsor no modo insert imap imap destaque colorido para endereços ip referências http vim wikia com wiki syn match ipaddr hi link ipaddr identifier fechamento automático de tags html imap mt let lyiw tap tli agora basta escrever sua tag ao fechá la com aperte para completar com seu respectivo fechamento data automática caso esta função esteja configurada corretamente cada salvamento do arquivo data contida no cabeçalho será atualizada data automática insira na em seus arquivos ultima modificação em qualquer das três primeiras linhas fun setdate mark if getline ultima modificação getline ultima modificação getline ultima modificação getline ultima modificação getline ultima modificação exec ultima modificação ultima modificação strftime endif exec endfun abaixo chamada função de data que chamada toda vez que você salva um arquivo preexistente fun lastchange mark if getline last change getline last change getline last change getline last change getline last change exec last change last change strftime endif exec endfun coloquei duas opções alteração modificação assim não tem perigo de você esquecer sistema não atualizar data do salvamento outra melhoria na função que agora válida para qualquer tipo de arquivo se usar num html por exemplo insira um começo de comentário na linha da data feche comentário na próxima linha abaixo chamada função de data que chamada toda vez que você salva um arquivo preexistente au bufwritepre call setdate au bufwritepre call lastchange fim da data automática change log cria um registro de alterações de arquivo changelog entry convenience função para inserir um status do arquivo cirado data de criação alteração autor etc em modo normal fun insertchangelog normal call append arquivo call append criado strftime hs call append ultima modificação strftime hs call append autor sérgio luiz araújo silva normal endfun map cl call insertchangelog cria um cabeçalho para scripts bash fun insertheadbash normal set ft bash set ts call append bin bash call append criado em strftime hs call append ultima modificação strftime hs call append nome da empresa call append propósito do script normal endfun map sh call insertheadbash barra de status trecho abaixo formata barra de status com algumas opções interessantes mostra código ascii do caractere sob cursor outras coisas mais set statusline formato ff tipo ascii hex posição tamanho set laststatus sempre exibe barra de status mudar cor da barra de status dependendo do modo ao entrar em modo insert ele muda cor da barra de status altera cor da linha de status dependendo do modo if version au insertenter hi statusline term reverse ctermbg gui undercurl guisp magenta au insertleave hi statusline term reverse ctermfg ctermbg gui bold reverse endif rolar outra janela se você dividir janelas tipo ctrl pode colocar esta função no seu vimrc rola janela alternativa fun dir if dir down let move elseif dir up let move endif exec normal move endfun nmap call down nmap call up esta função acionada com at
ir up let move endif exec normal move endfun nmap call down nmap call up esta função acionada com atalho alt setas acima abaixo função para numerar linhas adicione as linhas abaixo ao seu vimrc numerar linhas command nargs range nlist call nlist function nlist range if let start let append elseif let start let append else let start let append endif try to work like getline allow the user to pass in or if start let start line start endif exe firstline lastline line firstline start append endfunction agora você pode fazer uma seleção visual shift pressionar até selecionar trecho desejado nlist vim numerará trecho selecionado partir de outro modo seria assim map let let só que deste modo ele numeraria todo arquivo usando atalho função para trocar esquema de cores function if exists colors_name if colors_name native colorscheme billw elseif colors_name billw colorscheme desert elseif colors_name desert colorscheme navajo night elseif colors_name navajo night colorscheme zenburn elseif colors_name zenburn colorscheme bmichaelsen elseif colors_name bmichaelsen colorscheme wintersday elseif colors_name wintersday colorscheme summerfruit elseif colors_name summerfruit colorscheme native endif endif endfunction map call baixe os esquemas aqui http nanasi jp old colorscheme_ html miscelânea uma função para inserir cabeçalho de scrip bash para chamar função basta pressionar sh em modo normal cria um cabeçalho para scripts bash fun insertheadbash normal set ft bash set ts call append bin bash call append criado em strftime hs call append ultima modificação strftime hs call append nome da sua empresa call append propósito do script normal endfun map sh call insertheadbash função para inserir cabeçalhos python função para inserir cabeçalhos python fun bufnewfile_py normal set ft python set ts call append usr bin env python call append coding iso call append criado em strftime hs call append last change strftime hs call append instituicao call append proposito do script call append autor call append site normal gg endfun autocmd bufnewfile py call bufnewfile_py map py call bufnewfile_py ao editar um arquivo será aberto no último ponto em que foi editado autocmd bufreadpost if line line source home vimrc echo vimrc recarregado redimensionar janelas redimensionar janela com alt seta direita esquerda map resize map resize função para pular para uma linha qualquer ir para linha ir para uma linha específica function gotoline let ln inputdialog ir para linha exe ln endfunction no meu caso mapeamento com ctrl use que melhor lhe convier imap call gotoline nmap call gotoline função para gerar backup função abaixo útil para ser usada quando você vai editar um arquivo gerando modificações significativas assim você poderá restaurar backup se necessário mapping to make backup of the current file fun writebackup let fname expand strftime y_ silent exe fname echo wrote fname endfun nnoremap ba call writebackup atalho em geral contrabarra na dúvida help como adicionar python a
dfun nnoremap ba call writebackup atalho em geral contrabarra na dúvida help como adicionar python ao path do vim fonte http vim wikia com wiki coloque seguinte script em vim after ftplugin python vim on unix systems home vimfiles after ftplugin python vim on windows systems python comando acima diz amenu cria um menu ferramentas menu plugin submenu echo colors_name comando para exibir nome do tema de cores atual caso haja espaços no nome definir você pode fazer assim amenu ferramentas exibir nome do tema echo colors_name criando menus para um modo específico menu normal visual operator pending nmenu modo normal vmenu modo visual omenu operator pending modo menu insert comando imenu modo insert cmenu modo de comando amenu todos os modos exemplo de menu cores menu emas cores quagmire colo quagmire menu emas cores inkpot colo inkpot menu emas cores google colo google menu emas cores ir_black colo ir_black menu emas cores molokai colo molokai fontes menu emas fonte inconsolata set gfn inconsolata menu emas fonte anonymous set anti gfn anonymous menu emas fonte envy code set anti gfn envy_code_r menu emas fonte monaco set gfn monaco menu emas fonte crisp set anti gfn crisp menu emas fonte liberation mono set gfn liberation mono comando update atualiza menu recem modificado quando comando amenu usado sem nenhum argumento vim mostra os menus definidos atualmente para listar todas as opções de menu para plugin por exemplo faça amenu plugin outros mapeamentos destaca espaços tabs redundantes highlight redundant whitespace and tabs highlight ctermbg red guibg red match ze explicando com detalhes espaço uma ou mais vezes no final da linha ou espaço veja imagem acima uma ou mais vezes ze até fim tabulação portanto expressão regular acima localizará espaços ou tabulações no final de linha destacará em vermelho remove espaços redundantes no fim das linhas map mz um detalhe importante mz marca posição atual do cursor para ternornar no final do comando retorna marca criada se não fosse feito isto cursor iria ficar na linha da última substituição função mais elaborada para remover expaços extras fun let save_cursor getpos let old_query getreg call setpos save_cursor call setreg old_query endfun nmap call autocmd bufwritepre call como uma função visto acima guardamos posição do cursor getpos última busca efetuada getreg fazemos deleção se houver de espaços extras se não houver opção evita mensagens de erro finalmente restauramos registro de busca posção do cursor tudo isso encapsupsulado em uma função de nome que então mapeada para ser chamada com ou executada automaticamente quando arquivo for salvo abre vim vim explorer map vne vertical resize set nonu fazendo buscas substituições podemos usar expressões regulares em buscas do vim veja um exemplo para retirar todas as tags html mapeamento para retirar tags html com ctrl alt nmap quebra linha atual no local do cursor com nmap join lines junta as linhas com shift nmap complementação com tab word completion comple
sor com nmap join lines junta as linhas com shift nmap complementação com tab word completion complementação de palavras set dictionary usr dict words set complete complementação de palavras usa tab em modo insert para completar palavras function direction let col col if col getline col return elseif backward direction return else return endif endfunction inoremap forward inoremap backward abreviações também no vimrc você pode colocar abreviações que são uma espécie de auto texto para vim iab slas sérgio luiz araújo silva iab linux gnu linux iab linux gnu linux esta abreviação legal para usar com python im referências http www dicas com br dicas php