1

我已经通过从Melpa安装elpy来设置 Python 代码完成,它似乎(大部分)像宣传的那样工作。

但是我希望它也完成 web2py API,我认为实现这一点的最佳方法是使用 web2py shell,而不是普通的 shell。

第 0 次尝试

谷歌搜索Emacsweb2py自动完成没有产生有用的结果。

第一次尝试

所以我添加到我的~/.emacs.d/init.el文件中

(setq python-shell-interpreter-args 
      "/path/to/web2py/web2py.py --plain --import_models --shell=myapp")

... 不工作。

第二次尝试

按照elpy 文档,我意识到我可能需要自定义elpy-rpc-python-command变量。

所以我写了这个~/bin/rpc-web2py脚本,例如:

#!/bin/sh
# note: the $@ need to relate to python becase elpy what's to pass `-W` to it.
python2.7 "$@" /path/to/web2py/web2py.py --shell=myapp --plain --import_models

并将Elpy Rpc Python 命令自定义为 其他: ~/bin/rpc-web2py

...仍然没有“分贝”。完成。

帮助

我是否以正确的方式解决这个问题?我不致力于任何特定的代码完成解决方案,.emacs.d如果需要,我愿意提供新的解决方案。

有人能有类似的工作设置吗?

4

1 回答 1

3

/path/to/web2py$PYTHONPATH一个明显疏忽是我没有将

答案的另一部分来自Massimo Di Pierro的 The Web2py book,它有这样的说法:

使用带有 web2py 的通用 IDE

这些 IDE(支持 web2py 的除外)的一般问题是它们不了解执行模型和控制器的上下文,因此自动完成功能无法开箱即用。

为了使自动完成工作,一般技巧包括编辑模型和控制器并添加以下代码:

if False:
    from gluon import *
    request = current.request
    response = current.response
    session = current.session
    cache = current.cache
    T = current.T

导入块不会更改逻辑,因为它永远不会执行,但它会强制 IDE 解析它并了解全局命名空间中的对象来自哪里(胶子模块),从而使自动完成工作。

如果您依赖模型中的变量(例如数据库定义),您可以考虑像这样添加到列表中:

from db import *

您也可以考虑导入所有模型。

if False:  
    from gluon import *
    from db import *  #repeat for all models
    from menu import *

虽然这更像是一种解决方法而不是解决方案,但我会接受它,并且已经作为elpy的一部分提供的 yasnippet 是使这种解决方法变得微不足道的合乎逻辑的工具。

如果有人会想出一些不那么可行的解决方案,我会很乐意接受这个答案。

于 2015-11-24T07:32:32.480 回答