在Emacs中能否将Ropemacs与TRAMP一起使用?

18 投票
1 回答
702 浏览
提问于 2025-04-15 22:36

我最近安装了Ropemacs的最新版本,想在用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-/的补全功能是正常的。

1 个回答

6

不,这个用TRAMP是不可能实现的,因为Python的rope库在扫描文件系统寻找Python文件以找到它们的类和函数时,不会调用Emacs。它直接使用像listdir()open()这样的调用,完全不让Emacs插手,也就是说,它不会处理你正在编辑的那些带有TRAMP前缀的特殊路径。

使用sshfs可能是可行的,正如评论中提到的,但对于rope来说,我想这会是一个非常慢的解决方案,因为rope需要打开很多文件来了解你项目的状态。

我通常会关闭rope,或者想办法从远程系统导出一个Emacs会话,当我在远程文件系统链接上编辑时。我在想,是否可以使用像rsyncdropbox,甚至是一个分布式版本控制系统(DVCS),这样文件就会在你的本地硬盘上作为可立即访问的副本存在,同时你保存的更改也能被复制过去?

撰写回答