Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/07/2006, à 16:20

pabix

[HowTo] Complétion automatique sous vim

Voici un petit script splendide pour avoir la complétion et l'indentation automatiques sous vim avec la touche TAB, activer la numérotation des lignes, l'indentation automatique et la coloration syntaxique.

À enregistrer dans le fichier .vimrc dans votre répertoire de connexion !

Benoit

"Numérotation automatique
set nu

"Indentation automatique
set autoindent

"Coloration syntaxique
syntax on

"Remplacement des tabulations par 4 espaces dans les fichiers PHP
au FileType php set et sts=4 sw=4

" Touche TAB améliorée
vmap <tab> >gv
vmap <bs> <gv

function! TabAlign()
" Cette fonction, lorsqu'aucun mot n'est tapé, cherche à recopier le dernier caractère de la ligne d'avant
" Idéal pour aligner des backslash avant des retour à la ligne
    let col  = col('.')
    let lnum = line('.')

" recherche de la première ligne ayant une longueur supérieure à la ligne courante
    while lnum > 1 " chercher la ligne 
        let lnum = lnum - 1
        let ln = strpart(getline(lnum), col-1)
        let ms = matchstr(ln, '[^ ]*  *[^ ]')
        if ms != ""
            break
        endif
    endwhile

    if lnum == 1
        return "\<Tab>"
    else
" Copie dans le registre z du dernier caractère de la ligne de longueur supérieure trouvée
        let @z = substitute(strpart(ms, 0, strlen(ms)-1), '.', ' ', 'g')
" Si au dernier caractère de la ligne :
        if col > strlen(getline('.'))
" Copie du registre z après le caractère courant (CTRL-O échappe du mode insertion pour une instruction)
            return "\<C-O>\"zp"
        else
" Copie du registre z avant le caractère courant (idem)
            return "\<C-O>\"zP"
        endif
    endif

endfunction

function! CleverTab()
    let c = strpart(getline('.'), col('.')-2, 1)
" Si aucun mot n'a été partiellement saisi
    if c == ' ' || c == '\t' || c == ''
" Utiliser la fonction précédente
        return TabAlign()
" Sinon
    else
" Complétion automatique
        return "\<C-P>"
    endif
endfunction
inoremap <Tab> <C-R>=CleverTab()<CR>
inoremap <S-Tab> <C-R>=TabAlign()<CR>

Dernière modification par pabix (Le 07/12/2006, à 12:04)


Utilisateur du clavier BÉPO.
mortgat (()) gmail () com
GPG 0x377D716D

Hors ligne

#2 Le 05/07/2006, à 04:37

kikdijon

Re : [HowTo] Complétion automatique sous vim

ou si on ne veut pas sacrifier la touche de tabulation, on peut aussi utiliser ctrl + n, pour la completion automatique smile


blog : http://blog.olivier-elmekki.com
site professionnel : http://olivier-elmekki.com

Hors ligne

#3 Le 05/07/2006, à 09:33

pabix

Re : [HowTo] Complétion automatique sous vim

tout à fait, ou Ctrl-P (sens inverse)
Benoit


Utilisateur du clavier BÉPO.
mortgat (()) gmail () com
GPG 0x377D716D

Hors ligne

#4 Le 07/12/2006, à 11:46

Cube

Re : [HowTo] Complétion automatique sous vim

Salut

Pourrais-tu commenter les deux fonctions du script ? Car j'aimerais en modifier le comportement mais je ne connais le langage de Vim.

Hors ligne

#5 Le 07/12/2006, à 11:53

pabix

Re : [HowTo] Complétion automatique sous vim

Voilà !

PS. C'est pas de moi, le script, et je ne connais pas vraiment le langage de macro de vim, mais on peut le comprendre. Il y a une grande, grande fonction qui ne sert presque pas. La grande ligne, la principale est « return "\<C-P>" »


Benoit

Dernière modification par pabix (Le 07/12/2006, à 12:05)


Utilisateur du clavier BÉPO.
mortgat (()) gmail () com
GPG 0x377D716D

Hors ligne