ターミナルを快適にすると色々捗ります
Git に限った話ではないですが、開発業務を行う上で CLI での作業は避けては通れません。 CLI 環境を適切に整備しておけば、色々捗ること間違いなしです。
ここでは、Mac 標準のターミナルを特にカスタマイズせずそのまま使っている、という方向けに、主に Git のコマンドを快適に使えるようにすることを目的に具体的な環境整備の手順を紹介してみたいと思います。
やること
- ターミナルで使用するシェルを bash から zsh に変更する
.zshrc
に色々と設定を書く- tmux を導入する
.tmux.conf
をちょっとだけいじる.gitconfig
をカスタマイズする
これらによって、ざっと以下のようなことが出来るようになります。
- Git のサブコマンドやブランチ名が補完できるようになる
g st
でgit status
が見れるようになったりする- プロンプトが色付きで見やすくなり、Git のブランチ名が常に表示されるようになる
- コマンドの補完とかが何かと賢くなる
- ターミナルウィンドウの分割表示が出来るようになる
- ターミナル上でコピー&ペーストが出来るようになる
1. zsh の導入
ログインシェルの変更
まずは、ターミナルのログインシェルを変更します。 最強との呼び声も高い zsh に切り替えます。
まずは、ログインシェルに zsh を指定できるかどうかを確認しましょう。
$ cat /etc/shells[Enter]
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
上記のように、シェルの一覧の中に zsh があれば問題ないです。以下のコマンドでログインシェルを変更します。※間違えないように慎重に打ってください。
$ chsh -s /bin/zsh
実行後、ターミナルを再起動すると、bash ではなく zsh が起動するはずです。ps
コマンドなどで確認してみてください。
.zshrc によるカスタマイズ
ターミナルが zsh で起動するようになったので、今度は zsh の設定ファイルを書きましょう。 ここで色々やっておくと、zsh の補完機能が何かと賢くなったり、プロンプトが色付きで見やすくなったり、Git のブランチ名が常に表示されるようになったりします。
設定ファイルは ~/.zshrc
です。
今回は .zshrc
の設定の細かい内容は枝葉なので、私の設定ファイルをリンクしておきます。考えるのが面倒な方はそのまま使ってみてください。(余計な設定もいっぱい入ってると思いますが…)
.zshrc
を変更したあとは、
$ source ~/.zshrc
として設定を再読み込みしてください。「なんか効いてない気がする?」みたいな時はターミナルごと再起動してみてください。
使ってみる
適当に Git リポジトリなディレクトリに移動してみてください。
こんな感じで、色付きのプロンプトで Git のブランチ名が表示されていると思います。
適当にいじってみて、コマンドの補完とかが bash に比べて色々賢いことを確認してみてください。Git のサブコマンドやブランチ名も補完されますよ。
2. tmux の導入
次に、zsh 上で tmux という ターミナルマルチプレクサ を入れてみましょう。 使いこなせば色々できる代物ですが、とりあえず今回は
- ターミナルウィンドウの分割表示
- ターミナル上でのコピー&ペースト
ぐらいを目的に導入したいと思います。
インストール
インストールは Homebrew で一発です。
$ brew install tmux
.tmux.conf によるカスタマイズ
tmux の設定は ~/.tmux.conf
でカスタマイズできます。
ここでは、以下の 2 つの設定を行います。
- デフォルトのキーバインドが使いにくいので適当に変更する
- tmux 上のキー操作でコピーした内容を Mac のクリップボードにコピーできるようにする
例によって、私の設定ファイルをリンクしておきますので、参考にしてください。
ざっくり説明すると、
- tmux コマンドを使うためのプレフィックスがデフォルトで
C-b
と使いにくい(ターミナルのカーソル移動と被ってる)ので、C-t
に変更 - 画面を縦に分割するコマンドが、プレフィックス+
%
と使いにくいので、プレフィックス+|
に変更 - 画面を横に分割するコマンドが、プレフィックス+
"
と使いにくいので、プレフィックス+-
に変更 - マウス操作でバッファをスクロールできるように設定
- tmux コマンドでバッファにコピーした内容を
C-q
で Mac のクリップボードにコピーできるように設定
を行っています。(2014/02/10 現在)
最後のクリップボードの設定には、別途 reattach-to-user-namespace
というパッケージが必要なので、Homebrew でインストールしておいてください。
brew install reattach-to-user-namespace
使ってみる
まず、ターミナルから tmux を起動します。
$ tmux
毎回これを打つのが面倒であれば、ターミナルの設定で、以下のようにシェル起動時に自動実行するようにしておくといいかもしれません。
画面を縦に分割
C-t
|
画面を横に分割
C-t
-
分割した画面(ペイン)を移動
C-t
o
または C-t
カーソルキー
分割した画面を閉じる
普通に exit
コマンド
コピー&ペースト
C-t
[
でコピーモードに入るC-Space
で始点確定C-w
で終点確定C-t
]
で tmux 上でペースト
別のアプリにペーストしたい場合は
- 上記手順で tmux 上でコピー
C-q
で Mac のクリップボードにコピー- 別のアプリで普通にペースト
設定が効いてない?
もし設定したとおりに動作しない場合、バックグラウンドで起動している tmux のセッションが設定を保持したままになっているせいだと思いますので、
$ tmux kill-server
で全てのセッションを終了させてみてください。
$ tmux ls[Enter]
failed to connect to server
セッションが全て終了されていることを確認して、改めて $ tmux
すれば、設定がちゃんと反映されるはずです。
3. .gitconfig の設定
最後に、主に Git のサブコマンドを省略形で入力できるようにするために、~/.gitconfig
をカスタマイズしておきましょう。
~/.gitconfig
は、git config --global -l
で見える設定情報の元データです。ファイルを直接編集してもよいですし、git config --global user.name "Takashi Kanemoto"
みたいに Git コマンドから設定しても同じです。
私の設定ファイルはこんな感じ ですが、alias
の部分は自分の使いやすいように色々設定しておけばいいと思います。
私の場合、.zshrc
で alias g="git"
とかやっているので、
g st
で git status
が見れたり、g ll
で git log --oneline --decorate
が見れたりして捗っています。
いくつか注意点を上げるとするなら、
user.email
user.email
のメールアドレスが GitHub に登録している “Primary GitHub Email” と異なっていると、いくらコミットしても GitHub トップページの “Your Contributions” に反映されないという悲しい出来事が起こりますのでご注意を。
mergeto
私の
.gitconfig
ではalias.mt
にmergeto
というコマンドを設定していますが、git mergeto
というコマンドはデフォルトでは存在しません。Git には、パスの通った場所に
git-hoge
という名前でシェルスクリプトを置いておくとgit hoge
というコマンドとして使用できるようになる機能があり、mergeto
は私が独自に作ったサブコマンドです。
ちなみに git-mergeto
の中身はこんな感じ。
#!/bin/sh
BRANCH=`git symbolic-ref HEAD 2>/dev/null | cut -d/ -f3`
if [ $# -eq 0 ]; then
TO='master'
else
TO=$1
fi
git checkout $TO
git merge $BRANCH
git branch -d $BRANCH
- 指定したブランチに移動(指定がなければ master に移動)
- 今までいたブランチをマージ
- 今までいたブランチを削除
多分 git-flow 的にはよくやる作業だと思うので、使いたい方はご自由にどうぞ。