在 Linux 上编辑远程文件的快速方法是啥?

Posted

技术标签:

【中文标题】在 Linux 上编辑远程文件的快速方法是啥?【英文标题】:What is a quick way to edit a remote file on Linux?在 Linux 上编辑远程文件的快速方法是什么? 【发布时间】:2014-09-30 18:19:05 【问题描述】:

我有一个定期编辑的远程文件。我想用一个可能通过 SSH 工作的快速、简单的命令来编辑它。目前,我的工作流程是通过 SSH 连接到远程计算机,使用编辑器(比如 vim 或 nano)打开文件,编辑、保存然后关闭连接。

我知道我可以使用 SSHFS 或 Nautilus 功能挂载远程计算机文件系统,但我真的在寻找在终端中运行的单个命令,该命令将在编辑器中打开文件,允许我保存然后退出,关闭与远程计算机的所有连接。

目前,我正在尝试通过 SSH 将命令传递到远程计算机来执行此操作,但我遇到了困难。对于 VIM,命令类似于以下内容:

ssh user1@computer1 "vim /path/laboratory_notebook_1.md"

使用此过程,VIM 无法正确运行并出现以下错误:

Vim: Warning: Output is not to a terminal
Vim: Warning: Input is not from a terminal

对于 nano,命令类似于以下内容:

ssh user1@computer1 "nano /path/laboratory_notebook_1.md"

使用此过程,nano 无法运行并出现以下错误:

Error opening terminal: unknown.

我不确定如何继续这种思路。我将不胜感激有关此方法的帮助以及有关以最少的交互快速编辑远程文件的其他方法的建议。

【问题讨论】:

【参考方案1】:

强制伪 TTY 分配

您可以使用一个或多个 -t 标志强制进行伪 tty 分配。 SSH(1) 手册页说:

 -t      Force pseudo-tty allocation.  This can be used to execute arbi-
         trary screen-based programs on a remote machine, which can be
         very useful, e.g. when implementing menu services.  Multiple -t
         options force tty allocation, even if ssh has no local tty.

示例

使用您自己的示例,稍作修改,如果您有本地 TTY 或 PTY,以下将起作用:

ssh -t user1@computer1 'vim /path/laboratory_notebook_1.md'

OpenSSH_6.2p2 对我来说效果很好。您的里程(和操作环境)可能会有所不同。

【讨论】:

啊,太好了。这是一个很好的通用解决方案,适用于 VIM 和 nano。非常感谢您的帮助。【参考方案2】:

如果你使用 vim。 Vim 带有一个名为 netrw 的插件,它可以让你这样做。

vim scp://hostname/path/to/file

将文件复制到您的本地计算机并在保存时重新上传。

看看netrw的文档:h netrw

【讨论】:

啊,这对 VIM 来说是一个很好的解决方案。我发现CodeGnome 提供的更通用的solution 现在更有用,但很高兴知道 VIM 功能。非常感谢您的帮助。

以上是关于在 Linux 上编辑远程文件的快速方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

windows平台是上的sublime编辑远程linux平台上的文件

使用Notepad++远程编辑WinSCP中打开的文本文件报错“file xxx does exist anymore”

Linux文件挂载及对Windows的远程访问

远程登录Linux服务器的命令是啥?

Rsync+Inotify远程实时同步

Linux虚拟机远程使用rviz的方法