以前書いたzshのプロンプト設定を晒すの改良verです。
autoload -U promptinit
autoload -U colors && colors
# 直前の返り値によって色変更 #
local p_color="%(?.%{${fg[cyan]}%}.%{${fg[magenta]}%})"
# スクリーン番号を(あれば)変数に格納 #
local window_no="${WINDOW:+"[$WINDOW]"}"
PROMPT="
%{$fg[cyan]%}User:%n%{${reset_color}%}
$p_color [%~] > %{${reset_color}%}"
#
# 今回はこのRPROMPTを改良していきます。
#
RPROMPT="$p_color return:[%?]%{${reset_color}%}"
# ちょいメモ
# このちょいメモも改良していきます。
function memo() {RPROMPT="%S$1%s $p_color return:[%?]%{${reset_color}%}";}
# Googleカラーでサジェスト #
setopt correct
SPROMPT="( ´・ω・) < %{$fg[blue]%}も%{${reset_color}%}%{$fg[red]%}し%{${reset_color}%}%{$fg[yellow]%}か%{${reset_color}%}%{$fg[green]%}し%{${reset_color}%}%{$fg[red]%}て%{${reset_color}%}: %{$fg[red]%}%r%{${reset_color}%}? [(y)es,(n)o,(a)bort,(e)dit]
-> "
変更点
・ vcs_infoを使ってgitのリポジトリ情報を表示しました。
・ ちょいメモのメモ内容にスペースを使えるよう改良
#vcs_info
gitやCVSなどのいわゆるバージョン管理システムから情報を取得してくれる便利な関数。
##vcs_infoを使う準備
まず最初にこの __vcs_info__を使うための宣言をします。
autoload -Uz vcs_info
setopt prompt_subst #プロンプト表示する度に変数を展開
これで __vcs_info__を使う準備は出来ました。
ですが実際に呼び出す前に少しカスタマイズしてしまいましょう。
zstyle ':vcs_info:git:*' check-for-changes true
zstyle ':vcs_info:git:*' stagedstr "%F{yellow}!"
zstyle ':vcs_info:git:*' unstagedstr "%F{red}+"
zstyle ':vcs_info:*' formats "%F{green}%c%u[%b]%f"
zstyle ':vcs_info:*' actionformats '[%b|%a]'
-
check-for-changes
__true__または __false__を指定(デフォルトは false)。
__true__にすると _formats_という項目で%c
と%u
というフォーマットが使えるようになる。これは、リポジトリにコミットされていないファイルがあった場合に%c
または%u
に文字列が格納される。 -
stagedstr
ステージされていてコミットされていない(git addだけされてる)ファイルがあった場合、 _formats_の設定に%c
があれば、ここで指定した文字列が表示されます。
私の場合は黄色で+
が表示されるようにしています。 -
unstagedstr
ステージされていない(git addされていない)変更ファイルがあった場合、 formats の設定に%u
があれば、ここで指定した文字列が表示されます。
私の場合は赤色で!
が表示されるようにしています。 -
formats
$vcs_info_msg_0_
で表示する内容をここに指定します。 -
actionformats
_merge_でコンフリクトが起きたり、何かしら特殊な状況になった場合に _formats_の代わりに _actionformats_で指定した文字列が$vcs_info_msg_0_
に格納される。
変数 | 変数の説明 |
---|---|
%c | ステージされていてコミットされていない(git addだけされている)ファイルがあった場合、 stagedstr で指定した文字列に展開されます。ない場合は空です。 |
%u | ステージされていない(git addされていない)変更ファイルがあった場合、 unstagedstr で指定した文字列に展開されます。ない場合は空です。 |
%b | カレントブランチ名 |
$vcs_info_msg_0_ | 通常メッセージが格納される。 |
$vcs_info_msg_1_ | 警告メッセージが格納される。 |
$vcs_info_msg_2_ | エラーメッセージが格納される。 |
##vcs_infoを呼び出す
カスタマイズが無事終わったので、 __vcs_info__を呼び出しましょう。
precmd(){ vcs_info }
precmd
という関数はzshのプロンプトが表示される度に実行される関数で、この関数の中で呼び出すことによって何かコマンドを叩く度に __vcs_info__が情報を取得してきてくれます。
##実際にRPROMPTにリポジトリ情報を表示する。
RPROMPT='${vcs_info_msg_0_}'"$p_color return:[%?]%{${reset_color}%}"
#ちょいメモ改良ver
以前の書き方ではメモにスペースを入れられませんでした。初めはホントにちょっとした一言を一時的にメモしておくだけのつもりなのでスルーしていましたが、実際に使ってみると、「豚肉 もやし」みたいな感じにメモしたい事があったので改良しました。
function memo(){
if[ $# -eq 0]; then
unset memotxt
return
fi
for str in $@
do
memotxt="${memotxt} ${str}"
done
}
以前と同様にメモを消すときは引数なしで
$ memo
とすれば消えます。
#vcs_info + ちょいメモ
リポジトリ情報とちょいメモを合体させたプロンプトの書き方です。
今回変更したのは __RPROMPT__だけですのでそれ以外の部分は前回のまま流用で大丈夫です。
autoload -Uz vcs_info
setopt prompt_subst
zstyle ':vcs_info:git:*' check-for-changes true
zstyle ':vcs_info:git:*' stagedstr "%F{yellow}!"
zstyle ':vcs_info:git:*' unstagedstr "%F{red}+"
zstyle ':vcs_info:*' formats "%F{green}%c%u[%b]%f"
zstyle ':vcs_info:*' actionformats '[%b|%a]'
precmd(){ vcs_info }
function memo(){
if[ $# -eq 0]; then
unset memotxt
return
fi
for str in $@
do
memotxt="${memotxt} ${str}"
done
}
RPROMPT='${memotxt}''${vcs_info_msg_0_}'"$p_color return:[%?]%{${reset_color}%}"
リポジトリ情報は、バージョン管理システムで管理しているディレクトリを抜けると表示が消えます。