我的项目涉及在远程服务器上的大型代码库上工作。我经常编辑多个文件,因此无法使用scp传输文件。我已经按照自己的想法设置好了本地的Macvim,包括多个插件,包括ctags。
是否有可能以这种方式在ssh上使用Macvim,以便我可以轻松地浏览并打开本地运行的Macvim中的文件?
如果不需要在远程服务器上安装ctags就能使其工作,那将更好,但我怀疑这是不可能的...
还有一个问题是远程服务器已经设置了另一个人的.vimrc,而我不想使用它,但无法覆盖。
:e scp://username@host.com/path/to/file
我怀疑这可能不完全符合您的要求,因为它一次只能给您一个文件。
如果您可以在本地挂载目标系统上的共享文件夹,那也可以使用。
可以使用FUSE for macOS项目提供的SSHFS功能。https://github.com/libfuse/sshfs
我曾经经常使用的一种方法是打开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/
open scp://hostname/
,它非常完美地工作了。 - James Polley如上所建议的MacFUSE已不再维护。幸运的是,有一个后继者OSXFUSE。
我在OS X 10.9上使用MacVim,结合OSXFUSE和SSHFS在远程Linux服务器上编辑代码。当保存文本文件时,我会遇到短暂的延迟(1-3秒),但除此之外,它就像在本地文件系统上工作一样。
每个文件都要进行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
...whoami
的想法,但是完全没有成功。也许这不是一个好主意。 - romainl
:w
命令时,它实际上会将文件保存回远程机器。当我看到scp时,我没有预料到这种情况。 - styfle