今更マサラタウンだけどoh-my-zshから脱却した。
全然遅さとか感じていなかったが、Profileしてみるとoh-my-zsh関連がビビるほどの遅延を発生させており、腹がたったからやった。
oh-my-zshを脱却して困ったこと
oh-my-zshを入れていると、色々と勝手に設定ファイルを読み込んでくれる。
なのでoh-my-zshを脱却すると、自分の場合下記のことができなくなった。
- Tab関連
- あいまい検索(大文字小文字無視)
- 補完候補に色
- alias
- ヒストリーの重複削除
- テーマの読み込み
- lsの色
- タブの色
- Gitの表示(クリーンな状態なら✔を、差分があったら✗を表示するなど)
人によっては.zshrcにsetopt XXXX
みたいな形で個別に設定している項目もあるので、人それぞれできなくなることは違う。
上記のことはoh-my-zshが良きに計らってくれていたので、個別に設定する必要がある。今回はそのために設定したことを書いた。
脱却して良かったこと
- tmuxで色がつくようになった
- 起動が速くなった
起動速くなったのが一番かな。短縮したのは0.5秒ぐらいだけど、0.5秒って体感的にこんなに違うんだと思ったよ。
起動だけじゃなくて基本的な動作(lsの表示速度など)も速くなってだいぶノンストレスになった。
oh-my-zsh脱却時の差分
- 脱却のための削除
- export ZSH=/Users/$(whoami)/.oh-my-zsh - ZSH_THEME="avit" - plugins=(git) - source $ZSH/oh-my-zsh.sh
- Tab, aliasなど設定関連を追加
# テーマ読み込み source ~/dotfiles/zsh-my-theme.sh # Tabで選択できるように zstyle ':completion:*:default' menu select=2 # 補完で大文字にもマッチ zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' # ファイル補完候補に色を付ける zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} setopt auto_param_slash # ディレクトリ名の補完で末尾の / を自動的に付加し、次の補完に備える setopt mark_dirs # ファイル名の展開でディレクトリにマッチした場合 末尾に / を付加 setopt auto_menu # 補完キー連打で順に補完候補を自動で補完 setopt interactive_comments # コマンドラインでも # 以降をコメントと見なす setopt magic_equal_subst # コマンドラインの引数で --prefix=/usr などの = 以降でも補完できる setopt complete_in_word # 語の途中でもカーソル位置で補完 setopt print_eight_bit # 日本語ファイル名等8ビットを通す setopt extended_history # record timestamp of command in HISTFILE setopt hist_expire_dups_first # delete duplicates first when HISTFILE size exceeds HISTSIZE setopt share_history # 他のターミナルとヒストリーを共有 setopt histignorealldups # ヒストリーに重複を表示しない setopt hist_save_no_dups # 重複するコマンドが保存されるとき、古い方を削除する。 setopt extended_history # $HISTFILEに時間も記録 setopt print_eight_bit # 日本語ファイル名を表示可能にする setopt hist_ignore_all_dups # 同じコマンドをヒストリに残さない setopt auto_cd # ディレクトリ名だけでcdする setopt no_beep # ビープ音を消す # コマンドを途中まで入力後、historyから絞り込み autoload -Uz history-search-end zle -N history-beginning-search-backward-end history-search-end zle -N history-beginning-search-forward-end history-search-end bindkey "^P" history-beginning-search-backward-end bindkey "^N" history-beginning-search-forward-end alias l='ls -ltrG' alias la='ls -laG' alias ll='ls -lG' alias ls='ls -G' alias grep='grep --color=auto' alias ...='cd ../../' alias his='history -E -i 1 | fzf'
テーマは別ファイルにして読み込んでる(上記のsource ~/dotfiles/zsh-my-theme.sh
)
- テーマファイル zsh-my-theme.sh
export LSCOLORS="dxfxcxdxbxegedabagacad" export LS_COLORS='di=33;:ln=35;40:so=32;40:pi=33;40:ex=31;40:bd=34;46:cd=34;43:su=0;41:sg=0;46:tw=0;42:ow=0;43:' export GREP_COLOR='1;33' # PROMPTテーマ setopt prompt_subst #プロンプト表示する度に変数を展開 local BLACK=$'%{\e[30m%}' local RED=$'%{\e[31m%}' local GREEN=$'%{\e[32m%}' local YELLOW=$'%{\e[33m%}' local BLUE=$'%{\e[34m%}' local PURPLE=$'%{\e[35m%}' local CYAN=$'%{\e[36m%}' local GRAY=$'%{\e[37m%}' local WHITE=$'%{\e[1;37m%}' local DEFAULT=$'%{\e[1;m%}' local RAINBOW=$'%{\e[$[color=$[31+$RANDOM%6]]m%}' PROMPT=" ${CYAN}%~${reset_color} $ " autoload -Uz vcs_info zstyle ':vcs_info:git:*' check-for-changes true # formats 設定項目で %c,%u が使用可 zstyle ':vcs_info:git:*' stagedstr "%F{red}" # commit されていないファイルがある zstyle ':vcs_info:git:*' unstagedstr "%F{red}" # add されていないファイルがある zstyle ':vcs_info:*' formats "%F{green}%b %c%u%m %f" # 通常 zstyle ':vcs_info:*' actionformats '[%b|%a]' # rebase 途中,merge コンフリクト等 formats 外の表示 precmd () { vcs_info } PROMPT=" ${CYAN}%~${reset_color}" PROMPT=$PROMPT' ${vcs_info_msg_0_} ${GRAY}$ ${reset_color}' zstyle ':vcs_info:git+set-message:*' hooks git-is_clean git-untracked # 状態がクリーンか判定 function +vi-git-is_clean(){ if [ -z "$(git status --short 2>/dev/null)" ];then hook_com[misc]+="✔" fi } # unstaged, untrackedの検知 function +vi-git-untracked() { if [ -n "$(git status --porcelain 2>/dev/null)" ]; then hook_com[unstaged]+='%F{red}✗%f' fi }