如何通过 ssh 远程编辑文件?

Loo*_*oom 123 vim ssh editors

我必须编辑一些放置在我可以通过 ssh 访问的服务器上的文件。

我更愿意vim在我的工作站上自定义编辑这些文件(我无权更改vim远程服务器上的设置)。有时我想用sublime text或其他 GUI 编辑器编辑文件。

当然,我可以下载这些文件,在本地编辑它们并将它们上传回服务器。有没有更优雅的解决方案?

Flo*_*elf 146

你可以通过scp这样的方式做到这一点:

vim scp://user@myserver[:port]//path/to/file.txt
Run Code Online (Sandbox Code Playgroud)

注意//server 和 path 之间的两个斜杠,这是正确解析绝对路径所必需的。(第一个斜杠是语法,而第二个斜杠像往常一样指定远程用户的根目录。要从主目录开始,你会这样做[:port]/~/path/to/file.txt。)[:port]是可选的。

这由 vim 的netrw.vim标准插件处理。支持其他几种协议。

  • 是的,文件被检索到一个临时文件,即在保存时上传到服务器。 (7认同)
  • @stillanoob:`:e scp://...` (5认同)
  • 此外,vim 将读取 `~/.ssh/config` 并使用 `vim scp://[host]/path` 解析远程主机。 (3认同)
  • 你可以在 vim 中尝试 `:set buftype="" `。 (2认同)
  • 在您的 ssh 配置中包含一个条目,其中包含主机别名、主机名、用户名和身份文件的路径,然后您可以使用 `vim scp://[alias]/path` 直接从 vim 打开文件。如果路径相对于您在遥控器上的登录主页,您将有一个斜线。如果在文件系统中是绝对的,两个:`vim scp://host//etc/ssh/ssshd_config`。 (2认同)
  • [此处](https://nerderati.com/2011/03/17/simplify-your-life-with-an-ssh-config-file/) 是一篇博文,解释了如何格式化和使用本地 ssh 配置。 (2认同)
  • 如果文件名包含空格,请确保对它们进行双重转义。例如,`:e scp://user@myserver[:port]//path/to/file\\ with\\spaces.txt` (2认同)

shi*_*ams 89

您可以通过使用 sshfs 将远程文件夹挂载为文件系统来实现。为此,首先需要一些先决条件:

#issue all these cmds on local machine
sudo apt-get install sshfs
sudo adduser <username> fuse #Not required for new Linux versions (including Ubuntu > 18.04)
Run Code Online (Sandbox Code Playgroud)

现在,执行安装过程:

mkdir ~/remoteserv    
sshfs -o idmap=user <username>@<ipaddress>:/remotepath ~/remoteserv
Run Code Online (Sandbox Code Playgroud)

之后,只需进入挂载文件夹并使用您自己的本地自定义vim。

  • 好的。弄清楚了。所有这些都是在本地机器上完成的。在 OS X 的情况下,必须安装 `osxfuse` 和 `sshfs`。这些可以使用自制软件(`brew install sshfs` 和 `brew cask install osxfuse` 或从 https://osxfuse.github.io/ 获得的包安装 (6认同)
  • 不出所料,安装步骤将在不基于`deb` 的发行版上失败,因此没有`apt-get`。(在这种情况下,可能会出现 `yum` 或 `zypper`。)它们还需要本地机器上的 root,这可能可用也可能不可用。(这并不是说这是一个糟糕的解决方案,但它有一个很大的先决条件。) (5认同)

eli*_*eli 7

可以使用多个选项,不仅仅是“scp”;请参阅:https ://www.vim.org/scripts/script.php?script_id=1075

我更喜欢使用“rsync”,因为对我来说“diff”不能与 scp 一起正常工作。

示例 - 在不同远程服务器(hostname01.domain.my 和 hostname02.domain.my 等)上使用“/tmp/test”文件启动 vim,使用 bash 扩展,垂直分割:

vimdiff -O rsync://hostname{01,02,03}.domain.my:/tmp/test


小智 6

当您说您无权编辑 Vim 设置时,根据您的意思,可能有一种方法可以以您想要的方式在服务器上使用 Vim。如果您无法更改您的用户.vimrc(例如,因为您以共享用户身份登录)但您仍然可以创建文件,请将其创建为一个名为的文件,例如,Loom.vimrc然后使用-u开关调用 Vim :

vim -u ~/Loom.vimrc file_to_edit

然后你甚至可以使用别名:alias vim='vim -u ~/Loom.vimrc'将允许你以通常的方式使用 Vim,它仍然会加载你的自定义.vimrc文件。这个别名在您注销后不会保留,因此您无需担心其他人不小心使用了您定制的 Vim。