preztoのsorinテーマをカスタマイズする
もう2018年も残すところあと3日となりました。今回はpreztoのsorinテーマをちょっとだけ変更してzshのプロンプトを自分好みにカスタマイズする話です。
preztoとは
preztoはzshの設定を管理するためのフレームワークです。zshの設定を自分でいろいろ便利にしようとすると設定ファイルが複雑化して管理しずらくなりますが、 preztoは機能をmoduleという単位で設定・追加する仕組みを提供してくれるため、zshの設定ファイルを簡潔な状態に保つことができます。また、あらかじめ用意されている機能の一つとして、プロンプトのデザインを変更するtheme機能があり、幾つか用意されているテーマの中から好みのものを選んでプロンプトのデザインを変更することができます。
sorinテーマ
私が一番好きなテーマはsorin
というやつで、↓の画像に示すようにシンプルなデザインとなっています。一番左端にワーキングディレクトリのパスが省略された形式で表示され、右端にgitの情報が表示されています。
このままでもまぁ良いのですが、使っていると気になるところが出てきました。それは、gitの情報が右端に表示されるという点です。ターミナルで作業している時、基本的に視線は左側にあるプロンプトの方を向いていると思います。そのため、右端に何か情報が表示されると大幅な視線移動が発生して、すごくストレスになるということがわかりました。そこで、右端に表示されるgitの情報を左側に表示するようにpreztoのコードを変更しようと思います。
prompt_sorin_setupの変更
調べてみると、sorinテーマを実際に表示しているコードは prezto/modules/functions/prompt_sorin_setup であることがわかりました。 これを以下のように変更します。
--- a/modules/prompt/functions/prompt_sorin_setup +++ b/modules/prompt/functions/prompt_sorin_setup @@ -50,7 +50,7 @@ function prompt_sorin_async_callback { fi else # Git target detected, update the git fragment and redisplay the prompt. - _prompt_sorin_git="${_git_target}${_git_post_target}" + _prompt_sorin_git=" ${_git_target}${_git_post_target}" zle && zle reset-prompt fi ;; @@ -161,10 +161,10 @@ function prompt_sorin_setup { _prompt_sorin_pwd='' # Define prompts. - PROMPT='${SSH_TTY:+"%F{9}%n%f%F{7}@%f%F{3}%m%f "}%F{4}${_prompt_sorin_pwd}%(!. %B%F{1}#%f%b.)${editor_info[keymap]} ' + PROMPT='${SSH_TTY:+"%F{9}%n%f%F{7}@%f%F{3}%m%f "}%F{4}${_prompt_sorin_pwd}${_prompt_sorin_git}%(!. %B%F{1}#%f%b.)${editor_info[keymap]} ' RPROMPT='$python_info[virtualenv]${editor_info[overwrite]}%(?:: %F{1}' RPROMPT+=${show_return} - RPROMPT+='%f)${VIM:+" %B%F{6}V%f%b"}${_prompt_sorin_git}' + RPROMPT+='%f)${VIM:+" %B%F{6}V%f%b"}' SPROMPT='zsh: correct %F{1}%R%f to %F{2}%r%f [nyae]? ' }
ちょっとした解説
PROMPT
: 左側のプロンプトに表示される文字列が格納されている変数RPROMPT
: 右端に表示される文字列が格納されている変数_prompt_sorin_git
: gitの情報を表す文字列が格納されている変数
コードを見ると、RPROMPT
の中に_prompt_sorin_git
が埋め込まれていることがわかります。従って、RPROMPT
の中から_prompt_sorin_git
を消してPROMPT
の中に移すことで、左側にgitの情報を表示させることができます。
できた
良い感じ
おわり。