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

[Vim・Bash/Zsh使いなら]ドットファイル管理のススメ

$
0
0

スクリーンショット 2015-08-01 午後10.41.11.png

Vim使いなら.vimrcとか、
Bash使いなら.bashrc、
Zsh使いなら.zshrc。

こうした「.(ドット)」で始まるファイルって有りますよね。
たいていのプロジェクトを使うときに使いまわしたり、
新しいPCに環境構築するときに、「あ、あのドットファイルどこいったっけ??」ってことに
なったことがある方はいませんか?

RailsアプリやAndroidでいつも使う「.gitignore」ファイル。
ドットで始まるファイルだけじゃなくても、
Gitプッシュ用に書いた便利なカスタムシェルスクリプトや
バッチファイルなど、使い回したい・常に最新版で管理しておきたいものファイルは
誰しもあるはずです。

このドットファイルの重要性やTipsについては、下記記事などで非常にわかりやすく
書いてありますので、ぜひ御覧ください。

@see
http://qiita.com/himinato/items/7f5461814e8ed8916870

@see
http://qiita.com/b4b4r07/items/b70178e021bef12cd4a2

自分の管理しているもの

一般的なもの

メジャーどころで言ったら、以下あたりになるかと思います。

・vimrcファイル
・vimのカラースキーマファイル
・vimのプラグインの内いくつか必要なもの
・bashrcファイル(たまにbash使う)
・zshrcファイル
・汎用的なシェルスクリプトいくつか

その他

ちなみに自分は、「新しいPCに環境構築する際に参考になるように」ということで、
以下の情報も管理しています。

・インストールしたNPM一覧
・インストールしたgem一覧
・(Macなので)/Applications配下にあるアプリケーションの名前リスト
・brewでインストールしたもの一覧
・/usr/local/bin配下のコマンドリスト

これらは、「名前リスト」一覧にすぎないのですが、
新しいPCに環境構築するときなどに、
「あれ、なにインストールしてたっけ」とか
「あのときバージョン何使ってたっけ」といった忘れがちなものも
記録しておくことができるからです。

これらは、以下のように取得できます。

brew list > ./dist/brew_list.txt
gem list > ./dist/gem_list.txt
npm list --depth 0> ./dist/npm_list.txt
ls -A /Applications > ./dist/applications_list.txt
ls -A /usr/local/bin > ./dist/usr_local_bin.txt

GitにPushするシェルスクリプト

ということで、こうしたドットファイル一覧を取得してGithubのレポジトリ(gitのリモートリポジトリならどこでもいいが)にPushするシェルスクリプト(一部)を紹介します。

大したことはしてません。

・上記で上げたようなファイルを「/dist」ファイルにコピーしている
・それらをGitのリモートリポジトリにプッシュしている

ファイル構成

だいたいこんな感じになります。

.
├── README.md
├── backup.sh # 下記で紹介
├── commit.sh # commit用に作ったシェルスクリプト
├── dist # ここに管理しておくファイルをすべて格納しておく
│   ├── applications_list.txt
│   ├── bash
│   │   └── .bashrc
│   ├── brew_list.txt
│   ├── gem_list.txt
│   ├── npm_list.txt
│   ├── shellscript
│   │   ├── backup.sh
│   │   ├── commit.sh
│   │   └── push.sh
│   ├── usr_local_bin.txt
│   ├── vim
│   │   └── .vimrc
│   │   └── colors
│   │       ├── grb256.vim
│   │       ├── solarized.vim
│   │       └── twilight.vim
│   └── zsh
│       └── .zshrc
├── log
│   └── 20150801_22:22:13.log
└── push.sh # push用に作ったシェルスクリプト

7 directories, 16 files

コレは、以下のシェルスクリプトを叩けば自動でGithubのレポジトリにPushしてくれるようにしてあります。作った当初はcronに登録していましたが、別にそこまでしなくていいかなと、最近は思い立った時にシェルスクリプトを叩くくらいです。ちょっとリファクタが不十分なところも多々ありますが。。

backup.sh

#!/bin/sh# Created by Kenju Wagatsuma# # What to do# - backup some setting files#   - ~/.vimrc#   - ~/.bashrc# - write log#   - /log/YYYYmmDDHHMMSS.log# - push to remote git repo#   - add/commit/push## initializeNOW=`date +%Y%m%d_%H:%M:%S`LOGFILE=./log/$NOW.log
rm ./log/*
touch $LOGFILE# wrap all commands for using tee{echo"$NOW"echo"=========================="################### Backup################### initializeDIST=./dist/
FBACKUP=./backup.sh
FVIM=~/.vimrc
FBASH=~/.bashrc
FZSH=~/.zshrc

# add files to dist/ folder# $1 = target file which you want to copy into dist/# $2 = target dire in distfunction copy2dist(){# if second parameter set copy target directoryif[ -n $2]thenTARGET=$2# if target directory does not exsit, create a new dirif[ ! -f $2]then
          mkdir -p $2fielseTARGET=$DISTfiif[ -f $1]then
      cp $1$TARGETecho"Successfully copied $1 to $TARGET"elseecho"$1 was not found"fi}function copyMultiple2dist(){for var in $@do
    copy2dist $var ./dist/vim/colors/
  done}



copyMultiple2dist ~/.vim/colors/*.vim

copy2dist $FBACKUP ./dist/shellscript/
copy2dist $FVIM ./dist/vim/
copy2dist $FBASH ./dist/bash/
copy2dist $FZSH ./dist/zsh/
copy2dist ./push.sh ./dist/shellscript/
copy2dist ./commit.sh ./dist/shellscript/

#TODO: refactor by creating generic method
brew list > ./dist/brew_list.txt
gem list > ./dist/gem_list.txt
npm list --depth 0> ./dist/npm_list.txt
ls -A /Applications > ./dist/applications_list.txt
ls -A /usr/local/bin > ./dist/usr_local_bin.txt

################# Git################echo"=========================="# push to remote git repo
git add -A 
git commit -m "Automatically pushed at $NOW"  
git push 

} 2>&1| tee $LOGFILE

Viewing all articles
Browse latest Browse all 5608

Trending Articles



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