Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

ドットファイルのコピースクリプトを作ってみた

$
0
0

目的

新しく環境作るとき、ドットファイル(.bashrcなど)を手動で他の環境からscpしていた。
これをgithubで管理し、導入・更新をスクリプト一発でできるようにする。(だけ)

完全に自分用(趣味)に作ったものですが、これも何かのお役に立つやもと思い。

ディレクトリ構成

自分の場合、githubに「dotfiles」リポジトリを作成し、「files」配下にドットファイル群(またはディレクトリ)を管理しています。
最新版はこちらです。

$ tree dotfiles/
dotfiles/
├── README.md
├── files
└── setup.pl

1 directory, 2 files


$ ls -a dotfiles/files/
.  ..  .bash_profile  .bashrc  .profile  .vim  .vimrc

コピースクリプト

perlで書きました(shellより使いやすいから)
これも、最新版はこちら
使い方は$ perl setup.pl /home/hoge(宛先。通常はホームディレクトリ)

setup.pl
#!/user/local/bin/perlusestrict;usewarnings;useutf8;useTerm::ANSIColorqw( :constants );$Term::ANSIColor::AUTORESET=1;## メイン処理#sub main{info('############ set up start. ############');# 引数がないif(@ARGV==0){error("invalid argument. please assign home dir.");&print_usage();exit(1);}my$home=$ARGV[0].'/';# インストール先のディレクトリがないif(!(-d$home)){error("invalid path. '$home' not exists");&print_usage();exit(1);}# ドットファイルコピー&copy_dotfiles($home);# colorschmeをインストール&install_colorscheme($home);# NeoBundleインストール&install_NeoBundle($home);success();exit(0);}## dotファイルをホームディレクトリにコピーする#sub copy_dotfiles{my($home)=shift;my$file_root='./files';exec_cmd("cp $file_root/.bash_profile $home");exec_cmd("cp $file_root/.bashrc $home");exec_cmd("cp $file_root/.profile $home");exec_cmd("cp $file_root/.vimrc $home");exec_cmd("cp -r $file_root/.vim $home");}## vimのカラースキームをインストールする# TODO: 再利用性が低いサブルーチン#sub install_colorscheme{my($home)=shift;info(">>>> start install colorschme");if(-f"$home/.vim/colors/molokai.vim"){info("molokai is alerady installed.");return0;}info("now installing colorscheme");exec_cmd("mkdir -p $home/.vim/colors");# molokaiexec_cmd(" git clone https://github.com/tomasr/molokai");exec_cmd("mv molokai/colors/molokai.vim ~/.vim/colors/");exec_cmd("rm -fR molokai");return1;}## vimのNeoBundleプラグインをインストールする#sub install_NeoBundle{my($home)=shift;info(">>>> start install NeoBundle");if(-d"$home/.vim/bundle"){info("NeoBundle is already installed.");return0;}info("now installing NeoBundle");exec_cmd("mkdir -p $home/.vim/bundle");exec_cmd("git clone git://github.com/Shougo/neobundle.vim $home/.vim/bundle/neobundle.vim");# gitでコミット実行時、利用エディタをvimに設定exec_cmd("git config --global core.editor \"vim\"");return1;}## コマンドを実行する#sub exec_cmd{my($cmd)=shift;info($cmd);my$output=`$cmd 2>&1`;chomp($output);my$status=$?/256;return($status,$output);}## Usageを表示する#sub print_usage{error("*********** Usage ***********");error("perl setup.pl /home/hoge");}## ログ出力#sub info{_log('INFO',shift);}# INFOsub error{_log('ERROR',shift);}# ERRORsub success{_log('OK','success!!!!!!!');}# SUCCESSsub _log{my($level,$message)=@_;print"[";# レベル毎に色付けif($leveleq'INFO'){printBLUE$level;}elsif($leveleq'ERROR'){printRED$level;}elsif($leveleq'OK'){printGREEN$level;}print"]";print"$message\n"}# 処理を実行&main();

要約すると、やっているのはこれだけ。

# ドットファイルコピー&copy_dotfiles($home);# colorschmeをインストール&install_colorscheme($home);# NeoBundleインストール&install_NeoBundle($home);

実行するとこんな感じ

$ perl setup.pl ~/hoge
[INFO]############ set up start. ############[INFO]cp ./files/.bash_profile /home/monhan/hoge/
[INFO]cp ./files/.bashrc /home/monhan/hoge/
[INFO]cp ./files/.profile /home/monhan/hoge/
[INFO]cp ./files/.vimrc /home/monhan/hoge/
[INFO]cp -r ./files/.vim /home/monhan/hoge/
[INFO]>>>> start install colorschme
[INFO]now installing colorscheme
[INFO]mkdir -p /home/monhan/hoge//.vim/colors
[INFO]git clone https://github.com/tomasr/molokai /home/monhan/hoge//.vim/colors/molokai.vim
[INFO]>>>> start install NeoBundle
[INFO]now installing NeoBundle
[INFO]mkdir -p /home/monhan/hoge//.vim/bundle
[INFO]git clone git://github.com/Shougo/neobundle.vim /home/monhan/hoge//.vim/bundle/neobundle.vim
[INFO]git config --global core.editor "vim"[OK]success!!!!!!!

工夫したところ

  • セットアップ時に、標準出力にかっこよく出力したかったので色付けした
  • vim用のプラグインはgithubから取得しているので、取得済みなら何もしないようファイル/ディレクトリの存在チェックを入れた
  • カラースキームはmolokai固定(笑)

運用する上で

  • githubには共通の設定のみ上げておいて、環境ごとの設定は例えば.profile.localなど、ローカルファイルに記述。それを.profileなどから読み込むようにしました
.profile
if[ -f ~/.profile.local ];then
    . ~/.profile.local
fi

作ってから思ったけど、ファイルコピーのところは、ソフトリンクにすればもっと運用楽になるかもなあ


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>