# [TIP] Completion du C avec ViM !

## kernelsensei

Voici quelques lignes à ajouter au vimrc pour avoir la completion du C !

```
"Debut de Completion

function InsertTabWrapper(direction)

let col = col('.') - 1

if !col || getline('.')[col - 1] !~ '\k'

return "\<tab>"

elseif "backward" == a:direction

return "\<c-p>"

else

return "\<c-n>"

endif

endfunction

inoremap <tab> <c-r>=InsertTabWrapper("forward")<cr>

inoremap <s-tab> <c-r>=InsertTabWrapper("backward")<cr>

" Fin de Completion

```

Apres, il suffit de taper le début d'une fonction par exemple (ben ca marche aussi avec les variables), puis <TAB> comme avec bash, et vim va chercher les correspondances dans les headers et les propose !!

exemple :

```
#include <stdio.h>

int 

main(){

prin<TAB>

   |

   V

printf

.....

```

ca devient avec les fonctions qui ont un nom relativement long genre SDL_WM_ToggleFullScreen  :Very Happy: 

----------

## sireyessire

HUGE!

c'est trop bien comme tip, merci  :Wink:  .

----------

## gabo

J'essaye ca demain au boulot !!!

Merci !

----------

## Beber

alors ca c'est trop la classe !!!

et ca marche au poils  :Smile: 

mercii !!!!!!!!!!

----------

## Sleeper

<mode trolleur>

Et pour les emacsen : 

```
Esc-/
```

Ca marche pour tous les buffers/languages ... mais c'est plus simple de le remapper sur Shift-tab  :Smile: 

</mode trolleur>

----------

## gabo

bon, ca marche très bien en effet.

Mais question con, comment on fait pour faire une simple tabulation après ?   :Laughing: 

Car la, je vais changer la touche car c'est pas pratique sur tab ...

----------

## kwenspc

Ah vi sympa   :Very Happy: 

la plupart du temps je suis sous anjuta, et bien là je dois dire que je vais passer definitivement à vim!

----------

## Talosectos

sympa ce tip   :Cool: 

Merci kernel senseï   :Razz: 

----------

## sireyessire

 *gabo wrote:*   

> bon, ca marche très bien en effet.
> 
> Mais question con, comment on fait pour faire une simple tabulation après ?  
> 
> Car la, je vais changer la touche car c'est pas pratique sur tab ...

 

il ne complétionne que quand tu as commencé un mot. sinon ça fait un tab normal.

----------

## Beber

oui, mais si tu veu mettre un tabulation juste apres un mot sans faire d'espace avant

genre truc[tab] au lieu de truc[espace][tab] parce que ca va essayé de compléter sinon :s des le premier tab

----------

## kernelsensei

ben en fait si tu fais l'espace avant, il va quand meme s'arreter au meme endroit que si t'avais fait seulement un tab, donc espace+tab !

----------

## sebbb

Hummm on peut surement faire la même chose pour du php... mais comment ?

Y'a pas une astuce pour que ça marche pour "tous" les langages ?

Mici

----------

## TTK

 *kernel_sensei wrote:*   

> Voici quelques lignes à ajouter au vimrc pour avoir la completion du C !

 

Salut

Ca existe deja .. en mode insert, ctrl-x puis i complete a partir des includes. Sinon ctrl-p ou -n completent a partir du buffer courant .

Dans ctrl-x y'a d'autres modes de completion sympas. a découvrir !

----------

## sebbb

T'es sur que tu parles pas de emacs ?

Sinon je suis curieux de voir ton vimrc, chez moi "ctrl-x i" donne pas grand chose....

----------

## TTK

 *sebbb wrote:*   

> T'es sur que tu parles pas de emacs ?
> 
> Sinon je suis curieux de voir ton vimrc, chez moi "ctrl-x i" donne pas grand chose....

 

Salut

Désolé, je tapais d'une seule main avec mon rejeton sur les genoux. Je voulais dire ctrl-x ctrl-i. Déjà quand tu fais ctrl-x tu dois voir apparaitre une liste de modes de complétion possibles en bas du buffer:

```
-- ^X mode (^E^Y^L^]^F^I^K^D^V^N^P)
```

Si tu fais :help completion tu auras le détail de ces modes.

Sur l'exemple de kernel_sensei: SDL_WM_ToggleFullScreen sera encore plus facile a taper avec l'option "infercase".

HTH

----------

## sebbb

ok, merci pour le complément :)

----------

## AssiuM

un grand merci pour ce truc qui va me faire gagner du temps !!

----------

## DaiKo

Extra giga géniale  :Smile:  merci bien !!

----------

## kernelsensei

juste un petit supplement pour dire comment ajouter des emplacements ou aller chercher les .h :

Il faut faire :

```
:set path+=chemin1,chemin2,....
```

----------

