2008-10-21 76 views
20

PySmell似乎是一個很好的起點。我認爲它應該是可能的,PySmell的idehelper.py做了大部分複雜的東西,它應該只是一個給它當前行的例子,提供完成(我不確定的位),然後替換與選定的一行。是否可以在TextMate中實現Python代碼完成?

>>> 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)'}] 

它永遠不會是完美的,但它是非常有用的(即使只是爲了完成stdlib的模塊,它應該永遠不會改變,所以你不會有不斷重新生成PYSMELLTAGS文件,只要你添加一個功能)


進展!我已經制定完成徹底-基礎 - 勉強的作品,但它很接近..

我跑python pysmells.py /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/*.py -O /Library/Python/2.5/site-packages/pysmell/PYSMELLTAGS

放置在一個TextMate的捆綁腳本下面,設置「輸入:整個文檔」,「輸出:插入文本」, 「激活:等效鍵:ALT + ESC」, 「範圍選擇: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 

然後我做了一個新的Python文件,輸入 「進口urll」 和按下Alt +逃逸,並完成它「導入urllib」!

正如我所說,這完全是一個工作在進步,所以不要用它了..


最後更新時間:

Orestis的已經融入了PySmell項目的這碼!任何進一步的小提琴演奏會發生on github

回答

9

編輯:我已經把你的代碼放在上面並集成到一個命令中。它會正確顯示完成清單供您選擇。

你可以在這裏抓住它:http://github.com/orestis/pysmell/tree/master(點擊下載並執行python setup.py install)。這很粗糙,但它的工作原理。 - 請上http://code.google.com/p/pysmell/

報告任何錯誤 -

嗨,我是PySmell的開發商。我也使用Mac,所以如果你可以給我發電子郵件(聯繫信息在源代碼中)到目前爲止你的進度,我可以嘗試整合它:)

噢順便說它叫PySmell-沒有拖尾' S':)

+0

我最近注意到了GitHub的項目從TextMate的相關的提交。我認爲代碼看起來很熟悉,但我認爲這是巧合。:D – dbr 2008-10-31 15:48:21

3

這不是你在尋找什麼,但它可能是能夠讓你開始:

Using TextMate with Django

他們似乎有所Django的具體但一些片斷可能會協助您的需求。您也可以在PySmells的基礎上進行構建。

0

在TextMate中PHP有一個簡單的自動完成形式的硬編碼函數名稱集合。聽起來像PHP一樣醜陋,但在實踐中,它足夠有用。

相關問題