回答:
あなたの痛みが分かります。私はすべての〜/.* rcファイルをバージョン管理(Subversion)で管理しており、1998年にCVSを使用して開始して以来、うまく機能しています。それを行う1つの方法は、ホームディレクトリにいるときに、次のようなすべての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からファイルを取得できます。
EDIT1
関連する注意事項として、sshfsを使用してリモートマシンのファイルシステムをマウントすることもできます。そうすれば、環境とツール(.vimrcだけでなく)の恩恵を受け、シェル補完(scp://を使用していない)が得られます。
EDIT2
次のように、scp://を使用して.vimrcファイルを入手できることがわかりました。
:source scp://you@your_computer//yourpath/.vimrc
これはvimコマンドラインから機能しますが、現時点ではそれを自動化する方法がわかりません。'-u'スイッチでも.vimrcでも$ VIMINITでも機能しないようです。
EDIT3
見つけた!これを行うと、参照ホストから取得した.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をID /キーファイルで接続しているサーバーにプッシュします。次のようになります(擬似コード):
connectString = arg0 #username@ipaddress
scp -i ~/.ssh/indentity connectString:~/ ~/.vimrc
ssh -i ~/.ssh/indentity connectString
sunny256とまったく同じ答えですが、SubVersionの代わりにgitを使用します。
すべてのコンピューターに共通のファイルを含む1つのメインブランチを保持し、新しいコンピューターごとに1つのブランチを作成します。
そうすれば、ほとんどのコンピューターでほぼ同じファイルを使用でき、混乱することはありません。
https://github.com/andsens/homeshickを使用してドットファイルを管理し、githubに保存しています。
Homeshickは100%bashで書かれており、/ home /ディレクトリを含むgitリポジトリである「城」の管理に役立ちます。既存のドットファイルをリポジトリに移動し、シンボリックリンクに置き換えるコマンドがあります。そして、リポジトリ内のすべてのファイルを新しいマシンのホームディレクトリにシンボリックリンクします。
したがって、一般的な考え方は、ドットファイルをバージョン管理システムに保持し、実際のパスからそれらにシンボリックリンクすることです。このようにすると、リポジトリはホームディレクトリから開始する必要がなく、追加したくない大量のファイルを含める必要がありません。
あなたが私のような人で、さまざまな理由で多くの開発マシン(仮想マシンも)を持っている場合、sshキー、スマートbash_profile、お好みのRCSを組み合わせることができます。
次に、nfs / samaba / sshfsを使用します。1つの欠点は、常にネットワークにアクセスできない場合、必要なものにアクセスできないことです(飛行、Wi-Fiなし、ファイアウォール、ルーティングの問題など)。同期しているマシンはすべて同時に到達できるわけではありませんが、マシン間で情報を共有したいです。
以下は、インターネットから多くのアイデアを借りて行った方法です。
.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のファンです。
ユースケースは
次に試してみたいことは、最初のログイン/セットアップを新しいマシンにコピーするメイクファイルでラップすることです。メイクファイルは、キーやRCSなどの設定を行うことができます。明らかにオーバーヘッドがありますが、多くのマシンを設定することになった場合、これは次のようになります。
sshrcはこの問題を解決します。.vimrcを〜/ .sshrc.d /に入れてexport VIMINIT="let \$MYVIMRC='$SSHHOME/.sshrc.d/.vimrc' | source \$MYVIMRC"
から、 ` / .sshrcに追加します。
非標準的な方法で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をセットアップして、作業中のすべてのマシンに最小限のホーム構成をrsyncすることです。
これにより、私が使用する他のすべてのマシンが最新の状態に保たれます!「アカウント」リストに新しいマシンを追加し、単一のマシン配布を行って開始することができます。
それほど大きくする必要はありません。小さなものから始めて、より複雑にすることができます。30年後に想像できるように、私のディストリビューションはかなり複雑になったため、ここでは取り上げません。言うまでもなく、一部のネットワークの一部の構成を他の構成に交換する、ホームクリーンアップ(例:ゴミ箱、キャッシュファイル)、ホームのアクセス許可がすべて正しいことを確認するなどのことも行います。
注1台の「ホーム」マシンから他のすべてのマシンへのパスワードなしのsshログインのみを許可します。クロスsshはすべてパスワードで保護されています。
特定のキーストロークを押すと、パスと環境(EXRC変数など)を設定できるEXPECTスクリプトを検討できます。誰かが同様のスクリプトを投稿するまで、それほど長くはないはずです。
サーバーファームの数が数十(数千)を超える場合、「バージン」ボックスに環境を簡単に設定できることは、実際の命の恩人です。
多くの場合、ボックスにログインすると、初めてhomedirが作成されます!
次の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>