アンケートご協力のお願いgihyo.jpでは,2010年度に向けて豪華プレゼントが当たる読者属性アンケートを実施しております。ご協力ください。

gihyo.jp » DEVELOPER STAGE » 連載 » zshで究極のオペレーションを » 第3回 zsh使いこなしポイント即効編

zshで究極のオペレーションを

第3回 zsh使いこなしポイント即効編

zshを使い始めて最初に気になる点のうち,すぐに設定してすぐに効果を実感できる即効薬的なものを今回は紹介しよう。

プロンプト

これまでとは違うシェルを起動してまず目にするのがプロンプトで,これが変わるとちょっとした違和感がある。この違和感は結構大切でスーパーユーザに切り替えたり,あまり設定していないマシンを触っていたりということが実感できるので慎重に作業を進めるきっかけに利用できる。

zshに乗り換えたときもそうした違和感を感じ,それまでのシェルと似たものにしたくなるかもしれないが,ちょっとした違和感を保ってこれまでとは違う機能をたくさん利用するのだ,という心構えにしたらどうだろうか。心構えはともかくとして,プロンプト出力にもzshの細やかな配慮があるので,それを活かさないのは損である。

その機能をフルに活かしている,とまでは行かないが,筆者の ~/.zshrc のプロンプト設定部分は概ね以下のようになっている。

nprom () {
    setopt prompt_subst
    local rbase=$'%{\e[33m%}[%~]%{\e[m%}' lf=$'\n'
    local pct=$'%0(?||%18(?||%{\e[31m%}))%#%{\e[m%}'
    RPROMPT="%9(~||$rbase)"
    case "$USER" in
      yatex)	PROMPT=$'%{\e[33m%}%U%m{%n}%%%{\e[m%}%u ' ;;
      java)	PROMPT=$'%{\e[36m%}%U%m{%n}%%%{\e[m%}%u ' ;;
      *)
    local pbase=$'%{\e[$[32+RANDOM%5]m%}%U%B%m{%n}%b'"$pct%u "
    PROMPT="%9(~|$rbase$lf|)$pbase"
    ;;
    esac
    [[ "$TERM" = "screen" ]] && RPROMPT="[%U%~%u]"
}
nprom

複雑に見えるが,見た目は第2回で示したサンプルzshrcにあるPROMPT='%m{%n}%% 'およびRPROMPT='[%~]'と基本的に同じである。これにちょっとした味付けを行なっている。この設定にしたときの端末で操作した様子を模したものをまず示そう。

firestorm{yuuji}%                                                       [~]
firestorm{yuuji}%                                                       [~]
firestorm{yuuji}% ls /usr                                               [~]
X11R6/         include/       local/         share/         tools.i386/
X11R7/         lib/           lost+found/    spool/         x11r6.tar.gz
bin/           libdata/       mdec/          src/           xsrc/
emul/          libexec/       pkg/           tests/
games/         lkm/           sbin/          tmp/
firestorm{yuuji}% ls /usr/hoge                                          [~]
ls: /usr/hoge: No such file or directory
firestorm{yuuji}%                                                       [~]

firestorm{yuuji}% cd /usr/src/external/bsd/openldap/dist/servers/slapd  [~]
firestorm{yuuji}%       [/usr/src/external/bsd/openldap/dist/servers/slapd]
firestorm{yuuji}% cd back-bdb
[/usr/src/external/bsd/openldap/dist/servers/slapd/back-bdb]
firestorm{yuuji}%

要点を示すと以下のようになる。

プロンプトに色付け

コマンドの出力が多くてさかのぼって見るときなど,その出力がどこから始まっているのか判別しやすいよう太字にして色を付けている。

プロンプト文字列に文字属性を変えるエスケープシーケンスを%{%}で括って入れておけばよい。エスケープシーケンス先頭のESC文字は,zshでは$'…'でクォートした\eで表現できる。

数式展開

以前遊びで入れた設定で「zshっぽく見える」効果しかないが,zshでは数値演算や乱数生成ができるので色をランダムで変えている。数式展開ほか,さまざまな展開をプロンプト文字列に対して施したい場合にはsetoptでシェルオプションprompt_substを有効化しておく。

右プロンプト

右側のプロンプト(RPROMPT)に現在ディレクトリを出しておく。あまりに階層が深くなった場合は右に出すのをやめて2行にする。これを切り替えているのが %n(~|string1|string2) という記法で,スラッシュ区切りがn個以上の場合に string1 を,そうでないときに string2 を設定する。上記設定例では,PROMPTRPROMPTともにn=9での場合分けを行ない,スラッシュが9個未満のときは右プロンプト,9個以上のときは左プロンプトに改行つきでパス名を出すようにしている。

エラーの明示

直前に実行したコマンドが正常終了せず,終了値($?)が0以外になったときはプロンプト末尾の%を赤にしている。ただし,あるプロセス起動中C-zを押しsuspendしてコマンドラインに戻った直後は$?=18となるが,suspend直後は赤でないほうがいいので$?=18 の場合も赤くしないよう除外している。

この切り替えは %n(?|string1|string2) の記法で行なう。終了値がnのときはstring1を,そうでないときはstring2 を出力する。

なお,起動したコマンドがエラー終了したかを知るにはシェルオプションprint_exit_valueをセットしておくのも効果的で,この場合はエラー終了したときのみ,その終了値を出力してくれる。

筆者個人の設定ではカラフルにしているが,スーパーユーザのプロンプトはシンプルにしている。

RPROMPT='(%~)'
PROMPT=$'%B%m%b:%?:%# '

スーパーユーザでは色を付けず一般ユーザ時と違うことを意識させつつ,太字にして過去のプロンプト位置を探しやすくしている。%?は直前のコマンドの終了コードの値をそのまま出す表記である。

ここまでの例にあるように,プロンプト文字列では%で始まる記法を様々な文字列に展開する。代表的なものを下記に示しておく。

記法意味
%%%文字自身
%#一般ユーザなら %,スーパユーザなら #
%ltty名
%Mホスト名(全部)
%mホスト名(最初のドットまで)
%nユーザ名
%?直前のコマンドの終了値($?)
%/カレントディレクトリ
%~同上。ただし~記号などで可能な限り短縮する
%!ヒストリ中のイベント番号
%D{FMT}strftime(3)関数にFMTの書式を渡したときの現在時刻の文字列
%B太字開始
%b太字解除
%U下線開始
%u下線解除
%S強調開始
%s強調解除
%{%}生のエスケープシーケンスを挟む
%n>string> 以降のプロンプト文字列の最大長をn文字以下に後略表記する。省略を示す文字列としてstringを使う。
%n<string< 以降のプロンプト文字列の最大長をn文字以下に前略表記する。省略を示す文字列としてstringを使う。

最後の%n<string<は,プロンプトに%~などを設定してパス名を出しているときに,階層が深くてプロンプトが長くなるのを回避するもうひとつの方法として利用できる。

たとえば,以下のようにしてみる。

RPROMPT='[%39<...<%~]'

すると,最初の [ の次の文字,つまり %~] によって出される文字列が39文字を超える場合は先頭部分を切り詰めて `...' に変わる。

duke{yuuji}% pwd                                                  [~]
duke{yuuji}%                                                      [~]
duke{yuuji}% cd /usr/src/sys/arch/amd64/compile/DUKE              [~]
duke{yuuji}%                   [/usr/src/sys/arch/amd64/compile/DUKE]
duke{yuuji}% cd lib          [...src/sys/arch/amd64/compile/DUKE/lib]

プロンプト中の%記法には,%の直後に整数を付加して,個数や回数・長さを指定できるものもある。

著者プロフィール

広瀬雄二(ひろせゆうじ)

1968年,山梨県塩山市(現甲州市)生まれ。慶應義塾大学理工学研究科(管理工学専攻)から慶應義塾大学インフォメーションテクノロジーセンターを経て,東北公益文科大学(山形県酒田市)へ。

必修科目として教えているRubyで,学生によるグループ作成プログラムの質が年々上がっていることにゆとり教育の恩恵を感じている。今年の学生も粒ぞろいで満足だが,この状態があと何年続くか気がかり。

URLhttp://www.gentei.org/~yuuji/

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

読むウェブ ~本とインタラクション

ディスプレイで読む活字とそのインタラクション(interaction:相互作用)について,最新Webを紹介しながら読み解いていく。

いま,見ておきたいウェブサイト

この連載では,国内外の最新のウェブサイトを隔週更新で取り上げ,これら最新サイトの特徴や素晴らしい部分を,さまざまな角度から解説していきます。

Windows phoneアプリケーション開発入門

Windows Marcketplace for Mobileがサービス開始され,作成したアプリケーションを個人でも世界をターゲットに公開できる環境が整ってきました。これを機にWindows phoneアプリケーションの開発をしてみませんか?

ここは知っておくべき!Windows Server 2008技術TIPS

5年ぶりのサーバOSとなったWindows Server 2008が出荷されて早2年。2009年にはR2が出荷され,再び注目を集めています。発売前から実施したトレーニングによって感じた,インフラエンジニアの方々に知っておいていただきたい機能を中心にご紹介します。

キーパーソンが見るWeb業界

本連載はWeb Site Expert/gihyo.jpとの連動企画です。阿部淳也, 長谷川敦士, 森田雄のお三方による,Web業界をテーマにした座談会です。

きたみりゅうじの聞かせて珍プレー

ソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。みなさんからの投稿もお待ちしてます!

ActionScript 3.0で始めるオブジェクト指向スクリプティング

野中文雄氏が,簡単なスクリプトは書いたことがあるという初級者を対象に,ActionScript 3.0の基本からクラス定義までを解説します。

まだ間に合う「ITパスポート」受験対策 原山先生の短期合格塾

この連載では,4月18日のITパスポート試験の受験に向けて,短い期間で効率良く受験対策を行う方法や,確実に得点するための裏ワザなどを伝授していきます。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス