我最近安装了Ropemacs的hg tip版本,我想在使用TRAMP编辑远程文件时使用它。有没有人这样做过?当我尝试使用M-/
填写变量名称时,系统会要求我输入Rope project root folder
并输入:/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并在本地安装远程文件系统......
我在位于/home/saltycrane/lib/python-environments/default
的virtualenv中安装了ropemacs。我在Ubuntu Lucid上使用GNU Emacs 23.1.50.1。
我应该提一下,当我没有使用TRAMP时,使用M-/
完成工作正常。
答案 0 :(得分:6)
不,使用TRAMP是不可能的,因为当Python rope
库想要扫描文件系统中的Python文件以查找它们的类时,不会将调用重新发送回Emacs函数 - 相反,它直接在文件系统上使用listdir()
和open()
等调用,而不会让Emacs有机会阻挡并拦截您正在编辑的特殊TRAMP前缀路径。
正如评论所提到的那样,使用sshfs
可能是可能的,但对于rope
,我认为这将是非常慢的解决方案,因为rope
必须打开这么多文件才能找出你项目的状态。
我通常会关闭rope
,或者在跨远程文件系统链接进行编辑时弄清楚如何从远程系统导出Emacs会话。我想知道你是否可以使用像rsync
或dropbox
甚至DVCS这样的文件,以便文件作为可立即访问的副本存在于本地硬盘驱动器上,但是这样你保存的更改就会被复制跨越?