oh-my-zshで適用したテーマのプロンプトを自分好みに変更する

コンテンツ

結論

通常、プロンプトを変更する場合は、環境変数PROMPTに設定値を入れますが、oh-my-zshではテーマファイルで設定したPROMPTが適用されてしまうため、~/.zshrcexport PROMPT=xxxと書いても反映されません。

oh-my-zshの適用した環境においては、テーマのファイルを編集することで変更できます。

解説

テーマ名を確認

oh-my-zshで適用したテーマ名を設定ファイル~/.zshrcZSH_THEMEで確認します。

ZSH_THEME="pygmalion"

確認時の環境ではpygmalionというテーマを使っています。
これのテーマファイルを編集します。

テーマファイルを編集

テーマファイルは以下のパスに配置されています。
~/.oh-my-zsh/themes/<THEME_NAME>.zsh-theme
当環境ではこのようになります。
~/.oh-my-zsh/themes/pygmalion.zsh-theme

pygmalionでは以下のような設定ファイルとなっています。

# Yay! High voltage and arrows!

prompt_setup_pygmalion(){
  setopt localoptions extendedglob

  ZSH_THEME_GIT_PROMPT_PREFIX="%{$reset_color%}%{$fg[green]%}"
  ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
  ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[yellow]%}⚡%{$reset_color%}"
  ZSH_THEME_GIT_PROMPT_CLEAN=""

  base_prompt='%{$fg[magenta]%}%n%{$reset_color%}%{$fg[cyan]%}@%{$reset_color%}%{$fg[yellow]%}%m%{$reset_color%}%{$fg[red]%}:%{$reset_color%}%{$fg[cyan]%}%0~%{$reset_color%}%{$fg[red]%}|%{$reset_color%}'
  post_prompt='%{$fg[cyan]%}⇒%{$reset_color%}  '

  base_prompt_nocolor=${base_prompt//\%\{[^\}]##\}}
  post_prompt_nocolor=${post_prompt//\%\{[^\}]##\}}

  autoload -U add-zsh-hook
  add-zsh-hook precmd prompt_pygmalion_precmd
}

prompt_pygmalion_precmd(){
  setopt localoptions extendedglob

  local gitinfo=$(git_prompt_info)
  local gitinfo_nocolor=${gitinfo//\%\{[^\}]##\}}
  local exp_nocolor="$(print -P \"$base_prompt_nocolor$gitinfo_nocolor$post_prompt_nocolor\")"
  local prompt_length=${#exp_nocolor}

  PROMPT="${base_prompt}${gitinfo}${post_prompt}"
}

prompt_setup_pygmalion

今回はbase_promptpost_promptを好みの内容に書き換えます。

vi ~/.oh-my-zsh/themes/pygmalion.zsh-theme

なお、他のテーマでは概ね変数名がPROMPTになっていると思われます。
テーマファイルを確認し、PROMPTが設定されている箇所を編集してください。

再読み込み

再度、~/.zshrcを読み込み直し反映されていたら完了です。

$ source ~/.zshrc

参考

関連記事

  1. Gitのリモートリポジトリから特定のファイルを削除する方法

  2. VSCodeでMarkdownをPDFに変換する方法

  3. Git: リモートブランチのチェックアウトで失敗する場合の対処方法

  4. GitHubとSlackを連携: リポジトリの更新情報(issues,…

  5. Seleniumでsession not created: This …

  6. VSCodeでMarkdownでUML(ユースケース図、シーケンス図な…

カテゴリ

アーカイブ