Answers:
我感到你很痛苦。我所有的〜/.* 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时,配置文件也将在各种计算机上同步和更新。
除了将.vimrc带到您需要使用的每台服务器上之外,为什么不从本地vim编辑远程文件:
在vim / gvim中,运行:
:e scp://remoteuser@server.tld//path/to/document
或像这样启动vim:
vim scp://remoteuser@server.tld//path/to/document
这将以缝合方式在适当位置打开文件(实际上是在本地复制文件),并且在保存时,它将已编辑的文件发送回服务器给您。
它要求输入ssh密码,但是可以通过ssh密钥简化此密码。
正如其他人提到的那样,此方法的唯一缺点是您无法像直接在计算机上工作那样获得路径/文件竞争。
有关更多信息,请查看以下教程。
您可以制作一个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之后立即执行命令。
您可以在选择的外壳中创建别名以避免输入。在bash中将是这样的:
alias vim="vim -c ':source scp://you@your_computer//yourpath/.vimrc'"
几个解决方案:
1)为您的主文件夹创建一个NFS共享,并将其映射到多个位置。
2)创建一个小脚本,以使用身份/密钥文件将.vimrc推送到您要连接的服务器。它可能看起来像这样(伪代码):
connectString = arg0 #username@ipaddress
scp -i ~/.ssh/indentity connectString:~/ ~/.vimrc
ssh -i ~/.ssh/indentity connectString
答案与sunny256完全相同,但使用git代替SubVersion。
使用所有计算机通用的文件保留一个主分支,并且每台新计算机都有一个分支。
这样一来,您可以在大多数计算机上拥有几乎相同的文件,而不会感到困惑。
我正在使用https://github.com/andsens/homeshick来管理我的点文件,并将它们存储在github上。
Homeshick用100%bash编写,可帮助您管理“城堡”,这些城堡只是包含/ home /目录的git repos。它具有将现有点文件移至存储库中并用符号链接替换它们的命令。并将符号库中的所有文件符号链接到新计算机上的主目录中。
因此,通常的想法是将您的点文件保存在版本控制系统中,并从实际路径对其进行符号链接。这样,您的回购不需要从您的主目录开始,也不需要包含许多您不想添加的文件。
如果您和我一样,并且出于各种原因拥有许多开发机(也包括虚拟机),则可以组合使用ssh密钥,智能bash_profile和您选择的RCS。
我会第二次使用nfs / samaba / sshfs。缺点之一是,如果您一直没有网络访问权限,那么您将无法访问所需的内容(飞行,没有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
现在,首次登录时,您就可以设置密钥了。注销并登录,这使生活变得更加轻松。
将所有脚本放入RCS中,这使得保持开发机器同步更加容易。我使用git。git的身份验证是通过ssh进行的,因此ssh密钥在这里也有帮助。请注意,此时您可能已经使用了nfs之类的东西。由于下面提到的原因,我仍然会喜欢RCS。
用例是
我接下来要尝试的操作是将初始登录/设置包装在我复制到新计算机的makefile中。然后,makefile可以完成设置密钥,RCS等的工作。显然这里有一些开销,但是如果最终要设置很多机器,这是:
我为此编写了一个简单的工具,该工具允许您以非标准方式使用SSHd内置配置选项在ssh时本地传输.vimrc文件。
无需额外的svn
,scp
,copy/paste
,等需要。
它简单,轻巧,并且默认情况下可以在我到目前为止测试过的所有服务器配置上使用。
使用变量VIMINIT:
export VIMINIT='set number'
并将其转发到远程服务器:
ssh remoteuser@remoteserver -o SendEnv=LC_VIMINIT -t 'export VIMINIT=$LC_VIMINIT && bash'
使用.bash_profiles或.bashrc很容易
export VIMINIT='
set number
'
export LC_VIMINIT=$VIMINIT
sshh (){
ssh -o SendEnv=LC_VIMINIT $1 -t 'export VIMINIT=$LC_VIMINIT && bash'
现在尝试使用sshh在远程服务器上运行vim进行连接:
sshh remoteuser@remoteserver
如果您愿意,也可以将插件带到远程服务器:
export LC_VIMINIT="
set number
set nocompatible
filetype off
set rtp+=~/.[USER]_vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
set shell=/bin/bash
call vundle#end()
filetype plugin indent on
"
export VIMINIT=$LC_VIMINIT
sshh (){
if [[ $1 ]]; then
ssh-copy-id $1 &>/dev/null &&
rsync -lzr --partial --del ~/.[USER]_vim ${1}: &&
ssh -o SendEnv=LC_VIMINIT $1 -t 'export VIMINIT=$LC_VIMINIT && bash';
else
echo "Provide remote user@host";
fi
}
我也有同样的情况,但不只是“ .vimrc
”。我也有类似的东西
我的解决方案(从30年前开始使用“ dist”开始!)是设置每晚一次的cron,以将最小的家庭配置同步到我使用的所有计算机上,以便每晚更新一次。
这样,我使用的所有其他机器都保持最新状态!我可以将一台新计算机添加到“帐户”列表中,然后进行一次单机分发以将其启动。
不需要太多,您可以从小处着手,并在进行时使其变得更复杂。您可以想象30年后我的分布现在相当复杂,因此我不会在这里列出。不用说,它还可以进行某些配置,例如为某些网络交换其他配置,进行家庭清理(例如:垃圾,缓存文件),确保家庭权限都正确等等。
注意:我只允许从一台“家用”计算机到所有其余计算机的无密码ssh登录,再也不会返回!任何cross ssh均受密码保护。
它是通过以下bash oneliner实现的。因为它是通过“流程替换”完成的,所以不会创建临时文件。
ssh -t user@host '
bash --rcfile <(
echo -e ' $(cat <(echo "function lvim() { vim -u <(echo "$(cat ~/.vimrc|base64)"|base64 -d) \$@ ; }") \
~/dotfiles/{.bashrc,sh_function,sh_alias,bash_prompt} \
<(echo -e alias vim=lvim) | \
base64
) ' \
|base64 -d)'
https://gist.github.com/blacknon/a47083f3bbbd0374998bdf7e3b3396cc
set background=dark
或一样set background=light
,没有 Linux发行版可以触及,并且对用户来说完全不麻烦。</ sarcasm>