2017-09-30 4 views
0

En vim (en mode Insertion, après avoir exécuté des ctags exubérants), j'utilise ctrl-x suivi de ctrl-] pour faire apparaître une liste déroulante de divers mots/jetons possibles. C'est une super fonctionnalité. Le problème est que par défaut, cette liste commence avec un tas d'options numériques et insère automatiquement la première option numérique, et si je recule pour se débarrasser des nombres et commencer à taper une partie d'un mot frais - avec l'idée de chercher à partir du milieu du mot - le comportement autocompletion se termine entièrement. Je sais que je pourrais taper la première lettre du mot que je veux, puis aller à partir de là. Mais cela suppose que je connais la première lettre du mot, ce qui n'est pas forcément donné. Par exemple, si je travaille sur un projet de programmation en binôme avec un ami pendant une longue fin de semaine, je ne me souviens pas à un moment donné s'il a appelé sa méthode promoteRecordStatus(), updateRecordStatus() ou boostRecordStatus() . Dans cet exemple, je voudrais taper RecordStatus et obtenir le résultat pertinent, ce qui ne semble pas possible en un coup d'oeil avec le comportement actuel. Y a-t-il un moyen simple, vim-natif de dire à l'éditeur de commencer son auto-complétion sans aucune supposition, puis de rechercher tous les jetons disponibles pour ma chaîne typée dans toutes les parties de chaque jeton?Existe-t-il un interligne pour dire à autocomplétion vim/ctags de chercher à partir du milieu d'un mot?

Je vais bien sûr considérer les suggestions de plugins utiles, mais je préférerais une réponse courte, vim-native qui ne nécessite pas de plugins si possible. Idéalement, la configuration pourrait être définie en utilisant juste une ligne ou deux.

Répondre

0

Les compléments intégrés nécessitent tous une correspondance à la position de départ. Dans certains cas, vous pouvez supprimer des caractères séparateurs de l'option 'iskeyword' (par exemple, dans Vimscript, déposez # pour pouvoir compléter des composants individuels à partir de foo#bar#BazFunction()), mais cela ne fonctionnera pas du tout pour camelCaseWords.

La personnalisation :help complete-functions peut cependant implémenter n'importe quelle recherche d'achèvement. Pour être basé sur la base de données des balises, il faudrait utiliser taglist() comme source, et filtrer en fonction de la base d'achèvement saisie avant de déclencher l'achèvement. Si vous n'ancrez pas cette correspondance de motif au début, vous avez votre achèvement désiré.