通过ssh使用Macvim

29

我的项目涉及在远程服务器上的大型代码库上工作。我经常编辑多个文件,因此无法使用scp传输文件。我已经按照自己的想法设置好了本地的Macvim,包括多个插件,包括ctags。

是否有可能以这种方式在ssh上使用Macvim,以便我可以轻松地浏览并打开本地运行的Macvim中的文件?

如果不需要在远程服务器上安装ctags就能使其工作,那将更好,但我怀疑这是不可能的...

还有一个问题是远程服务器已经设置了另一个人的.vimrc,而我不想使用它,但无法覆盖。

7个回答

34
以下命令将通过ssh在MacVim中打开一个文件:
:e scp://username@host.com/path/to/file

我怀疑这可能不完全符合您的要求,因为它一次只能给您一个文件。

如果您可以在本地挂载目标系统上的共享文件夹,那也可以使用。


4
如果您省略文件名,只提到目录,vim 将为远程目录呈现一个目录浏览器,让您可以通过这种方式选择文件。它仍然是一次只能选择一个文件,但在您不记得文件名时非常方便。 - the Tin Man
5
这可以与ControlMaster、ControlPath和ControlPersist SSH配置选项(参见ssh_config(5))结合使用,以实现相当快速的远程文件接口。 - Chris Johnsen
1
你应该提到,当你使用:w命令时,它实际上会将文件保存回远程机器。当我看到scp时,我没有预料到这种情况。 - styfle

20

这个问题的解决方案真的很优雅,我喜欢它。 - Cody
我喜欢这个想法,但是在大型代码库中它能发挥多大的作用呢? - skeletalmonkey
除非你能打得非常非常快,否则应该没问题。 - Ana Betts
到目前为止,我的经验是使用expanddrive和gvim太慢了,无法正常工作。我怀疑这是因为gvim只是看到一个挂载点,它不够聪明,不能限制磁盘写入,除非用户显式保存。 - freakTheMighty

6

我曾经经常使用的一种方法是打开X-11会话,然后连接到我的远程主机,并通过X使用gvim。您将获得编辑器的完整GUI版本,它看起来像是在本地运行,但实际上所有东西都在远程运行。

另一种选择是使用VNC远程控制远程主机上的会话。Mac有几个VNC客户端可供选择。

您还可以使用Mac SFTP或FTP客户端进行连接,然后告诉它要编辑一个或多个文件。如果您已将其配置为使用MacVim作为编辑器,则文件I/O将通过FTP连接透明地进行。这就是当我没有ssh功能时编辑远程网站的方法。

不过,MacVim和vim的netrw插件非常强大。如果您没有将文件名传递给scp://...命令,则vim将呈现通常的目录浏览器,让您从远程计算机中选择文件并在本地进行编辑。例如,这会通过SSH从我的笔记本电脑连接到自身,并在vim中显示主目录:

vim scp://greg@localhost//Users/greg/

我刚刚在我的mvim窗口尝试了open scp://hostname/,它非常完美地工作了。 - James Polley

6

如上所建议的MacFUSE已不再维护。幸运的是,有一个后继者OSXFUSE

我在OS X 10.9上使用MacVim,结合OSXFUSE和SSHFS在远程Linux服务器上编辑代码。当保存文本文件时,我会遇到短暂的延迟(1-3秒),但除此之外,它就像在本地文件系统上工作一样。


2
关于你提出的.vimrc问题,文档中指出参数-u可能会对你有所帮助。

-u {vimrc} 读取文件{vimrc}进行初始化。


哦,那非常方便。谢谢。 - skeletalmonkey

0

每个文件都要进行scp传输真是让人头疼。

虽然使用MacFuse的SSHFS可以工作,但速度可能会非常慢。我在工作中尝试过几次,连接了一个高速服务器,起初这个想法似乎很优雅,但却是一个令人发狂的等待体验。

服务器的设置是怎样的?你是以其他用户身份登录还是以自己的/home/username登录?

如果是后者,你可以将所有与Vim相关的东西放在你的主目录下,并且像使用MacVim一样使用服务器上的Vim。你甚至可以在主目录的某个地方构建ctags并使用它...

如果你以自己的身份登录但没有主目录,你可以将Vim的相关内容放在你有写权限的某个地方,并将其路径添加到主.vimrc文件中,通过if/else语句检查你的用户名。

我没有测试过这个解决方案,但我使用类似的技术来加载不同的设置,无论是在我的Mac上还是在我的Ubuntu机器上:

if has("gui_running")

  "various gui settings

  let os=substitute(system('uname'), "\n", "", "")
  if os == "Darwin" || os == "Mac"

    "Mac-specific settings

  elseif os == "Linux"

    "Linux-specific settings

  endif

endif

也许可以使用命令whoami...

在一个设置中,我可以登录我的自己的用户,到我的自己的主文件夹,这使得事情变得更容易。但另一个项目涉及登录到朋友的服务器而没有我的用户目录。我想我可以在我的 .vimrc 中放足够的情况来捕捉所有不同的情况。 - skeletalmonkey
@skeletalmonkey 昨天我尝试了一下使用 whoami 的想法,但是完全没有成功。也许这不是一个好主意。 - romainl

0

MacFuse 是 fuse 的 MAC 版本。但不幸的是,他们不再维护这个项目,并且在 Snow Leopard 上有一些问题,但是有一个解决方案


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