这在 vim 中当然是可行的。您可以使用 vim 中的 scp:// 协议来编辑远程文件,并设置一个写入本地副本的命令。您还可以更改 vim 用于 :make 的程序以在您的服务器上执行 ssh make。
您需要设置您的 ssh-keys 以保持这种轻松(否则您将一直输入密码)但这很容易。
另一种选择是作为 make 命令的一部分推送到远程存储库,而不是远程编辑。
编辑:
首先,在 vim 中使用scp:// 协议。来自:help netrw-start(或从:help scp向下页面)
Netrw 支持使用 url 在其他机器上“透明”编辑文件
(见|netrw-透明|)。作为一个例子,假设你有一个
其他机器上的帐户;如果您可以使用 scp,请尝试:
vim scp://hostname/path/to/file
想让 ssh/scp 更易于使用吗?查看 |netrw-ssh-hack|!
您还可以在:edit 命令中使用scp:// 路径,或者实际上可以使用普通路径的任何地方。
并且,来自提到的:help netrw-ssh-hack,有关如何设置 ssh 密钥的说明:
改进浏览 *netrw-listhack* *netrw-ssh-hack* {{{2
尤其是用远程目录浏览器,不断输入密码
很乏味。
对于 Linux/Unix 系统,《Linux Server Hacks - 100 工业实力》一书
提示和工具”,Rob Flickenger (O'Reilly, ISBN 0-596-00461-3) 给出了一个提示
用于设置无密码 ssh 和 scp 并讨论相关的安全性
问题。它曾经在http://hacks.oreilly.com/pub/h/66 上可用,
但显然该地址现在被重定向到一些“hackzine”。
我将尝试根据那篇文章和来自
本施密特:
(1) 在本地机器上生成公钥/私钥对
(ssh 客户端):
ssh-keygen -t rsa
(根据提示将文件保存到~/.ssh/id_rsa)
(2) 当要求输入密码时,只需点击(两次)否
密码。如果您确实使用密码,您还需要使用
ssh-agent,因此您只需在每个会话中输入一次密码。
如果您不使用密码,只需登录您的本地
计算机或以任何方式访问密钥文件就足够了
访问任何具有该密钥授权登录的 ssh 服务器。
(3) 这会创建两个文件:
~/.ssh/id\_rsa
~/.ssh/id\_rsa.pub
(4)在目标机器(ssh服务器)上:
cd
mkdir -p .ssh
chmod 0700 .ssh
(5) 在你的本地机器上(ssh 客户端):(一行)
ssh {serverhostname} cat '>>' '~/.ssh/authorized\_keys2' < ~/.ssh/id_rsa.pub
或者,对于 OpenSSH,(一行)
ssh {serverhostname} cat '>>' '~/.ssh/authorized\_keys' < ~/.ssh/id_rsa.pub
你可以用
测试一下
ssh {serverhostname}
并且您应该登录到服务器机器而无需进一步输入
任何东西。
如果您决定使用密码,请执行以下操作:
ssh-agent $SHELL
ssh-add
ssh {serverhostname}
当您使用 ssh-add 时,系统会提示您输入密钥密码,但不会
随后当您使用 ssh 时。要与 vim 一起使用,您可以使用
ssh-agent vim
并且,当在 vim 中下一个时,使用
:!ssh-add
或者,您可以将 ssh-agent 应用于您计划使用的终端
运行 vim:
ssh-agent xterm &
并在需要时执行 ssh-add。
对于 Windows,vim 邮件列表中的人们提到 Pageant 有帮助
避免不断需要输入密码。
Kingston Fung 写了另一种避免经常需要进入的方法
密码:
为了避免每次都需要输入 scp 的密码,你
在文档中提供 hack 以设置非密码 ssh 帐户。我发现了一个
更好的方法:我可以使用一个普通的 ssh 帐户,它使用
无需输入密码即可访问材料的密码
每一次。这对安全性和便利性都有好处。我试过 ssh 公钥
授权+ ssh-agent,实现这个,它工作!这里有两个
带有说明的链接:
要在远程系统上制作,您需要将 makeprg 变量设置为
做一个 ssh 制作。来自:help makeprg
用于 ":make" 命令的程序。见|:make_makeprg|。
此选项可能包含 '%' 和 '#' 字符,它们被扩展为
当前和备用文件名。 |:_%| |:_#|
扩展环境变量|:set_env|。见 |选项-反斜杠|
关于包括空格和反斜杠。
请注意,'|'必须转义两次:一次用于 ":set",一次用于
命令的解释。当您使用名为
"myfilter" 这样做:
:set makeprg=gmake\ \\\|\ myfilter
占位符“$*”可以给出(甚至多次)来指定
将包含参数的位置,例如:
:set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*}
这个选项不能通过 |modeline| 设置。或在|沙盒|中,对于
安全原因。