Benutzer:Stettberger/Blog:Vim Tab completion

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche
Vim 4star.gif

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