我的工作往往涉及使用SSH连接到各种机器,然后使用vim编辑这些机器上的文件。 问题是我必须不断复制我的.vimrc文件。 打开vim并没有任何设置是非常烦人的。 是否有可能将我的vim设置在机器之间随身携带,而无需手动将其复制到任何地方?
我感受到你的痛苦。 我拥有版本控制下的所有〜/.* 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的时候,configuration文件也将在不同的计算机上被同步和更新。
为了不需要将.vimrc带到每个需要处理的服务器,为什么不从本地vim编辑远程文件:
在vim / gvim中,运行:
:e scp://[email protected]//path/to/document
或者像这样启动vim:
vim scp://[email protected]//path/to/document
这将打开文件(实际上是在本地复制文件),并保存时,它会将编辑后的文件发送回服务器。
它要求一个ssh密码,但是这可以通过ssh密钥简化。
正如其他人所提到的,这种方法的唯一缺点就是不像在直接在机器上工作那样获得path/文件竞争。
有关更多信息, 请查看以下教程 。
每次login时,您都可以使用bash脚本自动将其复制,如下所示:
#!/usr/bin/env bash scp ~/.vimrc $1: ssh $1
例如,你可以把它叫做ssh_vim。 这不是一个理想的解决scheme,但将解决您的问题。
你可以改进它,先检查是否已经存在。 如果你不总是从同一台机器上运行ssh,你可以改变脚本从另一台机器上的scp中获取文件。
EDIT1
在相关说明中,您也可以使用sshfs挂载远程计算机的文件系统。 这样你就可以从你的环境和工具中获益(不仅仅是.vimrc),而且你还有shell完成(你没有使用scp://)。
EDIT2
我刚刚发现你可以使用scp://获取.vimrc文件,如下所示:
:source scp://you@your_computer//yourpath/.vimrc
这从vim命令行工作,但目前我不知道如何自动化。 它似乎没有与'-u'开关,也没有在.vimrc也没有$ VIMINIT。
EDIT3
我find了! 你可以通过从你的主机引用的.vimrc来启动vim。
vim -c ':source scp://you@your_computer//yourpath/.vimrc'
选项'-c'在启动vim后立即执行命令。
你可以在你select的shell中创build一个别名来避免input。 在bash中会是这样的:
alias vim="vim -c ':source scp://you@your_computer//yourpath/.vimrc'"
几个解决scheme:
1)为您的主文件夹创build一个NFS共享,并将其映射到多个位置。
2)创build一个小脚本,将你的.vimrc文件推送到你要连接的服务器上。 它可能看起来像这样(伪代码):
connectString = arg0 #username@ipaddress scp -i ~/.ssh/indentity connectString:~/ ~/.vimrc ssh -i ~/.ssh/indentity connectString
与sunny256完全相同的答案,但使用git而不是SubVersion。
保留一个主分支与所有计算机通用的文件,并为每个新计算机有一个分支。
这样,你可以在大多数计算机上拥有几乎相同的文件,而且还不会感到困惑。
如果你使用公共密钥authentication,你可以在你的~/.ssh/config
:
Host * PermitLocalCommand yes LocalCommand bash -c 'scp -P %p %d/.vimrc %u@%n: &>/dev/null &'
我喜欢它比上面提到的脚本技巧更好,因为它不会混淆ssh
命令的调用(当指定额外的参数时等)
我使用https://github.com/andsens/homeshick来pipe理我的点文件,并将它们存储在github上。
Homeshick是用100%bash编写的,帮助你pipe理只包含/ home /目录的git仓库。 它有命令将现有的点文件移动到repo中,并用符号链接replace它们。 将符号链接中的所有文件链接到新计算机上的主目录中。
所以一般的想法是保持你的dotfiles在一个版本控制系统,并从实际path符号链接到他们。 这样你的回购不需要从你的主目录开始,并包含大量你不想添加的文件。
如果你和我一样,并且有许多开发机器(虚拟机),你可以结合使用ssh密钥,智能bash_profile和你select的RCS。
我会第二次使用nfs / samaba / sshfs。 一个缺点是,如果你一直没有networking访问,那么你不能访问你所需要的(飞行,没有WiFi,防火墙,路由问题等)。 我保持同步的机器并不都是可以同时访问的,但我想在它们之间共享信息。
以下是我如何从互联网上借鉴很多想法。
.bash_profile可以有这样的东西
$HOME/bin/shell_ssh_agent
我从几个地方得到了这个,但现在找不到链接。 shell_ssh_agent文件:
#!/bin/bash SSH_ENV=$HOME/.ssh/environment #echo "starting" function start_agent { #echo "reaping agents" killall ssh-agent #echo "Initialising new SSH agent..." /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV} #echo succeeded chmod 600 ${SSH_ENV} . ${SSH_ENV} /usr/bin/ssh-add; } # Source SSH settings, if applicable if [ -f "${SSH_ENV}" ]; then . ${SSH_ENV} #echo "sourced ssh env" ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent > /dev/null || { start_agent; } else start_agent; fi
现在第一次login你设置你的密钥。 注销和进入,它只是使生活更轻松。
把所有的脚本放在一个RCS中,这样可以让开发机器更容易同步。 我用git。 使用git进行身份validation是通过SSH,所以SSH密钥也在这里帮助。 注意在这一点上你可以使用像nfs这样的东西。 我仍然是RCS的粉丝,因为我在下面提到。
用例是
我想要尝试的东西是将初始login/安装程序包装在一个生成文件中,我将其复制到新机器上。 makefile然后可以完成你的密钥,RCS等的设置。显然这里有一些开销,但是如果你最终设置了很多机器,这是:
我使用了一个包含所有服务器的列表的makefile,当我在本地机器上进行更改时,会使用makefile自动运行make,这会更新所有服务器的更改或任何插件
我知道这是一个古老的线程,但我这样做的一个方法是使用sshfs将文件系统安装在保险丝上。 本地vim执行所有的编辑,所以没有理由复制.vimrc文件。
这是不利的,另一个terminal将不得不开放任何需要在远程服务器上运行的命令,但编辑我觉得这是最好的。
它还具有可以使用系统剪贴板的好处。
您可能会考虑一个EXPECT脚本,它允许您在按下某个按键时设置您的path和环境(如EXRCvariables)。 在有人发布类似的脚本之前,不要太长。
当你的服务器农场数量超过几十(想想成千上万),然后有一个很容易地在“处女”盒子上设置你的环境是一个真正的救星
通常当我login到一个盒子,它首次创build我的homedir!
sshrc解决了这个问题。 你把你的.vimrc放到〜/ .sshrc.d /中,然后把export VIMINIT="let \$MYVIMRC='$SSHHOME/.sshrc.d/.vimrc' | source \$MYVIMRC"
加到`/.sshrc。