在Emacs中,是否可以使用Ropemacs和TRAMP?

18

我最近安装了Ropemacs的hg tip版本,我想在使用TRAMP编辑远程文件时使用它。 有人做过这个吗? 当我尝试使用M-/来完成变量名时,我被要求输入Rope项目根目录,然后我输入:/ssh:myhost:/path/to/myproject/,但是它给出以下错误:

Opening [/ssh:myhost:/path/to/myproject/] project ... 
pymacs-report-error: Python: Traceback (most recent call last):
  File "/home/saltycrane/lib/python-environments/default/lib/python2.6/site-packages/Pymacs/pymacs.py", line 147, in loop
    value = eval(text)
  File "<string>", line 1, in <module>
  File "/home/saltycrane/lib/python-environments/default/lib/python2.6/site-packages/ropemode/decorators.py", line 53, in newfunc
    return func(*args, **kwds)
  File "/home/saltycrane/lib/python-environments/default/lib/python2.6/site-packages/ropemode/interface.py", line 254, in code_assist
    _CodeAssist(self, self.env).code_assist(prefix)
  File "/home/saltycrane/lib/python-environments/default/lib/python2.6/site-packages/ropemode/interface.py", line 538, in code_assist
    proposals = self._calculate_proposals()
  File "/home/saltycrane/lib/python-environments/default/lib/python2.6/site-packages/ropemode/interface.py", line 597, in _calculate_proposals
    self.interface._check_project()
  File "/home/saltycrane/lib/python-environments/default/lib/python2.6/site-packages/ropemode/interface.py", line 448, in _check_project
    self.open_project()
  File "/home/saltycrane/lib/python-environments/default/lib/python2.6/site-packages/ropemode/decorators.py", line 53, in newfunc
    return func(*args, **kwds)
  File "/home/saltycrane/lib/python-environments/default/lib/python2.6/site-packages/ropemode/interface.py", line 88, in open_project
    self.project = rope.base.project.Project(root)
  File "/home/saltycrane/lib/python-environments/default/lib/python2.6/site-packages/rope/base/project.py", line 134, in __init__
    os.mkdir(self._address)
OSError: [Errno 2] No such file or directory: '/ssh:myhost:/path/to/myproject'

我想ropemacs不支持使用TRAMP的远程文件。不知道有没有人找到了解决方法。也许需要一些自定义的elisp?或者我应该使用sshfs并将远程文件系统挂载到本地...

我在一个虚拟环境中安装了ropemacs,位置为/home/saltycrane/lib/python-environments/default。我正在Ubuntu Lucid上使用GNU Emacs 23.1.50.1。

需要提到的是,在不使用TRAMP时,使用M-/的补全功能可以正常工作。


3
使用sshfs可能是务实的方法。等待ropemacs支持通过TRAMP工作,或自己修补ropemacs,绝对需要更多的努力。 - Erik Kaplun
+1 for sshfs,它遵循Unix哲学的模块化原则,并且不仅适用于Emacs。 - Niklas B.
1个回答

6
不,使用TRAMP是不可能的,因为Python的rope库在扫描文件系统以查找Python文件中的类和函数时不会回调到Emacs中,而是直接在文件系统上使用像listdir()open()这样的调用,而不给Emacs一个机会来拦截你正在编辑的特殊TRAMP前缀路径。
使用sshfs可能是可能的,就像评论中提到的那样,但对于rope来说,我想这将是一个非常慢的解决方案,因为rope必须打开很多文件才能了解您项目的状态。
通常我会关闭rope,或者弄清楚如何从远程系统导出一个Emacs会话,当通过远程文件系统链接进行编辑时。我想知道是否可以使用像rsyncdropbox甚至是DVCS这样的东西,这样文件将作为立即可访问的副本存在于本地硬盘上,但是保存的更改将被复制过去?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接