Comment l'auto-complétion de code python?
Je voudrais le code de l'auto-complétion de terminal Linux. Le code doit fonctionner comme suit.
Il a une liste de chaînes de caractères (par exemple, "bonjour, "salut", "comment allez-vous", "au revoir", "grand", ...).
Dans le terminal de l'utilisateur de commencer à taper et quand il y a quelques match possibilité, il obtient l'indice possible pour les chaînes, à partir de laquelle il peut choisir (de même que dans éditeur vim ou google recherche incrémentale).
par exemple, il commence à taper "h" et il obtient l'indice
h"ello"
_ "je"
_"ux de vous"
Et mieux encore serait si cela permettrait de compléter les mots non seulement depuis le début, mais de l'arbitraire partie de la chaîne.
Merci à vous pour obtenir des conseils.
- Quel est le contexte? Êtes-vous en cours d'exécution Python application dans le terminal qui reçoit des informations de l'utilisateur? Je ne comprends pas...
- Oui, exactement
Vous devez vous connecter pour publier un commentaire.
(Je suis conscient que ce n'est pas exactement ce que vous demandez, mais Si vous êtes heureux avec l'auto-complétion/suggestions figurant sur TAB (comme utilisé dans de nombreuses coquilles), alors vous pouvez obtenir rapidement et en cours d'exécution à l'aide de la readline module.
Voici un petit exemple basé sur Doug Hellmann's PyMOTW writeup sur readline.
Cela se traduit dans le comportement suivant (
<TAB>
représentant l'onglet touche enfoncée):Dans la dernière ligne (HOTAB entrée), il n'est qu'un match et l'ensemble de la phrase "comment êtes-vous" est automatique terminée.
Découvrez les articles liés pour plus d'informations sur
readline
.Ceci peut être réalisé simplement en modifiant les critères de correspondance dans le completer la fonction, c'est à dire. de:
à quelque chose comme:
Cela vous donnera le comportement suivant:
Mises à jour: à l'aide de l'histoire de la mémoire tampon (comme mentionné dans les commentaires)
Un moyen simple de créer un pseudo-menu pour faire défiler/recherche consiste à charger les mots-clés dans l'histoire de la mémoire tampon. Vous serez alors en mesure de faire défiler les entrées en utilisant les touches fléchées haut/bas ainsi que l'utilisation de Ctrl+R pour effectuer un reverse-recherche.
Pour essayer, faire les modifications suivantes:
Lorsque vous exécutez le script, essayez de taper Ctrl+r suivi de un. Qui sera de retour le premier match qui contient "un". Entrez Ctrl+r de nouveau pour le prochain match. Pour sélectionner une entrée, appuyez sur la touche ENTRÉE.
Également essayer d'utiliser les touches HAUT/BAS pour faire défiler les mots-clés.
automatic autocomplation while typing, without the need to press tab key
possibilité de compléter à partir dearbitrary part of the strings
, possibilité dechoosing between matches with rows, or other keyboard shortcuts
.ncurses
nécessaire pour l'achèvement sans la touche tab?ncurses
est nécessaire je pense pour la fonctionnalité avec la navigation par le biais de la liste de suggestions, c'est la fonction que je donne ou le laisser pour plus tard.ncurses
, mais je doute si achèvement chaque pression de touche, c'est faisable à l'aide dereadline
(tout à fait possible pour de bonnes raisons). Le plus proche de la solution que je peux penser à "la navigation par le biais de la liste de suggestions" est de charger les mots-clés dans lereadline
l'histoire de la mémoire tampon qui permet de naviguer à l'aide de vos touches fléchées haut/bas ainsi que l'utilisation de laCtrl-r
raccourcis de recherche. Je vais mettre à jour la réponse avec un exemple.Je suppose que vous aurez besoin pour obtenir un touche enfoncée par l'utilisateur.
Vous pouvez l'atteindre (sans appuyer sur la touche entrer) avec une méthode comme ceci:
Alors, si cette touche est une touche tabulation (par exemple, c'est quelque chose que vous avez besoin pour mettre en œuvre), puis d'afficher toutes les possibilités pour l'utilisateur. Si c'est sur toute autre touche, l'imprimer sur la sortie standard stdout.
Oh, bien sûr, vous aurez besoin d'avoir getkey() en boucle dans un certain temps, aussi longtemps que l'utilisateur appuie sur entrée. Vous pouvez également obtenir une méthode comme raw_input, qui vous permettra d'obtenir le mot en entier signe par signe, ou l'affichage de toutes les possibilités, lorsque vous appuyez sur un onglet.
Au moins, c'est l'élément, vous pouvez commencer avec. Si vous avez d'autres problèmes, que d'écrire à leur sujet.
EDIT 1:
La get_word méthode peut ressembler à ceci:
La question, je suis survenant à l'instant est le moyen d'afficher un signe, vous venez d'entrer, sans n'entre et espaces, ce que les deux
print a
etprint a,
n'.vi
's d'afficher les suggestions.incremental matching
etshowing hints while typing
Pour activer la saisie semi-automatique dans un Python shell, tapez ceci:
(grâce à http://blog.e-shell.org/221)
Suit:
Créer un fichier .pythonrc dans le répertoire home de par cette commande:
vi .pythonrc
Entrer ce contenu:
Fermez le fichier
Maintenant exécuter
echo "export PYTHONSTARTUP=~/.pythonrc" >> ~/.bashrc
Redémarrer le terminal
Pour ceux (comme moi) qui finissent ici à la recherche pour la saisie semi-automatique dans l'interpréteur:
https://web.archive.org/web/20140214003802/http://conjurecode.com/enable-auto-complete-in-python-interpreter/
Cela implique la création d'un fichier
.pythonrc
, la modification.bashrc
et unimport sys
vous devez importer chaque fois que vous lancez l'interpréteur Python.Je me demande si ce dernier peut être automatisé pour encore plus de gagner.