【问题标题】:How to use GVIM to edit a remote file?如何使用 GVIM 编辑远程文件?
【发布时间】:2011-01-09 07:37:36
【问题描述】:

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

  • 当我使用:e scp://username@remotehost/./path/to/file 我得到:error detected while processing BufEnter Auto commands for "*":E472: Command failed.
  • 当我通过 Dolphin 或 Nautilus 在远程打开文件时,我无法通过 NERDTree 使用其他文件。
  • 最后,当我通过 Dolphin 在远程编辑文件时,权限正在更改为访问 interdit。

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

【问题讨论】:

  • 您是否尝试过将键映射到一个函数,该函数将位置作为 arg 并返回对 scp 的调用,其中包含位置和临时目录,然后尝试打开它?你可以通过绑定第二个键来增加它的写入,然后他们 scp 文件返回。

标签: configuration ftp vim


【解决方案1】:

我发现通过 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 在试验时使用。也许这只是我的发行版。

最近我还注意到安装用户必须在fuse 组中。所以:

sudo addgroup <username> fuse

当然,另一种流行的选择是在一台机器上的GNU Screen 会话中运行 vim(而不是 gvim),并通过 ssh 从您碰巧所在的任何地方连接到该会话。整天在工作中编写代码,晚上你 ssh 进入你的办公室计算机,重新连接到你的 gnu 屏幕会话,并准确地从你离开的地方继续。我曾经发现更丰富的调色板是我在使用 vim 时从 gvim 中真正错过的唯一东西,但这实际上可以修复感谢to a fork of urxvt,它可以让您自定义整个 256 位置调色板,而不仅仅是 16 个第一个位置大多数终端模拟器允许您自定义的调色板。

【讨论】:

  • 就 vim 颜色而言,试试看这里:vim.wikia.com/wiki/256_colors_in_vim
  • 你可以在很多终端模拟器中获得 256 种颜色,但是调色板(除了前 16 种颜色)是固定的,所以大多数 gvim 颜色主题在 vim 中仍然看起来不太好。但是有一个全新的rxvt-unicode fork 可以让您创建自定义调色板。我还没有真正尝试过,但看起来很有希望。
  • 我已经使用它 20 多年了,但我仍然发现让我说“哇,我不知道你能做到这一点——我 ? Linux!”的东西。
【解决方案2】:

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

user@local:~/$ ssh -X user@host
...
user@host:~/$ gvim file

后一个命令应该会在您的桌面上打开 gvim。当然,这取决于首先安装了 X11 / gnome / gvim 的远程主机,这可能不是您正在寻找的解决方案/在您的情况下的选项。

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

【讨论】:

  • 有没有办法进行某种缓存?如果您的网络速度较慢,那么远程开发可能会很痛苦。
【解决方案3】:

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

试试

:设置不兼容

然后

:edit scp://host/path/to/file

【讨论】:

  • 这个方法我用过很多次了。
【解决方案4】:

试试这个

:e scp://username@remotehost//path/to/file

请注意,在 remotehost 之后使用 // 是有意的,它给出了文件的绝对路径 :)

http://www.celsius1414.com/2009/08/19/how-to-edit-remote-files-with-local-vim/

【讨论】:

  • 我收到一条错误消息,提示未安装 scp。在哪里可以找到适用于 Windows 7 的 scp 客户端?
【解决方案5】:

vim 技巧 wiki 有一篇关于此的文章,Editing remote files via scp in vim

【讨论】:

    【解决方案6】:

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

    注意 netrw.vim 是否在启动时被 vim 加载。

    :echo exists("g:loaded_netrwPlugin")
    

    要通过 ssh 打开文件,您需要在服务器的授权密钥中使用本地计算机的公钥。以下 vim 文档中的帮助部分很好地解释了它。

    :help netrw-ssh-hack
    

    导出公钥的快速方法是使用 ssh-copy-id(如果可用)。

    ssh-copy-id user@host
    

    并查看 netrw 文档,了解如何通过其他协议编辑网络文件。

    :help netrw
    

    HTH。

    【讨论】:

    • 虽然基于密钥的身份验证确实让事情变得更容易,但我认为这不是必需的。
    • 比尔 B:谢谢。是的,钥匙不是必需的。我没注意到。
    【解决方案7】:

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

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

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

    【讨论】:

    • 我禁用了插件脚本,除了默认的 Vim 脚本,“scp://username@remotehost/path/to/dir/”,我得到:“缓冲区中没有行”
    【解决方案8】:

    关于您的命令, :e scp://username@remotehost/./path/to/file :请注意,对于 netrw,scp 是相对于该远程主机上的主目录进行的。为避免家庭相对路径,请删除该“。”; IE。 :e scp://username@remotehost//path/to/file .

    【讨论】:

      【解决方案9】:

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

      【讨论】:

        【解决方案10】:

        我不认为您将能够使用在本地运行的 GVIM 直接编辑远程文件。但是,正如其他人指出的那样,这绝对是可能的。这看起来很有趣;我会检查一下。我会将其余的帖子留在这里,以防它对其他人有用,作为替代方法。即使您没有对文件的 SSH 访问权限(即,您只有 FTP、S3 或其他),此方法也可以使用。

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

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

        【讨论】:

        • 我用 FileZilla 试过了,这个解决方法比我以前做的要好。我明天去看看其他的。
        • 很高兴这对您有用。由于您似乎是该网站的新手,请考虑对您认为有帮助的任何答案进行投票,并将最佳答案标记为已接受(如果它解决了您的问题)。如果您不确定如何执行此操作,请查看页面顶部的常见问题解答链接。谢谢!
        • 这是不正确的。您绝对可以使用本地运行的 gvim 编辑远程文件。正如其他人提到的:help netrw 会告诉你更多
        • 好吧,我已经纠正了:)。我会研究一下这个 netrw 方法,这看起来很有趣。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-11
        • 2013-04-03
        • 2012-05-25
        • 2013-09-22
        • 1970-01-01
        • 2018-04-25
        相关资源
        最近更新 更多