5

我有一个定期编辑的远程文件。我想用一个可能通过 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.

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

4

2 回答 2

9

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

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

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

看看 netrw 的文档:h netrw

于 2014-08-07T13:21:55.857 回答
9

强制伪 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 对我来说效果很好。您的里程(和操作环境)可能会有所不同。

于 2014-08-07T13:24:48.537 回答