Ist es möglich, Python-Code-Vervollständigung in Textmate zu implementieren?
-
03-07-2019 - |
Frage
PySmell scheint wie ein guter Ausgangspunkt.
Ich denke, es sollte möglich sein, tut PySmell des idehelper.py
eine Mehrheit der komplexen Sachen, es sollte nur ein Fall sein, die aktuelle Zeile geben, die Fertigstellungen von bis (das Bit ich nicht sicher bin), und dann ersetzt die Linie mit dem ausgewählten.
>>> import idehelper
>>> # The path is where my PYSMELLTAGS file is located:
>>> PYSMELLDICT = idehelper.findPYSMELLDICT("/Users/dbr/Desktop/pysmell/")
>>> options = idehelper.detectCompletionType("", "" 1, 2, "", PYSMELLDICT)
>>> completions = idehelper.findCompletions("proc", PYSMELLDICT, options)
>>> print completions
[{'dup': '1', 'menu': 'pysmell.pysmell', 'kind': 'f', 'word': 'process', 'abbr': 'process(argList, excluded, output, verbose=False)'}]
Es wird nie perfekt sein, aber es wäre sehr nützlich sein (wenn auch nur für die stdlib Module abgeschlossen, die sich nie ändern sollte, so wie Sie es sonst ständig müssen die PYSMELLTAGS Datei regenerieren, wenn Sie eine Funktion hinzufügen)
Progressing! Ich habe die völlige-Grundlagen der Fertigstellung an Ort und Stelle - kaum funktioniert, aber es ist in der Nähe ..
Ich lief python pysmells.py /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/*.py -O /Library/Python/2.5/site-packages/pysmell/PYSMELLTAGS
Platzieren Sie die folgenden in einem Textmate Bündel Skript Setz "-Eingang: gesamtes Dokument", "output: Als Text einfügen", "Aktivierung: Schlüssel äquivalent: alt + esc", "scope selector: source.python"
#!/usr/bin/env python
import os
import sys
from pysmell import idehelper
CUR_WORD = os.environ.get("TM_CURRENT_WORD")
cur_file = os.environ.get("TM_FILEPATH")
orig_source = sys.stdin.read()
line_no = int(os.environ.get("TM_LINE_NUMBER"))
cur_col = int(os.environ.get("TM_LINE_INDEX"))
# PYSMELLS is currently in site-packages/pysmell/
PYSMELLDICT = idehelper.findPYSMELLDICT("/Library/Python/2.5/site-packages/pysmell/blah")
options = idehelper.detectCompletionType(cur_file, orig_source, line_no, cur_col, "", PYSMELLDICT)
completions = idehelper.findCompletions(CUR_WORD, PYSMELLDICT, options)
if len(completions) > 0:
new_word = completions[0]['word']
new_word = new_word.replace(CUR_WORD, "", 1) # remove what user has already typed
print new_word
Dann habe ich ein neues Python-Dokument, getippt "import urll" und drücken Sie Alt + Flucht, und es fertig, es zu "import urllib"!
Wie gesagt, es ist ganz eine Work-in-progress, so verwenden Sie es noch nicht ..
Letzte Aktualisierung:
Orestis integriert diese in die PySmell Projekt-Code! Eine darüber hinausgehende Hantieren wird passieren auf Github
Lösung
EDIT: Ich habe tatsächlich nahm den Code oben und integriert in einen Befehl. Es wird richtig eine Vervollständigungsliste zeigen, damit Sie wählen.
Sie können es hier greifen: http://github.com/orestis/pysmell/tree / Master (Hit-Download und python tun setup.py install). Es ist rau, aber es funktioniert. - melden Sie sich bitte alle Fehler auf http://code.google.com/p/pysmell/
-
Hallo, ich bin der Entwickler PySmell. Ich benutze auch einen Mac, also wenn Sie mir eine E-Mail senden (Kontaktinfos im Quellcode sind) mit dem Fortschritt so weit, ich kann versuchen, es zu integrieren:)
Oh BTW ist es PySmell genannt - kein Hinter 's':)
Andere Tipps
Dies ist nicht genau das, was Sie suchen, aber es könnte Sie bekommen können, gestartet:
Sie scheinen etwas Django spezifisch zu sein, aber einige Schnipsel mit Ihren Bedürfnissen helfen können. Sie können auch in der Lage sein, oben auf, dass zu bauen mit PySmells.
Es ist nicht perfekt, aber man kann es versuchen: http://mtod.org/tempy
In PHP Textmate hat eine einfache Auto-Vervollständigung in Form von fest codierten Satz von Funktionsnamen. Klingt so hässlich wie PHP, aber es ist gut genug, um in der Praxis nützlich zu sein.