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
