Configuration 如何使用GVIM编辑远程文件?

Configuration 如何使用GVIM编辑远程文件?,configuration,ftp,vim,Configuration,Ftp,Vim,我在Ubuntu 9.10上使用GVIM。我正在寻找一种正确的方法来配置GVIM,以便能够通过ftp等方式编辑远程文件(HTML、PHP、CSS) 当我使用:escp://username@remotehost//path/to/file i get:处理“*”的BufEnter自动命令时检测到错误:E472:命令失败。 当我通过Dolphin或Nautilus在remote上打开文件时,我无法使用NERDTree的其他文件 最后,当我通过Dolphin对远程文件进行编辑时,权限将更改为访问i

我在Ubuntu 9.10上使用GVIM。我正在寻找一种正确的方法来配置GVIM,以便能够通过ftp等方式编辑远程文件(HTML、PHP、CSS)

  • 当我使用:escp://username@remotehost//path/to/file i get:
    处理“*”的BufEnter自动命令时检测到错误:E472:命令失败。
  • 当我通过Dolphin或Nautilus在remote上打开文件时,我无法使用NERDTree的其他文件
  • 最后,当我通过Dolphin对远程文件进行编辑时,权限将更改为访问interdit

那么如何使用GVIM在我的本地主机上编辑远程文件呢?

有一种方法,即使用远程主机的副本,使用SSH将X11客户端转发给您,如下所示:

user@local:~/$ ssh -X user@host
...
user@host:~/$ gvim file
后一个命令应在桌面上打开gvim。当然,这取决于首先安装了X11/gnome/gvim的远程主机,这可能不是您正在寻找的解决方案/您的案例中的一个选项


注意:X11转发可能存在安全风险。

我认为您无法使用本地运行的GVIM直接编辑远程文件。然而,正如其他人指出的那样,这是完全可能的。这看起来很有趣;我会查一查。我将把我文章的其余部分留在这里,以防对其他人有用,作为一种替代方法。即使您没有对该文件的SSH访问权限(即,您只有FTP、S3或其他功能),此方法也可以工作

不过,通过将GVIM绑定到图形文件传输应用程序中,您可能会获得这种效果。例如,在OSX上,我使用CyberDuck传输文件(FTP、SFTP等)。然后,我将它配置为使用GVIM作为编辑器,这样我就可以双击远程列表中的一个文件,CyberDuck将下载该远程文件的副本,并在GVIM中打开它。当我将其保存在GVIM中时,CyberDuck将文件上传回远程主机


我确信这个功能不是CyberDuck独有的,并且可能存在于大多数更好的文件传输实用程序中。

编辑:通过ssh打开文件不需要密钥身份验证。Vim将提示输入密码

注意netrw.vim是否在启动时由vim加载是很有用的

:echo exists("g:loaded_netrwPlugin")
要通过ssh打开文件,需要在服务器的授权密钥中使用本地计算机的公钥。vim文档中的以下帮助部分对其进行了很好的解释

:help netrw-ssh-hack
导出公钥的快速方法是使用ssh副本id(如果可用)

并查看netrw文档,用于通过其他协议编辑网络文件

:help netrw

HTH.

为了让netrw无缝工作,我相信您不需要处于兼容模式

试一试

:设置不兼容

然后


:编辑scp://host/path/to/file

根据文档,BufEnter是在读取文件并创建缓冲区后处理的,因此我猜测netrw成功读取了文件,但您有一个插件,该插件假定文件位于本地文件系统上,并尝试访问它,例如运行ctags

尝试禁用除默认Vim脚本之外的所有插件脚本,然后编辑该文件


另外,试着编辑一个目录,看看netrw是否可以读取该目录-您需要将/放在末尾,以便netrw知道它是一个目录。

我发现通过ssh运行文件系统(通过sshfs)比让编辑器处理这些内容或通过ssh隧道运行编辑器本身更好

所以你需要

apt-get install sshfs
然后

sshfs remoteuser@remotehost:/remote/path /local/mountpoint
这将允许您编辑远程文件,就像它们在本地文件系统上一样

为了使其更加平滑,可以在/etc/fstab中添加一条线

sshfs#remoteusername@remotehost:/remote/path /local/mountpoint fuse user,noauto
出于某种原因,我发现在进行实验时,我必须使用
fusermount-u/local/mountpoint
,而不是
umount/local/mountpoint
。也许那只是我的发行版

最近我还注意到,安装用户必须在
保险丝组中。因此:

sudo addgroup <username> fuse
sudo addgroup保险丝

当然,另一个流行的选择是在一台机器上的会话中运行vim(而不是gvim),并通过ssh从任何地方连接到该会话。一整天都在工作中编码,晚上你用ssh连接到办公室电脑,重新连接到gnu屏幕会话,然后从你离开的地方开始。我曾经发现,在使用vim时,更丰富的调色板是我从gvim中真正错过的唯一一件事,但这实际上是可以修复的,因为它将允许您自定义整个256位调色板,而不仅仅是大多数终端模拟器允许您自定义的调色板的前16位位置。

关于您的命令,:escp://username@remotehost//path/to/file:注意,对于netrw,scp是相对于该远程主机上的主目录获取的。要避免主相对路径,请删除“.”;例如:escp://username@remotehost//path/to/file。

vim tips wiki有一篇关于此的文章。

要在windows上完成此操作,请下载/安装Dokan库和Dokan SSHFS,它们是上的第一个和最后一个链接。

试试这个

:e scp://username@remotehost//path/to/file
请注意,在remotehost提供文件的绝对路径后,使用//是有意的 :)


您是否尝试将一个键映射到一个函数,该函数将位置作为参数,然后返回一个带有位置和临时目录的对scp的调用,然后尝试打开它?您可以通过绑定第二个密钥进行写入并将文件scp返回来增强这一点。我明天会查其他的。我很高兴这对你有用。看起来你是这个网站的新手,请考虑你认为有帮助的答案,并把最好的答案标记为被接受(如果它解决了你的问题)。如果您不确定如何执行此操作,请查看页面顶部的FAQ链接。谢谢这是不正确的。你绝对可以编辑一个r
:e scp://username@remotehost//path/to/file