Benutzer:Stettberger/Blog:Vim Tab completion
Aus der Not heraus eine vernüftige Entwicklungsumgebung für Java zu haben, die nicht mal kurz 300mb Virtuellen Speicher braucht (hint: Eclipse), wollte ich mich eigentlich wieder mal versuchen an Emacs zu gewöhnen (Das ESC ESC bekommt man einfach nicht mehr weg), weil es dort die jdee gibt, die Emacs zu einer ziemlich ausgefeilten Java IDE macht. Jedoch hab ich dann am gestrigen Bastelabend erfahren, wie man die Omni Completion von vim doch mal vernünftig zum laufen bekommt, was einem die Möglichkeit einer Tab Completion für Klassemethoden etc. gibt. Dazu habe ich dann noch eine Omni Complete Funktion für Java gefunden click. Diese einfach nach der gegebenen Anleitung installieren und folgendes in die eigene vimrc schreiben:
autocmd Filetype java setlocal omnifunc=javacomplete#Complete if has("autocmd") && exists("+omnifunc") autocmd Filetype * \ if &omnifunc == "" | \ setlocal omnifunc=syntaxcomplete#Complete | \ endif endif
Dies aktiviert die Java Omni Completion und für alle anderen die Syntax Omni Completion, die nach Syntax Keywords vervollständigt. Will man jetzt noch <Tab> im Einfügemodus verwenden brauchts noch folgendes:
function! Smart_TabComplete() let line = getline('.') " curline let substr = strpart(line, -1, col('.')+1) " from start to cursor let substr = matchstr(substr, "[^ \t]*$") " word till cursor if (strlen(substr)==0) " nothing to match on empty string return "\<tab>" endif if pumvisible() return "\<C-N>" endif let has_period = match(substr, '\.') != -1 " position of period, if any let has_slash = match(substr, '\/') != -1 " position of slash, if any if (!has_period && !has_slash) return "\<C-X>\<C-P>" " existing text matching elseif ( has_slash ) return "\<C-X>\<C-F>" " file matching else return "\<C-X>\<C-O>" " plugin matching endif endfunction inoremap <tab> <c-r>=Smart_TabComplete()<CR>
Quelle: Vim Wiki