我的工作往往涉及使用 SSH 连接到各种机器,然后使用 vim 编辑这些机器上的文件。问题是我必须不断地复制我的 .vimrc 文件。打开 vim 却没有任何设置,这很烦人。是否可以将我的 vim 设置从一台机器带到另一台机器,而不必手动将其复制到每个地方?
答案1
我理解你的痛苦。我把所有 ~/.*rc 文件都放在版本控制 (Subversion) 下,自从 1998 年使用 CVS 以来,它一直运行良好。一种方法是,当你站在主目录中时,像这样签出所有 rc 文件:
svn co svn+ssh://user@host/path/to/repo/trunk/home/user .
A .signature
A .vimrc
A .bashrc
A .screenrc
A .psqlrc
[...]
Checked out revision 7645.
这样,当您运行 svn update 时,配置文件也将在各个计算机之间同步和更新。
答案2
您不需要将 .vimrc 带到每个需要处理的服务器上,为什么不从本地 vim 编辑远程文件呢:
在 vim/gvim 中,运行:
:e scp://[email protected]//path/to/document
或者像这样启动 vim:
vim scp://[email protected]//path/to/document
这将直接打开文件(它实际上是在本地复制文件),当您保存时,它会将编辑后的文件发送回服务器。
它要求输入 ssh 密码,但可以通过 ssh 密钥简化此过程。
正如其他人提到的,这种方法的唯一缺点是您无法像直接在机器上工作那样获得路径/文件竞争。
欲了解更多信息,查看以下教程。
答案3
您可以编写一个 bash 脚本,以便每次登录时自动复制它,如下所示:
#!/usr/bin/env bash
scp ~/.vimrc $1:
ssh $1
例如,您可以将其命名为 ssh_vim。这不是理想的解决方案,但可以解决您的问题。
您可以改进它,首先检查是否已经存在。如果您不总是在同一台机器上运行 ssh,您可以更改脚本以从另一台机器上的 scp 获取文件。
编辑1
与此相关,您还可以使用 sshfs 挂载远程计算机的文件系统。这样,您就可以从环境和工具(不仅仅是 .vimrc)中受益,并且可以使用 shell 补全(使用 scp:// 则没有此功能)。
编辑2
我刚刚发现您可以使用 scp:// 获取 .vimrc 文件,如下所示:
:source scp://you@your_computer//yourpath/.vimrc
这在 vim 命令行下有效,但目前我不知道如何自动化。它似乎无法与 '-u' 开关、.vimrc 或 $VIMINIT 配合使用。
编辑3
我找到了!你可以这样做,使用从参考主机中获取的 .vimrc 来启动 vim:
vim -c ':source scp://you@your_computer//yourpath/.vimrc'
选项‘-c’在启动 vim 后立即执行命令。
您可以在所选的 shell 中创建别名以避免输入。在 bash 中,它将如下所示:
alias vim="vim -c ':source scp://you@your_computer//yourpath/.vimrc'"
答案4
一些解决方案:
1)为您的主文件夹创建一个 NFS 共享并将其映射到多个位置。
2) 创建一个小脚本,将您的 .vimrc 推送到您要使用身份/密钥文件连接的服务器。它可能看起来像这样(伪代码):
connectString = arg0 #username@ipaddress
scp -i ~/.ssh/indentity connectString:~/ ~/.vimrc
ssh -i ~/.ssh/indentity connectString