2〜3年くらい前にMacを手に入れてからMac OSX+iterm2+tmux+zshで作業してます。ちょっと前は会社ではwindowsにVirtualBox入れてその中でubuntuゲスト作って、ubuntu+tmux+zshで作業してた時期もあったのですが、(なぜかおれの環境だと)たまにvirtualboxがおかしくなったりゲストOSだと動きがもっさりするので、今はこの環境にしてます。んで、ちょっと前に自分のドットファイルを整理したのでそのまとめとしてインストール手順などについて記します。

1. 多用している機能

インストール手順は・・・といきたいところですが、このページを見にきてくれた方にtmuxやらzshの良さを宣伝したいので、まずは便利だと思うオペレーションを紹介します(「2. 環境構築」にインストール手順を記します)。ペイン分割とかウィンドウ分割は他の端末ツールでもできる、ってか今どきあたりまえの機能なので省略。まー、ここに挙げる機能も他のシェルやツールで実現できますけどw
 

パスワード入力のショートカット(tmuxの設定)
<C-t>+sでパスワード入力をするようにしています(bind s send-keys ‘xxxxxxx’)。ちなみにtmuxのプレフィックスキーは<C-t>を割り当てています(デフォは<C-b>)。
何10台何100台もサーバ管理してると、一日にいくつものサーバに出入りしますよね。腱鞘炎になるんじゃねーかってくらいパスワード入力しますよね。全部のサーバに公開鍵を仕込むのも手間だし。
で、パスワード入力のショートカットを仕込んどけばパパパッとログインできます。
 

全ペインで同じコマンドを実行する(tmuxの設定)
tmuxの<C-t>+Sに割り当てています(bind s send-keys ‘/usr/local/bin/tmux set-window-option synchronize-panes’)。
<C-t>+Sでtmux set-window-option synchronize-panesをコマンドラインに表示してonをタイプしてあげると、全ペインで同じコマンドが入力できるようになります。

1
2
3
4
# 全ペインで同じコマンドを入力できるようになる
tmux set-window-option synchronize-panes on
# 解除するとき
tmux set-window-option synchronize-panes off

地味に使えます。複数台のサーバで全く同じオペレーションをしたいけどスクリプトを組むまでもないような作業、例えば「複数のサーバの設定ファイルを書き換える」「複数のサーバの同じディレクトリや同じファイルの内容を確認したい」などのときに重宝しています。

補完&補正(zshの設定)


~/.zshrcに↓の設定を入れておきましょう。ユーザ名やコマンドの引数、オプションの補完ができるようになります。

1
2
autoload -U compinit
compinit

 

configureオプションの展開(zsh)

1
./configure --

とタイプしてタブキーをカタカタッと叩くと設定可能なconfigureオプションが展開されます。これも地味に便利。

 

過去に移動したディレクトリに戻る(zshの設定)

cd -数字で過去に移動したディレクトリに戻れます。

1
2
3
4
5
6
7
8
# cd -を入力してタブキーを押すと過去に移動したディレクトリが表示される
cd -TAB
0 -- /home/ore
1 -- /usr/src
2 -- /tmp
3 -- /etc/sysconfig/network-scripts
# /etc/sysconfig/network-scriptsに移動するとき↓
cd -3

コマンドラインスタック(zshの機能)

コマンド入力中にESC+qを押下すると入力中のコマンドが保存されて、別のコマンドが入力できるようになります(うーん、説明がしにくいな・・・w)。
たとえばvim /usr/local/apache/conf/httなどと入力中に、「おっと、httpd.confのバックアップを取ってから編集しようかな・・・」などと思うことがある(よね!?!?!)と思います。そんなとき、<C-c>でキャンセルしてもう一回vim /usr/lo〜〜とタイプしている人が多いんじゃないかと思いますが、コマンドラインスタックを活用すると、

1
2
3
4
5
6
# コマンドを入力中に・・・
vim /usr/local/apache/conf/extra/htt
# ESC+qをタイプすると、入力がキャンセルされたように見える(んで、ここで↓みたいに別のコマンドを実行する)。
cp -p /usr/local/apache/conf/extra/httpd-mpm.conf /usr/local/apache/conf/extra/httpd-mpm.conf.bk
# ↑のコマンドの実行が終わると、さっきまで入力してたコマンドが勝手に入力されているッ!</div>
<div>vim /usr/local/apache/conf/extra/htt

といった感じに、さっき途中まで 入力していたコマンドを自動で復元してくれます。
 
入力中のコマンドのヘルプを表示(zsh)
コマンドを入力中に「やっべ、あのオプションなんだっけ?アレだよアレ!思い出せん・・・」ってなることが多い記憶障害のおれですが、コマンド入力中にESC+hを入力すると、入力中のコマンドのヘルプが表示されます。
 

2. 環境構築
次の手順でそれぞれのインストールを行う。
(1)iterm2のインストール
(2)homebrewのインストール
(3)zshのインストール
(4)tmuxのインストール
(5)OSX特有の設定
(6)設定ファイル編集
 

(1)iterm2のインストール↓からインストール。
 

(2)homebrewのインストールOSXのパッケージマネージャといえばコレ。
↓のようにしてインストール。
https://github.com/mxcl/homebrew/wiki/installation
 

(3)zshのインストール
先ほど入れたhomebrewを使ってインストール

1
2
brew install zsh</div>
<div>

(4)tmuxのインストール
同じくhomebrewを使ってインストール

1
brew install tmux

 

(5)OSX特有の設定

Macだとtmuxとクリップボードの連携をするためにちょっとした細工が必要です。次のような仕込みを入れます。
・/usr/local/bin/reattach-to-user-namespace
をインストール。

1
2
3
4
git clone https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.git<a href="https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.git">
</a>cd tmux-MacOSX-pasteboard
make reattach-to-user-namespace
cp reattach-to-user-namespace /usr/local/bin/

・/usr/local/bin/tmux-pbcopy
を作成し、内容は↓のものとします。

1
2
3
4
5
6
#!/bin/sh
tmux save-buffer /tmp/.tmux_to_pbcopy
cat /tmp/.tmux_to_pbcopy | pbcopy
HEAD=`head -1 /tmp/.tmux_to_pbcopy`
TAIL=`tail -1 /tmp/.tmux_to_pbcopy`
tmux display-message "Copy:  $HEAD  -  $TAIL"

・~/.tmux.conf
を作成して次の一行を書いておきます。

1
bind C-q run-shell 'reattach-to-user-namespace tmux-pbcopy'

・/usr/local/bin/tmuxx
を作成し、内容は次のgistのものとします。実行権限(chmod 755)を与えておきます。
https://gist.github.com/1462391

・~/.zshrc
zshrcに↓を記述しておく

1
alias tmux='tmuxx'

これでtmuxのコピーモードでコピーしたあとに<C-t>+qすると、コピーしたものがクリップボードに入るようになります。

(6)設定ファイル編集

基本的には先人達が公開してくれている設定をつまみぐいさせていただいています。今現在は↓のような設定で仕事してます。

 

3. 参考にさせていただきました
 

4. つぶやき

自動化と同様、手作業の生産性って大事だよね。もっと便利な使い方があったら勉強したいね。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Set your Twitter account name in your settings to use the TwitterBar Section.