19
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

zshのプロンプト設定-改良ver-

Last updated at Posted at 2015-09-05

以前書いたzshのプロンプト設定を晒すの改良verです。

以前の.zshrc
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にリポジトリ情報を表示する。

.zshrc
RPROMPT='${vcs_info_msg_0_}'"$p_color return:[%?]%{${reset_color}%}"

#ちょいメモ改良ver
以前の書き方ではメモにスペースを入れられませんでした。初めはホントにちょっとした一言を一時的にメモしておくだけのつもりなのでスルーしていましたが、実際に使ってみると、「豚肉 もやし」みたいな感じにメモしたい事があったので改良しました。

.zshrc
function memo(){
	if[ $# -eq 0]; then
		unset memotxt
		return
	fi
	for str in $@
	do
	memotxt="${memotxt} ${str}"
	done
}

以前と同様にメモを消すときは引数なしで
$ memo
とすれば消えます。

#vcs_info + ちょいメモ
リポジトリ情報とちょいメモを合体させたプロンプトの書き方です。
今回変更したのは __RPROMPT__だけですのでそれ以外の部分は前回のまま流用で大丈夫です。

.zshrc
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}%}"

scsh.png

リポジトリ情報は、バージョン管理システムで管理しているディレクトリを抜けると表示が消えます。

19
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?