よんちゅBlog

― このブログは自分用のメモや日々の問題などを共有するためのものです ―

20121005185841 お知らせ:  2013/07/17 ブログデザインをリニューアルしました。

カッコイイtmuxを目指して!! - tmux-powerlineを改良したよ

この記事は既に内容がだいぶ古いです…

tmux-powerlineは2012年12月半ばあたりで大幅なバージョンアップが行われたため、この記事の設定方法は使用できません。
また、この記事で挙げていた旧tmux-powerlineの問題もほぼ解決されました。
Modularize files and functions by jfelchner · Pull Request #92 · erikw/tmux-powerline

最新のtmux-powerlineの設定方法は本家のREADEMEを見て頂くの一番速いかと思います。

また、最新のtmux-powerlineの私の設定はこちらにありますので、参考までにどうぞ。

tmux-powerlineとは、tmuxのステータスバーをvim-powerlineのようにかっこ良くしてくれるスクリプトです。

Macだとデフォルトでこんな感じになります。

f:id:yonchu:20121114145556p:plain

どうでしょう。なかなか良い感じではないでしょうか。
iTunesの曲名や天気など、そこまでやるか〜と思ってしまうようなものまであります。

カスタマイズも簡単!

カスタマイズも非常に簡単で、各項目の表示/非表示を切り替えるだけならスクリプト内の該当行をコメントアウトするだけですみます。
また、色の変更も簡単に行うことができます。

以下、status-left.sh より一部抜粋
ステータスラインに表示される各項目は基本的に以下の形式をとっています。

# status-left.sh

declare -A hostname    # 名前は被らなければなんでもOK
hostname+=(["script"]="${segments_path}/hostname.sh")    # 使用するスクリプト名
hostname+=(["foreground"]="colour0")    # フォアグランドカラーを指定 (256色)
hostname+=(["background"]="colour33")    # バックグラウンドカラーを指定 (256色)
hostname+=(["separator"]="${separator_right_bold}")
register_segment "hostname"    # ←この行をコメントアウトするだけで表示/非表示を切り替え可能

ただし、出力内容の微調整や標準では未対応の情報を表示させたい場合には、自分でスクリプトを書き換えるか、新しく作成する必要があります。
独自スクリプトを作成した場合は、そのスクリプトのパスを指定するか、そのスクリプトをPATHの通った所におきスクリプト名を指定することで利用できます。

だがしかし、不便な点も…

しかし、この tmux-powerline にはいくつか不便な点があります。

ざっと上げてみると、

  • bashのバージョンが4以上でなければならない (e.g. macのデフォルトのbashは3.x)
  • OSを自動で判別してくれない(config.shを環境に応じて書き換えなければならない)
  • 設定が外出しできない
  • tmux-powerlineのオン/オフが、切り替えはできるがオフの時の表示スタイルが指定できない。
  • ウィンドウサイズによって出す情報を可変できない。(ウィンドウが小さいと何も表示されなくなってしまう)

っとまあこんな感じで、実際に使用してみると意外と使いづらい点が多かったりします。
色々な環境で作業をしている方、さらに設定ファイル等を使いまわしている方にとっては結構致命的な点もありますよね。

というわけで、上記の問題をそれなりに解決してくれるラッパースクリプトを作りました。
その名も "tmux-powerline-wrapper"
そのままですね。

作成したものはgithubにて公開しています。

tmux-powerline-wrapper について

まずは上記問題の対応状況について

  • bashのバージョンが4以上でなければならない (e.g. macのデフォルトのbashは3.x)

  → 起動前に判定する方法を提供 ※1

  • OSを自動で判別してくれない(config.shを環境に応じて書き換えなければならない)

  → 自動で判別します

  • 設定が外出しできない

  → できます

  • tmux-powerlineのオン/オフ切り替えはできるけど、オフの時の表示スタイルを指定できない。

  → 環境変数によりオン/オフを切り替え ※1

  • ウィンドウサイズによって出す情報を可変できない。(ウィンドウが小さいと何も表示されなくなってしまう)

  → ウィンドウサイズの情報を提供、それを使って細かく微調整できます

※1 bashが未対応の場合や、tmux-powerlineをオフにした場合、ユーザ指定のデフォルトスタイルを適用することができます。
つまり、tmux-powerline導入前のスタイルが適用されるわけです。

インストール方法

まずはbashのバージョンを確認します。
(以下は Mac OS X 10.8.2 のデフォルトbashの場合です)

$ bash--version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12)
Copyright (C) 2007 Free Software Foundation, Inc.

上記のようにbashのバージョンが4未満だった場合は、バージョンが4以上のbashをインストールする必要があります。
Macの場合はhomebrewを使用すれば簡単にインストールすることができます。

$ brew install bash

Linuxなどの場合は、パッケージを用意するなりご自身でコンパイルするなりして用意して下さい。

続いて、githubより tmux-powerlinetmux-powerline-wrapper を持ってきます。

$ mkdir ~/.tmux
$ cd ~/.tmux

$ git clone git://github.com/yonchu/tmux-powerline.git
$ git clone git://github.com/yonchu/tmux-powerline-wrapper.git

配置する場所は基本的にどこでも良いですが、必ず tmux-powerline と tmux-powerline-wrapper を同一ディレクトリに置き、ディレクトリ名を変更しないようにして下さい。

続いて、tmuxの設定ファイル "~/.tmux.conf" に以下の設定を追加します。
(頭3行は既に設定している場合は不要です)

set-option -g status on
set -g status-interval 5    # ステータスバーの更新間隔[sec] (デフォルト:15sec)  適当に変更して下さい
set-option -g status-utf8 on

# Left status line
if "~/.tmux/tmux-powerline-wrapper/test-tmux-powerline.sh" \
    "set-option -g status-left-length 100"
if "~/.tmux/tmux-powerline-wrapper/test-tmux-powerline.sh" \
    "set-option -g status-left '#(~/.tmux/tmux-powerline-wrapper/status-left.sh)'"

# Right status line
if "~/.tmux/tmux-powerline-wrapper/test-tmux-powerline.sh" \
    "set-option -g status-right-length 100"
if "~/.tmux/tmux-powerline-wrapper/test-tmux-powerline.sh" \
    "set-option -g status-right '#(~/.tmux/tmux-powerline-wrapper/status-right.sh)'"

tmux-powerline-wrapper の配置場所が上記と異なる場合は適宜変更して下さい。
tmux-powerline を使用しない場合に適用されるユーザスタイルおよびステータスラインの設定は、上記設定より前に行なって下さい。

※ 設定を2行以上にわたって記述する場合、"¥" 記号にて行の継続を指示する必要がありますが、この機能は tmux 1.7 から使用可能なため、それ以前のtmuxを使用する場合には1行で記述するようにして下さい。

続いて、tmux-powerline 側でカレントディレクトリを取得できるようにするため、使用シェルに応じて以下の設定を追加します。

bashの場合は、~/.bashrc に以下のように記述します。

PS1="$PS1"'$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#D" | tr -d %) "$PWD")'

zshの場合は、~/.zshrc に以下のように記述します。

PROMPT="$PROMPT"'$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#D" | tr -d %) "$PWD")'

※ 既にプロンプトに何らかの設定を行なっている場合は、その設定のあとに上記設定を追加するようにして下さい。

なお、上記設定はプロンプトの表示内容には影響しないので心配しないでください。
この設定がなくてもだいたいの機能は動きますが、一部gitなどのVCS情報の表示機能などが正常に動作しません。

最後に、tmuxを起動して以下のように表示されれば成功です。(Macの場合)
(※ ウィンドウ幅によって表示される情報が増減します)

f:id:yonchu:20121114163005p:plain

"tmux-powerline-wrapper" 内の "sample.tmux.conf" に ".tmux.conf" のサンプル設定があるので参考にして下さい。

tmux-powerlineのオン/オフ切り替え

tmux 起動前の場合は、以下のようにして tmux-powerline をオフにすることができます。

$ DISABLE_TMUX_POWERLINE=true
$ export DISABLE_TMUX_POWERLINE

tmux起動後にオン/オフを切り替える場合は以下のコマンドを使用します。

# オン→オフ
$ tmux setenv -ug DISABLE_TMUX_POWERLINE

# オフ→オン
$ tmux setenv -g DISABLE_TMUX_POWERLINE true

その後、設定ファイル(.tmux.conf)のリロードを行なって下さい。
設定ファイルのリロード方法が分からない方は、tmuxに慣れるためにまず最初に覚えるべきキーバインド - よんちゅBlog を参考にして下さい。

カスタマイズ

ステータスバーの表示スタイルや表示情報をカスタマイズしたい場合は、
まず、tmux-powerline-wrapper 内にある ".tmux-powerlinerc"".tmux-powerline-status-left.sh", ".tmux-powerline-status-right.sh" をホームディレクトリまたは "~/.tmux" へコピーして下さい。

配置するディレクトリはどちらでもOKです。
両方に置いた場合は、ホームディレクトリのファイルが優先されます。

$ cp ~/.tmux/tmux-powerline-wrapper/.tmux-powerlinerc ~/
$ cp ~/.tmux/tmux-powerline-wrapper/.tmux-powerline-status-left.sh ~/
$ cp ~/.tmux/tmux-powerline-wrapper/.tmux-powerline-status-right.sh ~/

まず、".tmux-powerlinerc" のカスタマイズです。

# Usage of patched font for symbols. true or false.
#USE_PATCHED_FONT=false

# Weather Yahoo
# Tokyo, JP - http://weather.yahoo.com/japan/tokyo-prefecture/tokyo-26235342/
TMUX_POWERLINE_WEATHER_YAHOO_LOCATION='26235342'
TMUX_POWERLINE_WEATHER_YAHOO_UNIT='c'
TMUX_POWERLINE_WEATHER_YAHOO_UPDATE_PERIOD=600

今のところ、表示する天気の地域, 単位(c/f/k), 更新間隔[sec]、パッチ当てフォントを使用するかどうかが変更可能です。

表示される天気はデフォルトでは東京になっています。
変更したい場合は、 Yahoo! Weather へアクセスし、好きな地域を選択後、表示されたページのURLの末尾にある数値を設定ファイルに記述して下さい。

続いて、ステータスラインの変更です。
コピーした ".tmux-powerline-status-left.sh" または ".tmux-powerline-status-right.sh" を変更して下さい。

変更方法は、基本的に本家 tmux-powerline のときと同様です。
加えて、以下のようにウィンドウサイズによって表示する情報を可変させることができます。
(書き方はシェルスクリプトと同様です)

# .tmux-powerline-status-left.sh より抜粋

register_segment "tmux_session_info"
if [ "$window_width" -ge 160 ]; then
    register_segment "hostname"
fi
if [ "$window_width" -ge 200 ]; then
    register_segment "username"
fi
if [ "$window_width" -ge 140 ]; then
    register_segment "ostype"
fi
register_segment "lan_ip"
register_segment "wan_ip"
if [ "$window_width" -ge 188 ]; then
    register_segment "vcs_branch"
fi
if [ "$window_width" -ge 230 ]; then
    register_segment "vcs_compare"
    register_segment "vcs_staged"
    register_segment "vcs_modified"
    register_segment "vcs_others"
fi

"$window_width" が現在のウィンドウサイズを示しているので、それに応じて表示させる情報をカスタマイズして下さい。

また、現在のウィンドウサイズは、tmux起動後にターミナルにて "tmux-powerline-wrapper/segments/window-width.sh" を実行することで確認することができます。
微調整したい場合にご使用下さい。

ステータスバー表示に利用できるスクリプトは、tmux-powerline/segments 内と tmux-powerline-wrapper/segments 内にあります。
お好みに応じてご使用ください。
ここにないものについては各自自作して頂ければと思います。

注意事項

フォントパッチについて

ステータスラインを良い感じに表示させるためにはvim-powerline 同様、使用するフォントにパッチを当てる必要があります。
自身で好きなフォントにパッチを当てたい場合は、vim-powerline に同梱されているfontpatcher を使用すると良いでしょう。
また、パッチ当て済みのフォントもいくつか配布されています。

パッチ当て済みフォントを使用しない場合は、".tmux-powerlinerc" にて以下のように設定すると良いでしょう。

# Usage of patched font for symbols. true or false.
USE_PATCHED_FONT=false
256色対応

tmuxを256色で表示させるためには、使用しているターミナルが256色表示に対応している必要があります。

以上です。

なんだかtmuxの本来の使い方から外れてきているような気がしますね。
ステータスバーのウィンドウ名が全然見えなかったりして…
ステータスバーの複数行表示ができたりすると、色々夢が広がるんですけどねぇ。

Macでmarkdownを書くときの環境

markdownを書く環境がほぼ固定されたので記録しておく。

基本は以下のページを踏襲
ぼくのかんがえたさいきょうの Markdown かんきょう - モトクロスとプログラムと粉砕骨折と

使用するアプリはMarked

Marked 1.4(¥350)App
カテゴリ: 仕事効率化, ユーティリティ
販売元: Brett Terpstra - Brett Terpstra(サイズ: 7.1 MB)

このアプリにはエディタの機能はついていませんが、そこがこのアプリの良い所。
どんなエディタとも簡単に連携することができます。
エディタはやっぱり使い慣れたものを使用したいですからね。

f:id:yonchu:20121112210131p:plain

使い方はいたって簡単
markdownのファイルをMarkedで開いて(ドラッグ&ドロップでもOK)、好きなエディタでファイルを編集するだけ
編集したファイルを保存すると自動的にMarked側でも更新が反映されるのですぐに結果が分かります。
変更箇所にはマークも表示されます。

また、最前面表示の機能もあり、更新時にページ先頭に戻されるようなこともなく表示位置も保持されます。
とても便利です。

以下のような設定がおすすです。

f:id:yonchu:20121112210830p:plain

また、デフォルトでGithubの書式にも対応しています。
特に Github Flavored Markdown に対応しているのが非常にうれしいところ。
(ただしちょっと重いです)
Github用の設定にするには以下のようにします。

f:id:yonchu:20121112210839p:plain
f:id:yonchu:20121112210850p:plain

続いてエディタの紹介
使用するエディタは基本的になんでも良いですが、特に親和性の高いエディタを紹介

CotEditor

ちょっと設定を追加しなければなりませんが、非常にシンプルで使い勝手が良いのでお勧めです。
追加する設定は2つ

1.markdown用シンタックス定義の追加
デフォルトではシンタックス・カラーリングに対応していないので定義を追加します。

定義ファイルは以下から入手できます。
CotEditor用シンタックス定義 -Goodies -Works //ヴォルフロッシュ

使用方法はCotEditorメニューから読み込むだけ。詳しい方法は同ページの一番上に書かれてます。

2.Markedの起動スクリプトを登録
手動でMarkedを起動してもいいですが、起動スクリプトをCotEditorに登録することでショートカットキー(Command + R)一発で起動できるようになります。

スクリプトは以下のページから拝借。
Marked 1.3.3 -Blog //ヴォルフロッシュ

Command + R でMarkedを起動するスクリプトとメニューに "Preview Markdown" という項目を追加するスクリプトがあります。
せっかくなので両方追加すると良いでしょう。

使用方法はスクリプトメニューからスクリプトフォルダを開くとができるので、そのフォルダにスクリプトファイルを置くだけ

f:id:yonchu:20121112211046p:plain
f:id:yonchu:20121112211104p:plain

vim

エディタといえばやっぱりvim
でもvimなんて知らないよって方は読み飛ばして下さい。
vimユーザに今更私などが細かい説明をしても仕方ないので設定を抜粋

キーマッピングの設定
vimで開いていファイルをMarkedで開く (om)
(redrawを入れているのは、Markedで開くとvimの描画が崩れることがあるためです)

if has("mac")
  " markdownをMarked.appで開く
  :nnoremap <leader>om :silent !open -a Marked.app '%:p'<cr>:redraw!<cr>
endif

いつもこんな感じで作業してます。

f:id:yonchu:20121112212256p:plain

Gihub

先の通り、MarkedはGithubの書式にも対応していて、表示もGithubと同じようにして見ることができます。

しかし、コミット前に最終確認として一度はちゃんと本家のGithubで確認した方が安心です。
この点に関しては以下のページがすごく参考になります。

脱GitHub初心者を目指す人のREADMEマークダウン使いこなし術 | ゆっくりと…

オススメはGihubのWikiを使った確認方法
適当なリポジトリを1つ作っておいて、そこでWikiを作り、編集画面のプレビュー表示で確認を行います。
プレビューを表示したいだけなので、保存する必要もなく、同じWikiを使いまわすことができます。

Github本家以外だと以下のページでも確認ができるのでオススメです。
Github Preview


以上、最近の私のMarkdown環境でした。

gitリポジトリの状態をざっくり表示する

gitリポジトリ下での作業はじめにいつも実行しているコマンド

実行イメージはこんな感じ

リモートリポジトリの更新状況もぱっと見て分かります。
(fetch済みのローカルoriginの更新状況ではなく、リモートの更新状況が分かります)

submoduleが古くなっていないかも確認できます。

スクリプトはこんな感じ

gitで変更のあったファイルを簡単に開ける git-edit について

とにかく目的のファイルにすぐにアクセスしたかった。
ただそれだけ。

コードはGithubにあります。
github - yonchu/git-edit

インストール方法:

  • git-edit をPATHの通った所に置くだけ
  • zshを使用している場合は _git-edit をfpathの通った所に置いて下さい。

 (※ fpath は echo "$fpath" などで確認して下さい)

どういうコマンドなのか

変更のあったファイルをエディタで開くための gitサブコマンドです。

コマンド形式は以下

$ git edit [commit] [file ...]

こんな感じで使います。

$ git edit
$ git edit HEAD
$ git edit hoge
$ git edit *
$ git edit *.txt
$ git edit HEAD^ dir/*

コミットの指定はハッシュ値でも構いません。

zshの補完機能との連携

今回一番やりたかったこと。

git-edit単体でも、まあそれなりに使えますがzshと併用することで格段に使い勝手がよくなる…と思います。たぶん

こんな感じで変更のあったファイル名が補完できます。

$ git edit <TAB>
Editable Files
xxxx.txt    yyyy.sh    zzzz.c
Deleted Files
hoge.txt

$ git edit HEAD <TAB>
Commit Hash:62c91ef1f56d89b3328fa4aeae4bb52b579ad679
Editable Files
aaaa.txt    bbbb.sh    cccc.c
Deleted Files
fuga.txt
zshの設定について

zshの設定によっては上記とは違った表示になるかも。

補完候補の一覧表示はデフォルトでも有効になっているはずだけど、説明項目(ラベル)はデフォルトでは表示されないはず。

説明項目(ラベル)を表示させるには "~/.zshrc" 等に以下のように設定します。

zstyle ':completion:*' group-name ''
zstyle ':completion:*:descriptions' format '%B%d%b'

%B はボールド(太字)の有効、%b はボールドの無効 (不要なら消して下さい)
%F{color name} と %f で色を変更することもできます。
%d が説明項目(ラベル)の指定

注意事項

  • submodule の変更は無視されます。そこまではちょっと…
  • ファイル名をリネームした場合はリネーム前のファイル名が Deleted FIles に表示されます
  • HEADなどのコミットオブジェクトは補完されません。これはそのうち対応するかも

以上

ちょっと説明がざっくりし過ぎているが、そんな需要があるとも思えないのでよしとしよう。

bash/zshで16色(ANSI カラーコード)と256色のカラーパレットを表示

bashzshでカラーパレットを表示するスクリプト

なんだか定期的に色を変えたくなる…

プロンプトの色やtmux/screenのステータスバーの色変更時のお共に。

yonchu/shell-color-pallet · GitHub

256色カラーパレットを表示

こんな感じに表示されます。
f:id:yonchu:20121020045036p:plain

ANSI のカラーコード(16色)を表示

こんな感じに表示されます。
f:id:yonchu:20121019042417p:plain

スクリプトのコメントにエスケープシーケンスの説明を記載しているので、設定するときに参照すると良いかと思います。