Est-il possible d’avoir des noms de fonction, des variables, etc., auto-complets lorsque vous l’utilisez pour programmer?


56

De nombreux IDE complètent automatiquement les noms de fonctions, les variables, les noms de méthodes, etc., au fur et à mesure que l'utilisateur les tape. Les meilleurs complètent les noms en fonction à la fois de la bibliothèque intégrée au langage et de ce qui a déjà été défini dans d'autres fichiers du même programme.

Par exemple, lorsque je tape le programme Python suivant:

hungy = True

def eatFood(food):
    pass

if hungry:
    eatF

la ligne eatFs'afficherait automatiquement eatFood()comme une option de saisie semi-automatique disponible.

Vim a-t-il cette capacité? Si oui, comment puis-je l'activer?

Réponses:


42

Il existe de nombreux types d’autocomplétion dans vim. Une solution pourrait être d'utiliser SuperTab . Cela fournit un moyen d'utiliser la complétion par tabulation plus ou moins à tout moment. Cela vous permettrait de frapper Tabaprès avoir partiellement saisi le mot pour obtenir une liste de complétion. Par exemple, en tapant eatFsuivi de Tabpour développer àeatFood.

Remarque : ces images sont toutes liées à des exemples de gifs en action.

finitions supertab

Vim a d’autres excellentes options. Vous devriez lire :h ins-completionpour voir la variété des options de complétion intégrées. L'utilisation de vim's Ctrl- XCtrl- O, associée à un plugin compatible Python comme Jedi, peut donner une idée de la finition. Jedi peut être configuré pour donner de la documentation sur l'omni-complétion (c'est ce que fait Ctrl- XCtrl- O). Ensuite, la documentation pour les candidats à l'achèvement apparaîtra dans une fenêtre scindée.

achèvement de ctrlxctrlo

Utiliser des plugins similaires mais des options différentes mène à toutes sortes de comportements. Il est possible, par exemple, de ne pas avoir besoin d'inviter l'auto-complétion (si c'est ce que vous recherchez). Au lieu de cela, après avoir tapé un certain nombre de lettres (disons, 2 ou 3) d'un mot, un plugin peut essayer de proposer intelligemment des complétions possibles dans un menu.

entrez la description de l'image ici

Donc, la réponse courte est un oui! Mais le processus de configuration peut être un peu compliqué. Je le considère comme une étape dans le long escalier de maîtrise de vim.


Je les ai toutes essayées et je reviens toujours sur SuperTab, c'est le moins intrusif.
Craigp

1
J'aime aussi beaucoup le plugin YouCompleteMe, car il suggère que vous tapez et que vous pouvez choisir ou ignorer les suggestions. Oui, visuellement, il est difficile de l'ignorer, mais mon flux de travail est très peu intrusif car il nécessite moins de touches.
Thriveth

3
J'ai modifié les animations pour qu'elles soient "au clic", en ce sens qu'elles sont liées aux animations gif.
davidlowryduda

1
Je ne peux pas utiliser YouCompleteMe sur mon ordinateur de travail car je n'ai pas la racine pour installer les dépendances, SuperTab est de loin le meilleur choix.
Charles Clayton

@mixedmath Dans mon cas, superTab ne fonctionne pas.
Alhelal

24

Une telle fonctionnalité - c’est-à-dire que la recherche du remplissage automatique dans le fichier actuel (et dans tous les fichiers ouverts) doit être activée par défaut avec Ctrl+P:

capture d'écran de l'auto-complétion en cours d'utilisation

Vous pouvez aller à la n suggestion de poste avec Ctrl+Nla p suggestion récédent avec Ctrl+Pet sélectionnez - en tapant une lettre (qui sera automatiquement ajouté à la suggestion).


1
Pour l'éditeur (Jasper): Il est plus probable que je veuille écrire quelque chose que j'ai écrit récemment, pas quelque chose que j'écrirai plus tard ou qui se trouve au début du fichier. Par conséquent, ^Pest plus naturel IMHO. Sinon, merci pour l'édition (j'espère avoir cliqué sur le bouton droit et vous avez obtenu votre +2).
Yo '

1
Oui, j'ai eu ces points Internet imaginaires :) J'ai toujours pensé que la liste de suggestions serait classée par ordre alphabétique ...
Jasper

L'ordre d'apparition de @Jasper est le cas (du moins pour moi, voir également ci-dessus: world,word,woodet non l'inverse). Il en ^Pva de même pour la dernière complétion utilisée, ce qui est très pratique (je vais rarement au-delà de 3 éléments de la liste, même dans un long fichier).
Yo '

protip:inoremap <C-Space> <C-N>
wchargin

20

Vim a un soutien pour l'achèvement de manière native. Vous pouvez en savoir plus sur les différentes finitions prises en charge par Vim :h ins-completion.

En général, pour toutes les raisons que j'ai trouvées, les compléments suffisent à mon goût, cependant, il existe des plugins de complétion qui ajoutent plus de valeur que ce que propose les compléments. NeoComplete , YCM (YouCompleteMe) sont quelques-uns pour le même. Ils sont plus avancés dans le sens où ils essaient de combiner différents types de complétions avec plus de précision. Ils disposent également de mécanismes de mise en cache avancés, de sorte qu'ils ont tendance à être plus rapides. YCM va même jusqu’à travailler avec des compilateurs / utilitaires externes pour fournir un meilleur IntelliSense.


9

Oui, les scripts d'achèvement automatique pour vim existent. Le "meilleur" choix dépend de votre langage de programmation. Comme votre exemple de code est Python, je suggère de jeter un coup d'œil à Jedi . Construire en plus de cela, vous avez terminé, existe, il supporte également d'autres langues, mais est parfois considéré comme trop volumineux. Pour les autres langues, vous pouvez parcourir l'ensemble des scripts vim .


7

En mode insertion, tapez les deux premiers caractères d'un mot, puis appuyez sur:

Ctrl-N to insert the next matching word; or
Ctrl-P to insert the previous matching word. 

Ceci est particulièrement utile lors de la saisie des noms de variables dans un programme.

L'option 'complète' contrôle l'endroit où les mots-clés sont recherchés (fichiers à inclure, fichiers de balises, mémoires tampons, etc.).

L'option 'completeopt' contrôle le déroulement de l'achèvement (par exemple, l'affichage ou non d'un menu).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.