从 SSH 会话到远程机器,如何在本地机器上的 Vim 会话中打开文件

Posted

技术标签:

【中文标题】从 SSH 会话到远程机器,如何在本地机器上的 Vim 会话中打开文件【英文标题】:From an SSH session to a remote machine, how do I open a file in a Vim session on my local machine 【发布时间】:2020-08-14 19:31:31 【问题描述】:

我在终端窗口中有一个到远程机器的 ssh 连接,并且 GVim 作为我的文本编辑器在本地运行。我可以通过 SSH 挂载远程机器并在本地 Vim 中打开文件。通过 Vim 对通过 SCP 进行编辑的支持,我还可以在本地 Vim 中编辑远程文件。

假设我然后在远程机器上使用ag 在我的项目中搜索符号:

[user@remote project]$ ag thingy
include/blah/foo.h
1137:void thingy() 

现在我可以在我的 SSH 会话中输入什么来将该文件发送到选项卡中的本地编辑器?如果我在本地机器上,我可以做类似gvim -p --remote-tab-silent include/blah/foo.h 的事情,但我不认为 Vim +clientserver 远程系统可以通过 SSH 会话转发,可以吗?如果我设置 X11 转发,它会以某种方式神奇地工作吗?如果是这样,Vim 将如何确定要连接到哪个远程服务器来编辑文件?嵌入 vim 的终端会话和我可以使用的 netrw 系统之间是否存在某种集成?

如果我想使用 shell 脚本和 netcat 以及通过 ssh 转发某种类型的套接字来滚动我自己的系统,我该如何设计呢?

【问题讨论】:

我不完全确定这是 SO 的主题,但我们确实有其他几个奇怪的 vim 技巧问题和一个活动的 vim 标签,即使使用 Vim 并不完全相同作为编程。还有其他更适合的 SE 网站吗? vi.stackexchange.com 我认为您可以轻松地使用本地 GVim 中的 netrw 打开远程文件,但反之则不行。 Neovim 内置了基于 TCP 的 RPC。 Vim 不能这样做。 【参考方案1】:

Linux 和 Unix 系统上的+clientserver 机制使用 X11:

客户端和服务器之间的通信是通过 X 服务器进行的。这 必须指定 Vim 服务器的显示。 X的通常保护 使用服务器,您必须能够在 X 服务器上打开一个窗口 沟通工作。不同的人之间可以交流 系统。

如果你正确设置了 X 转发,你应该可以打开文件,虽然我没有测试过。这意味着远程系统应该有一个$DISPLAY 环境变量。

如果您没有明确指定服务器名称,它通常位于窗口的标题栏中。第一个,在我的 Debian 系统上,是GVIM,下一个是GVIM2,等等。客户端/服务器参数需要以特定顺序在命令行上,并且首先在命令行上。我会尝试在本地机器上进行设置,然后再在远程机器上尝试。

【讨论】:

以上是关于从 SSH 会话到远程机器,如何在本地机器上的 Vim 会话中打开文件的主要内容,如果未能解决你的问题,请参考以下文章

当我已经 ssh 进入远程机器时,如何 scp 回到本地?

如何在远程 Linux ssh 会话上运行的 vim 中拉到本地 OSX 剪贴板?

MySQLDump 从通过 SSH 连接的远程服务器到本地机器

如何从远程 SSH 会话将数据发送到本地剪贴板

ssh-keygen -t rsa -b 4096 -C "邮箱"

Linux远程执行shell命令