いろんなサーバーにsshしてちょろっと設定を確認したりするときってあると思います。
ただその時にll
がつかえなかったり、vimのタブが空白4つがいいのに8文字分の広さのtab文字だったりして、ちょっとずつストレスが溜まっていきます。
やっぱりserverfaultでもおなじ苦労をしている人がいました。
vim - How to bring .vimrc around when I SSH? - Server Fault
http://serverfault.com/questions/33423/how-to-bring-vimrc-around-when-i-ssh
ただここにあるようにdotfilesとして保存して先でcloneするのもとても面倒くさい。第一各サーバーへ変更を入れないといけないし。SSHの秘密鍵みたいに携えていきたい。
そこで探していたらsshrcというツールを見つけてこれが結構便利だったので簡単に紹介します。
sshrcとは?
まさにさっきの問題の解決策といえるもの。
Russell91/sshrc: bring your .bashrc, .vimrc, etc. with you when you ssh
https://github.com/Russell91/sshrc
Macならbrewで簡単に入ります。
$ brew install sshrc
ssh
の代わりにsshrc
コマンドを使うことで、~/.sshrc
に記述したコマンドをssh直後に自動で実行させることができます。
$ echo "alias ll='ls -l'" >> ~/.sshrc
$ sshrc me@myserver
$ type ll
ll is aliased to `ls -a'
シンプルな動作でわかりやすいですね。
vimrcをもっていく
では早速vimrcを持ち歩きましょう。~/.sshrc.d
に.vimrcをいれて~/.sshrc
でそれを読み込むということをします。
$ mkdir ~/.sshrc.d
$ cd ~/.sshrc.d && ln -s ../.vimrc .vimrc/
$ cat << 'EOF' >> ~/.sshrc
export VIMINIT="let \$MYVIMRC='$SSHHOME/.sshrc.d/.vimrc' | source \$MYVIMRC"
EOF
$ sshrc me@myserver
$ vim # .vimrcが読まれてる!!
このとき.vimrc
にNeobundleで管理しているbundleを読み込んでいて、bundleはいつもdotfilesリポジトリ下でNeobundleをgit submoduleしているんで、~/.vim/bundle/neobundle.vim/
がないときはそれらを読まないという変更をしました。
基本的にtabstopとかset nu
とか基礎的なものだけでもできれば満足です。
if isdirectory(expand("~/.vim/bundle/neobundle.vim/"))
NeoBundle 'scrooloose/nerdtree'
NeoBundleCheck
" ほかにもいろいろ...
endif
終わりに
いままで結構小さなストレスだったので、こいつを発見できてよかった。
ちょっと触った感じはかなり便利です。もう少し使ってみて問題なさそうだったらalias ssh='sshrc'
してしまおうかと思います。
私の使っている例はdotfilesを見ればわかるので興味がある人は見てみてください。
ikuwow/dotfiles: my dot files
https://github.com/ikuwow/dotfiles
追記
Kyratという、sshrcと同様に.bashrc等をssh先に持っていくsshのラッパーがあり、こちらを少し前にしばらく使っていました。
SSH wrapper script that brings your dotfiles always with you on Linux and OSX
https://github.com/fsquillace/kyrat
sshrcを意識して作られている様子で、Comparison with sshrcなんていう比較表があったりします。細かい違いは中身を見てみてください。
sshrcは更新がもうあまりされていないので、最近の更新頻度が高くownerがちゃんと返事をしてくれるkyratに移行していました。ただかなりいろんなファイルをsshした先に持っていこうとしたときにkyratでは持っていけるファイルに制限があり、sshrcはカスタマイズ次第で何でも持っていけるので、結局sshrcに戻りました。