Esta é apenas uma dica rápida sobre o recurso de autocompletar do Vim.
Tenho usado o excelente plugin SuperTab Vim há alguns anos, e ele funciona razoavelmente bem (autocompleta com base em palavras de todos os tipos, nomes de arquivos, tags, contextos etc.), mas não funciona muito bem para texto que possui divisão por traços – e códigos CSS contêm grande quantidade de traços… então, comecei a ficar frustrado com isso.
Você pode alterar o comportamento do recurso de autocompletar com set iskeyword
, que também altera o comportamento de comandos padrão de movimento como w
, e
, b
(que altera o delimitador de palavras). Minha solução rápida para o problema era manter iskeyword
com o valor mínimo possível e só mudar isso durante InsertEnter
. Dessa forma, eu ainda posso usar cw
, ve
e db
para editar cada fragmento do código e o autocompletar funcionará adequadamente para palavras como foo-bar__baz
, e você ainda pode usar W
, B
e E
se você quiser ir rapidamente para palavras similares. Para mim, esse é o melhor dos dois mundos!
function! KeywordsAll() setl iskeyword=@,48-57,192-255,\@,\$,%,-,_ endfunc function! KeywordsBasic() setl iskeyword=@,48-57,192-255 endfunc " improve the 'search word under cursor' behavior nnoremap * :silent call KeywordsAll() * :silent call KeywordsBasic() nnoremap # :silent call KeywordsAll() # :silent call KeywordsBasic() augroup is_keyword " clear commands before resetting autocmd! " make sure `complete` works as expected for CSS class names whithout
E aqui estão as minhas outras configurações de preenchimento automático:
set infercase set completeopt=longest,menuone set omnifunc=syntaxcomplete#Complete set completefunc=syntaxcomplete#Complete set complete=.,w,b,u,U,t,i,d augroup omni_complete " clear commands before resetting autocmd! " Enable omnicomplete for supported filetypes autocmd FileType css,scss setlocal omnifunc=csscomplete#CompleteCSS autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS autocmd FileType python setlocal omnifunc=pythoncomplete#Complete autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags augroup END
Não estou usando plugins para gerar JavaScript ou tags CSS, por isso a minha conclusão de código se baseia principalmente em todas as palavras contidas em todos os buffers de código abertos. Por causa da maneira com a qual estruturo código atualmente, quase não preciso de mais do que isso.
PS: Eu não recomendo o uso do Vim caso você seja um desenvolvedor novato e, ao mesmo tempo, não consigo me ver usando outro editor atualmente… – aqui está a configuração do completa do meu .vimrc e alguns links úteis caso você esteja interessado.
Edição 1: alterei o autocmd
para ser disparado em BufEnter
e BufLeave
para melhorar o recurso de autocompletar em todos os buffers abertos.
Edição 2: alterados os comportamentos * e #.
***
Artigo traduzido pela Redação iMasters, com autorização do autor. Publicado originalmente em http://blog.millermedeiros.com/vim-css-complete/