是否可以在 TextMate 中实现 Python 代码补全?

Posted

技术标签:

【中文标题】是否可以在 TextMate 中实现 Python 代码补全?【英文标题】:Is it possible to implement Python code-completion in TextMate? 【发布时间】:2010-09-18 07:00:37 【问题描述】:

PySmell 似乎是一个不错的起点。

我认为这应该是可能的,PySmell 的 idehelper.py 做了大部分复杂的事情,它应该只是给它当前行,提供完成(我不确定的位)然后用选定的行替换该行。

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

它永远不会完美,但它会非常有用(即使只是为了完成 std​​lib 模块,它永远不会改变,所以你不必在添加函数时不断重新生成 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文档,输入“import url”,按alt+escape,就完成了“import urllib”!

正如我所说,这完全是一个正在进行的工作,所以不要使用它..


最后更新:

orestis 已将其集成到 PySmell 项目的代码中!任何进一步的摆弄都会发生on github

【问题讨论】:

【参考方案1】:

编辑:我实际上已经将您的代码放在上面并集成到一个命令中。它会正确显示一个完成列表供您选择。

您可以在这里获取它:http://github.com/orestis/pysmell/tree/master(点击下载并执行 python setup.py 安装)。这很粗糙,但它有效。 - 请在http://code.google.com/p/pysmell/报告任何错误

--

大家好,我是 PySmell 的开发者。我也用 Mac,所以如果你可以给我发一封电子邮件(联系信息在源代码中),告诉我你目前的进展,我可以尝试整合它:)

哦,顺便说一句,它被称为 PySmell - 没有尾随 's' :)

【讨论】:

我最近注意到了 github 项目中与 TextMate 相关的提交。我认为代码看起来很熟悉,但我认为这是巧合.. :D【参考方案2】:

这不是您正在寻找的东西,但它可能会让您开始:

Using TextMate with Django

它们似乎有点特定于 Django,但一些 sn-ps 可能会帮助您满足您的需求。您还可以使用 PySmells 在此基础上进行构建。

【讨论】:

【参考方案3】:

它并不完美,但你可以尝试一下:http://mtod.org/tempy

【讨论】:

【参考方案4】:

在 TextMate 中,php 以硬编码的一组函数名称的形式提供了一个简单的自动完成功能。听起来和 PHP 一样难看,但实际上它已经足够有用了。

【讨论】:

以上是关于是否可以在 TextMate 中实现 Python 代码补全?的主要内容,如果未能解决你的问题,请参考以下文章

人们通常如何在python中实现jsonp? [关闭]

确定子类是不是具有在 Python 中实现的基类方法

如何在 Python 中实现 KS-Test

有限自动机是如何在代码中实现的?

如何在 Java 中实现 Chebyshev Type 2 LPF?

在 Python 中实现 Adagrad