我最近安装了 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 的远程文件。只是想知道是否有人找到了解决方法。也许一些自定义省略?或者我应该使用 sshfs 并在本地挂载远程文件系统......
我在位于 /home/saltycrane/lib/python-environments/default
的 virtualenv 中安装了ropemacs。我在 Ubuntu Lucid 上使用 GNU Emacs 23.1.50.1。
我应该提一下,当我不使用 TRAMP 时,使用 M-/
完成可以正常工作。
最佳答案
不,这是不可能使用 TRAMP 实现的,因为 Python rope
库在想要扫描文件系统以查找 Python 文件时会不调用回 Emacs它们的类和函数——相反,它直接在文件系统上使用像 listdir()
和 open()
这样的调用,而不给 Emacs 一个机会来阻止并拦截您正在编辑的带有 TRAMP 前缀的特殊路径。
正如评论所提到的,使用 sshfs
可能是可能的,但对于 rope
我想这将是一个 非常 缓慢的解决方案,因为 rope
必须打开这么多文件才能找出项目的状态。
在跨远程文件系统链接进行编辑时,我通常会关闭 rope
,或者弄清楚如何从远程系统导出 Emacs session 。我想知道您是否可以使用 rsync
或 dropbox
甚至 DVCS 之类的东西,以便将文件作为可立即访问的副本存在于本地硬盘驱动器上,但是这样您保存的更改会被复制吗?
关于python - 是否可以在 Emacs 中将 Ropemacs 与 TRAMP 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2815228/