2009-06-28 10 views
9

Je sais que je peux obtenir le mot proposé par CTRL+N & CTRL+P et l'achèvement du code par omnifunc avec CTRL+XCTRL+O. J'ai aussi essayé Supertab (très sympa), parce que je suis habitué à l'achèvement de TAB. Tout a bien fonctionné. Je voudrais voir des correspondances possibles pendant que je tape, donc j'ai aussi essayé autocomplpop.vim, c'est exactement ce que je fais.Word/complétion de code dans VIM

Ce que je veux accomplir bien, serait une combinaison des deux avec un petit twist: Je voudrais voir les suggestions pop-up que je tape (comme avec autocompop) mais quand j'utilise TABle mot doit être élargi ne le plus grand match de commun:

foo bar testor booze test baz teter 
te<TAB> 

Après type I te dans la 2ème ligne, la fenêtre contextuelle devrait suggérer test, teter et testor.

Lorsque j'appuie sur TAB, cela ne devrait rien faire, car il n'y a pas plus de terrain commun que te. Après avoir tapé un s supplémentaire et appuyez sur TAB, il devrait étendre tes à test (parce que c'est le plus petit terrain commun) et à testor après un deuxième TAB.

Modifier: J'essaie d'être plus clair ...

  • te<TAB>
    • ne devrait rien faire parce que "nous" ne savons pas si un 't' (te t er) ou un 's' (te s t, te s) devrait suivre.
  • tes<TAB>
    • devrait ÉTENDU pour test (car cela fonctionne pour les deux - tests et Testor - et Teter n'est plus une correspondance possible).
  • test<TAB>
    • devrait étendre à testor (seul match possible).

Eh bien, les suggestions pop-up est que du bonus, mais je voudrais vraiment voir le comportement TAB. J'espère ne pas arriver à l'ésotérisme ici et vous pouvez m'aider avec des trucs de script ou des plugins pour apprivoiser VIM pour faire exactement cela.

+0

Est-ce que "test" ne correspond pas à "test "? C'est ainsi que bash le traite ... (Mis à part ce troisième cas, vos exemples reflètent les règles d'achèvement de bash ...) – Stobor

Répondre

6
:set completeopt=longest,menu,preview 

peut-être?

(je ne sais pas si votre déclaration

« quand j'appuyez sur TAB, il ne devrait rien faire, parce qu'il n'y a pas plus de terrain commun que te »

conflits

avec votre plus tard déclaration

"à Testor après une 2ème TAB."

Il me semble qu'il n'y a pas plus de terrain d'entente que "test" à ce moment-là ... Sauf si vous voulez dire que le premier onglet va au plus long terrain commun, puis les onglets suivants passent par les autres correspondances, auquel cas vous suis après ce que j'ai ci-dessus ...)

+0

Si j'utilise ': set completeopt = longest, menu, preview' et appuyez sur tab après' te' c'est terminé à 'testeur'. Ce n'est pas ce que je voudrais accomplir. – Brutus

+0

Quelqu'un sur super-utilisateur avait une question similaire (http://superuser.com/questions/117490/vim-autocompletion-making-xu-expand-to-longest-match) et ils ont dit que SuperTab était le plus long. Avez-vous essayé de désactiver le supertab? – idbrii

+0

: set completeopt = le plus long, le menu est ce que vous voulez. – qed