はじめに
今回はmacOSにおけるターミナルとzshプロンプトのカスタマイズ方法についてまとめる。※本記事はすべて個人の好みです。
環境情報
macOS Big Sur バージョン 11.6.2
Before→After
なんということでしょう
Before
After
用語の解説
※引用元: シェルの概念と機能
カーネルとは:
CPUやメモリなどのハードウェアを管理するとともに、コマンド実行を処理するプロセス管理も行なっているOSの中核となる部分のこと。直接ユーザがカーネルを操作することはできないため、操作する際はユーザとカーネルを仲介するインターフェースであるシェルが必要になる。
シェルとは:
カーネルのインターフェースとなっているソフトウェアのこと。ユーザから見てカーネルの周りを覆っている「殻」(shell) のように見えることからシェルと呼ばれるが、実際はユーザとカーネルのメッセンジャーのような働きをする。シェルの種類として、bash
, dash
, zsh
などがある。
ターミナルとは:
昔は「ユーザがコンピュータへ入出力する際に利用する専用のハードウェア」の意味で用いられていたが、現在では、物理的なターミナルをソフトウェアによって実装したターミナルエミュレータの意図で用いられることが多い。ターミナルエミュレータは入出力のための画面を提供するソフトウェアであり、OSごとに多くのターミナルエミュレータが開発されている。 ターミナルエミュレータという画面の中で、カーネルのインターフェースであるシェルが動いており、両者は全く異なるソフトウェアである点に注意する。
OS | ターミナルエミュレータ例 |
---|---|
Windows | PuTTY, Tera Term |
macOS | ターミナル, iTerm2 |
Linux | Konsole |
プロンプトとは:
シェルが表示している「コマンド入力待ち状態であることを表す記号」のこと。
カスタマイズ方法
以下4箇所のカスタマイズを行う。
- ターミナルのテーマをIcebergに変更
- フォントをMenlo 14ppに変更
- プロンプトの変更
- zshプラグインの追加
1. ターミナルのテーマをIcebergに変更
(1) 公式ページからIcebergをダウンロードする
cocopon.github.io
(2) ダウンロードしたプロファイルを読み込み、デフォルトプロファイルに設定する
※ちなみに「ターミナルは半透明の方がクールだ説」があるが、見にくかったので今回は不採用。もし設定したければ、「ターミナル > 環境設定 > プロファイル」から背景の「カラーとエフェクト」で設定可能。
2. フォントをMenlo 14ppに変更
(1) プロファイル設定画面からフォントの変更を押下する
(2) フォントをMenloに変更し、サイズを14に設定する
3. プロンプトの変更
(1) .zshrcプロファイル
を作成する
touch ~/.zshrc
(2) .zshrcプロファイル
を開く
cd ~
vim .zshrc
(3) 以下を.zshrcプロファイル
にコピペする
※引用元: macOSマシンを購入した際に最初にやるセットアップまとめ【エンジニア向け?】 | HIRO LAB BLOG
# License : MIT # http://mollifier.mit-license.org/ ######################################## # 環境変数 export LANG=ja_JP.UTF-8 # 色を使用出来るようにする autoload -Uz colors colors # emacs 風キーバインドにする bindkey -e # ヒストリの設定 HISTFILE=~/.zsh_history HISTSIZE=1000000 SAVEHIST=1000000 # 改変箇所_1 # 時間表記の追加 setopt extended_history alias history='history -t "%F %T"' # プロンプト # 1行表示 # PROMPT="%~ %# " # 改変箇所_2 PROMPT="%{${fg[blue]}%}%n:%{${reset_color}%} %c/ %# " # 2行表示 # PROMPT="%{${fg[green]}%}[%n@%m]%{${reset_color}%} %~ # %# " # 改変箇所_3 # 出力の後に改行を入れる function add_line { if [[ -z "${PS1_NEWLINE_LOGIN}" ]]; then PS1_NEWLINE_LOGIN=true else printf '\n' fi } PROMPT_COMMAND='add_line' # 単語の区切り文字を指定する autoload -Uz select-word-style select-word-style default # ここで指定した文字は単語区切りとみなされる # / も区切りと扱うので、^W でディレクトリ1つ分を削除できる zstyle ':zle:*' word-chars " /=;@:{},|" zstyle ':zle:*' word-style unspecified ######################################## # 補完 # 補完機能を有効にする autoload -Uz compinit compinit # 補完で小文字でも大文字にマッチさせる zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' # ../ の後は今いるディレクトリを補完しない zstyle ':completion:*' ignore-parents parent pwd .. # sudo の後ろでコマンド名を補完する zstyle ':completion:*:sudo:*' command-path /usr/local/sbin /usr/local/bin \ /usr/sbin /usr/bin /sbin /bin /usr/X11R6/bin # ps コマンドのプロセス名補完 zstyle ':completion:*:processes' command 'ps x -o pid,s,args' ######################################## # vcs_info autoload -Uz vcs_info autoload -Uz add-zsh-hook zstyle ':vcs_info:*' formats '%F{green}(%s)-[%b]%f' zstyle ':vcs_info:*' actionformats '%F{red}(%s)-[%b|%a]%f' function _update_vcs_info_msg() { LANG=en_US.UTF-8 vcs_info RPROMPT="${vcs_info_msg_0_}" } add-zsh-hook precmd _update_vcs_info_msg ######################################## # オプション # 日本語ファイル名を表示可能にする setopt print_eight_bit # beep を無効にする setopt no_beep # フローコントロールを無効にする setopt no_flow_control # Ctrl+Dでzshを終了しない setopt ignore_eof # '#' 以降をコメントとして扱う setopt interactive_comments # ディレクトリ名だけでcdする setopt auto_cd # cd したら自動的にpushdする setopt auto_pushd # 重複したディレクトリを追加しない setopt pushd_ignore_dups # 同時に起動したzshの間でヒストリを共有する setopt share_history # 同じコマンドをヒストリに残さない setopt hist_ignore_all_dups # スペースから始まるコマンド行はヒストリに残さない setopt hist_ignore_space # ヒストリに保存するときに余分なスペースを削除する setopt hist_reduce_blanks # 高機能なワイルドカード展開を使用する setopt extended_glob ######################################## # キーバインド # ^R で履歴検索をするときに * でワイルドカードを使用出来るようにする bindkey '^R' history-incremental-pattern-search-backward ######################################## # エイリアス alias la='ls -a' alias ll='ls -l' alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' alias mkdir='mkdir -p' # sudo の後のコマンドでエイリアスを有効にする alias sudo='sudo ' # グローバルエイリアス alias -g L='| less' alias -g G='| grep' # C で標準出力をクリップボードにコピーする # mollifier delta blog : http://mollifier.hatenablog.com/entry/20100317/p1 if which pbcopy >/dev/null 2>&1 ; then # Mac alias -g C='| pbcopy' elif which xsel >/dev/null 2>&1 ; then # Linux alias -g C='| xsel --input --clipboard' elif which putclip >/dev/null 2>&1 ; then # Cygwin alias -g C='| putclip' fi ######################################## # OS 別の設定 case ${OSTYPE} in darwin*) #Mac用の設定 export CLICOLOR=1 alias ls='ls -G -F' ;; linux*) #Linux用の設定 alias ls='ls -F --color=auto' ;; esac # vim:set ft=zsh:
記事元から以下の3箇所を追記/変更している。
・ヒストリーコマンドに時間表記の追加
setopt extended_history alias history='history -t "%F %T"'
・プロンプト表示の変更
表示形式: <ユーザ名>:<カレントディレクトリ(相対パス)><ユーザ種別>
※ユーザ種別: #(root), %(root以外)
PROMPT="%{${fg[blue]}%}%n:%{${reset_color}%} %c/ %# "
・結果出力後に改行を追加
function add_line { if [[ -z "${PS1_NEWLINE_LOGIN}" ]]; then PS1_NEWLINE_LOGIN=true else printf '\n' fi } PROMPT_COMMAND='add_line'
4. zshプラグインの追加
実用性を高めるためにzshプラグインを追加する
コマンド補完: zsh-autosuggestions, zsh-completions, spaceship-prompt
syntax highlight: zsh-syntax-highlighting
history補完: zsh-history-substring-search
(1) .zshrcプロファイル
を開く
cd ~
vim .zshrc
(2) 以下を.zshrcプロファイル
にコピペする
#============================= # source zsh-syntax-highlighting #============================= if [ -f ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ]; then source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh fi #============================= # source zsh-autosuggestions #============================= if [ -f ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh ]; then source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh fi #============================= # source zsh-completions #============================= if [ -f ~/.zsh/zsh-completions/zsh-completions.zsh ]; then source ~/.zsh/zsh-completions/zsh-completions.zsh fi #============================= # source zsh-history-substring-search #============================= if [ -f ~/.zsh/zsh-history-substring-search/zsh-history-substring-search.zsh ]; then source ~/.zsh/zsh-history-substring-search/zsh-history-substring-search.zsh fi #============================= # source spaceship-prompt #============================= if [ -f ~/.zsh/spaceship-prompt/spaceship-prompt.zsh ]; then source ~/.zsh/spaceship-prompt/spaceship-prompt.zsh fi
まとめ
今回はmacOSにおけるターミナルとzshプロンプトのカスタマイズ方法についてまとめた。ターミナルとプロンプトをカスタマイズするとテンションも上がるので、ぜひやってみてください。