プラグインを入れずにカスタマイズをする。
基本
まず、プロンプトのカスタマイズは .zshrc
などで PROMPT
などに値を代入することで行える。
試しに、
# .zshrc
PROMPT="$"
とすると、
のようになり、またさらに以下のようにすると、
# .zshrc
PROMPT="$"
RPROMPT="///"
となる(左に ///
が追加された)。
僕のプロンプト
僕はできる限りシンプルにしたかったので、以下のような見た目になっている。
(普段はこれに tmux を起動して、その他の情報を載せてたりする)
これの設定ファイルは下に折りたたんだ。この説明は最後で行う。
設定ファイル
left-prompt() {
local dir="%F{11}%~%f"
local next="%F{47}❯%f "
echo -e "\n${user}${dir}\n${next}"
}
right-prompt() {
local time="%F{242}%T%f"
echo "${time}"
}
PROMPT=`left-prompt`
RPROMPT=`right-prompt`
unset -f left-prompt
unset -f right-prompt
情報の追加
現在のディレクトリと時間を表示するためには %~
と %T
を用いると表示できる。
例えば、
PROMPT="%~ > "
RPROMPT="%T"
とすると、
のようになる。
下の表はhttps://tegetegekibaru.blogspot.com/2012/08/zsh_2.htmlより、そのままコピペさせていただいた。上の例のようにパラメータを PROMPT
などに渡せば良い。
パラメータ | 出力内容 | 例 |
---|---|---|
%M | ホスト名 | localhost.localdomain |
%m | ホスト名 | localhost |
%n | ユーザ名 | root |
%# | ユーザ種別 | #(root の場合) %(root 以外) |
%y | ログイン端末名 | pts/0 |
%l | ログイン端末名 | pst/0(tty*の場合は tty を省略) |
%? | 直前のコマンドの戻り値 | 0 |
%h %! | コマンド実行数 (history 数) | 1 |
%d %/ | カレントディレクトリ | /root/currentdir |
%~ | カレントディレクトリ | ~/currentdir |
%C | カレントディレクトリ | currentdir |
%c %. | カレントディレクトリ | currentdir ($PWD=$HOME の場合は~) |
%D | 日付 | 12-07-31 (yy-mm-dd) |
%W | 日付 | 07/31/12 (mm/dd/yy) |
%w | 日付 | Sun 31 (day dd) |
%* | 時間 | 15:50:30 (hh:mm:ss) |
%T | 時間 | 15:50 (hh:mm) |
%t %@ | 時間 | 03:50PM (hh:mm(am/pm format)) |
装飾
ただの白文字ではつまらないので装飾したい。
色
%F{色番号}色をつける内容%f
とすると色がつけられる。
つまり %F
と %fで
囲われたところに色がつく。色はターミナルの 256 色(0~255)で指定する。
例えば、
PROMPT="%F{45}%~%f > "
とすると、
色番号の一覧は次の ruby スクリプトを実行することで見ることができる。(このスクリプトは数年前にどっかで拾った)
# -*- coding: utf-8 -*-
@fg = "\x1b[38;5;"
@bg = "\x1b[48;5;"
@rs = "\x1b[0m"
def color(code)
number = '%3d' % code
"#{@bg}#{code}m #{number}#{@rs}#{@fg}#{code}m #{number}#{@rs} "
end
256.times do |n|
print color(n)
print "\n" if (n + 1).modulo(8).zero?
end
print "\n"
太文字
%B
と %b
で囲う。
下線
%U
と %u
で囲う。
背景色
%S%F
と %f%s
で囲う。(%S
と %s
をつける)
わかりやすく設定する
エスケープ文字を使って PROMPT を設定するの読みにくい。
変数や関数を用いてわかりやすくすると良いと思う。
僕の設定を再掲する。
local
をつけると変数のスコープを制限できるので zsh が汚れず良い。
left-prompt()
と right-prompt()
の関数を用いることで PROMPT
, RPROMPT
の意味がわかりやすくなる。
関数の返り値の扱いは echo
と `function`
を使ってる人がいたので真似した(あってるの?)
left-prompt() {
local dir="%F{11}%~%f"
local next="%F{47}❯%f "
echo -e "\n${user}${dir}\n${next}"
}
right-prompt() {
local time="%F{242}%T%f"
echo "${time}"
}
PROMPT=`left-prompt`
RPROMPT=`right-prompt`
unset -f left-prompt
unset -f right-prompt
関数の宣言もスクリプトローカルにしたかったのだけど、やり方がわからなかった。
ひとまず最後に unset
するとこで同じ結果は得られるのでそうした。