tmux使用時にmanページを新規ウィンドウ表示 & manページをカラー表示にする設定法のまとめ

tmux使用時、通常、manページは man コマンドを実行したウィンドウに表示される。この状態では、manページを参照しながらコマンドを実行したい場合、不便である。

その解決策として、tmux使用時に、manページを新規ウィンドウで表示する方法をまとめる。
また、manページをカラー表示にし、読みやすくする方法もまとめる。

環境

  • zsh (5.0.5)
  • tmux (1.9a)
  • lv (4.51)
  • less (458)
  • most (5.0.0)
  • evilvte (0.5.2~pre1)

設定手順

設定は、以下の2つの手順に分けておこなう。

  • 新規ウィンドウ表示の設定
  • manページカラー表示の設定

上記2つの手順は、それぞれ独立しているため、どちらか1つの設定だけをおこなうことも可能。




新規ウィンドウ表示の設定

manページをtmux内の新規ウィンドウで表示するために、シェル関数を追加する。

設定手順
$HOME/.zshrc に、以下の関数を追加する。(スクリプト引用&改変元)


function man_tmux() {
if [ $# -le 1 ];
tmux new-window -n "man $@" "exec man $@"
else
man $@
fi
}
alias man=man_tmux

以下、コピペ用ワンライナー


$ echo -e 'function man_tmux() {\n\tif [ $# -le 1 ];\n\t\ttmux new-window -n "man $@" "exec man $@"\n\telse\n\t\tman $@\n\tfi\n}\nalias man=man_tmux' | sed -e 's/\t/ /g' >> ~/.zshrc

補足

上記関数の"new-window"を"split-window"にした場合、新規ウィンドウではなく分割ペインとしてmanページが表示される。





manページカラー表示の設定

manページをカラー表示にするには、大きく分けて次の2種類の方法がある。

  • ページャでカラー表示できるように設定する
  • ターミナルでカラー表示できるように設定する

ここでは、ページャはlv、less、mostの3つを、
ターミナルはevilvteを、合計4通りの設定方法を述べる。

lvでカラー表示 (上記4種類の中で、一番おすすめの方法)

設定手順
$HOME/.zshenv に、以下の内容を追加する。


MANPAGER="lv"
LV="-c -Sh1;36 -Su1;4;32 -Ss7;37;1;33"

以下、コピペ用ワンライナー


$ echo -e 'MANPAGER="lv"\nLV="-c -Sh1;36 -Su1;4;32 -Ss7;37;1;33"' >> ~/.zshenv

カラーコードは、こちらを参考に。
注意点として、lvのオプションでは、ANSIカラーコードとして正確に記述する必要はない。
数値とセミコロン';'だけで指定できる。


"tmux new-window"実行時には $HOME/.zshrc は読込まれないため、上記設定は $HOME/.zshenv に書かなければならない。
(以下、上記の問題の詳細が書いてあるサイト)



この方法の欠点

  • (考えつく限りでは)無し
lessでカラー表示

環境変数"LESS_TERMCAP"を用いて設定をおこなう。

設定手順
1. $HOME/.zshenv に、以下の内容を追加する。


MANPAGER="less"
LESS_TERMCAP_mb=$'\E[01;31m' # begin blinking
LESS_TERMCAP_md=$'\E[01;38;5;74m' # begin bold
LESS_TERMCAP_me=$'\E[0m' # end mode
LESS_TERMCAP_so=$'\E[38;5;246m' # begin standout-mode - info box
LESS_TERMCAP_se=$'\E[0m' # end standout-mode
LESS_TERMCAP_us=$'\E[04;38;5;146m' # begin underline
LESS_TERMCAP_ue=$'\E[0m' # end underline

2. 任意のANSIカラーコードを指定する。

この方法の欠点

  • マルチバイト文字を表示する際、表示がおかしくなることがある
  • マルチバイト文字の検索ができない
mostでカラー表示

mostは標準でmanページをカラー表示するため、インストールとmanページャの指定をするだけで良い。

設定手順

  1. mostをインストール
  2. .zshenv に'MANPAGER="most"'を追加する

この方法の欠点

> less風のキーバインドに設定することは可能(参考: ArchWiki - man page)

ターミナル(evilvte)でカラー表示

evilvteの特定のテキストを色付けするオプションを有効にする。

設定手順
1. config.h を編集する。


// #define COLOR_TEXT_BOLD "red"
// #define COLOR_TEXT_DIM "#FFFF00"
// #define COLOR_TEXT_HIGHLIGHTED "green"
の3行をコメントアウトし、それぞれ任意の色を指定する。

2. make install する。

この方法の欠点

  • manページ以外の表示にも、上記の色設定が適用されてしまう





参考サイト

  1. tmux内でコマンドを実行する際に新しいウィンドウやウィンドウを分割して実行する - うどん駆動開発
    http://blog.repl.info/blog/2011/12/03/ssh-with-tmux-and-zsh/
  2. LV Homepage (in Japanese)
    http://www.mt.cs.keio.ac.jp/person/narita/lv/index_ja.html
  3. tmux new-windowで環境変数が読み込まれない件 | Proxima Fermata
    http://blog.larus.jp/?p=583
  4. zsh: 5. Files
    http://zsh.sourceforge.net/Doc/Release/Files.html#Startup_002fShutdown-Files
  5. zshの設定ファイルの読み込み順番のメモ - 目の前には僕らの道がある
    http://masasuzu.hatenablog.jp/entry/20120506/1336286016
  6. man page - ArchWiki
    https://wiki.archlinux.org/index.php/man_page#Colored_man_pages

雑感

  • tmuxの新規ウィンドウ(or 分割ペイン)で実行は、manページだけではなく、色々と応用できそう。
  • > 参考サイト1. には、sshの例も書いてある。
  • less、mostはそれぞれ固有の欠点があるため、日本語環境ではlvが最も適していると思う。

また、ターミナル側でカラー表示にする方法も固有の問題があるため、manページャ側でカラー表示にする方が良さそう。

  • 仮想コンソール上だと、上記の設定を書かなくても、初めからmanページがカラー表示になっている理由がよく分からない。
  • > 元からカラーコードを解釈するようになっているとか??