Oh My Zshの処理を見てみる(4) : libディレクトリの中身
- libディレクトリの中身
- bzr.sh
- clipboard.zsh
- compfix.zsh
- completion.zsh
- correction.zsh
- diagnostics.zsh
- directories.zsh
- functions.zsh
- git.zsh
- grep.zsh
- history.zsh
- key-bindings.zsh
- misc.zsh
- nvm.zsh
- prompt_info_functions.zsh
- spectrum.zsh
- termsupport.zsh
- theme-and-appearance.zsh
libディレクトリの中身
ファイル名 | 説明 |
---|---|
bzr.zsh | バージョン管理システムBazaarの情報表示 |
clipboard.zsh | システムクリップボード操作 |
compfix.zsh | 補完に関する設定 |
completion.zsh | 補完に関する設定 |
correction.zsh | コマンド訂正機能の設定 |
diagnostics.zsh | デバッグ用にファイルをダンプする関数 |
directories.zsh | ディレクトリ操作の設定 |
functions.zsh | 色々な関数を定義 |
git.zsh | Gitの情報表示 |
grep.zsh | grepコマンドの設定 |
history.zsh | historyコマンドの設定 |
key-bindings.zsh | キーバインドの設定 |
misc.zsh | 種々雑多な設定 |
nvm.zsh | nvmの情報表示 |
prompt_info_functions.zsh | ∗_prompt_infoのダミー関数定義 |
spectrum.zsh | 256色を試しに表示する関数 |
termsupport.zsh | ターミナルウィンドウのタイトル設定 |
theme-and-appearance.zsh | テーマ関連など主に見た目に関する設定 |
bzr.sh
バージョン管理システムBazaar用の関数を定義しており、PROMPT
に$(bzr_prompt_info)
を指定すればDirtyかどうかを表示できるようになる(Gitの場合の$(git_prompt_info)
と同じ)。
clipboard.zsh
システムのクリップボードを操作できるようにするclipcopy
とclippaste
関数を定義している。
使い方は以下の通りで、実際にはMacだとpbcopy
とpbpaste
、Cygwinだと/dev/clipboard
、Linuxだとxclip/xsel
を使用している。
# clipcopy - Copy data to clipboard # Usage: # <command> | clipcopy - copies stdin to clipboard # clipcopy <file> - copies a file's contents to clipboard
# clippaste - "Paste" data from clipboard to stdout # Usage: # clippaste - writes clipboard's contents to stdout # clippaste | <command> - pastes contents and pipes it to another process # clippaste > <file> - paste contents to a file
correction.zsh
~/.zshrc
でENABLE_CORRECTION="true"
を有効にした場合のコマンド訂正機能の設定をしている。訂正がおせっかいになりそうなコマンドにはnocorrect
が設定されている。
if [[ "$ENABLE_CORRECTION" == "true" ]]; then alias ebuild='nocorrect ebuild' alias gist='nocorrect gist' alias heroku='nocorrect heroku' alias hpodder='nocorrect hpodder' alias man='nocorrect man' alias mkdir='nocorrect mkdir' alias mv='nocorrect mv' alias mysql='nocorrect mysql' alias sudo='nocorrect sudo' setopt correct_all fi
diagnostics.zsh
Zsh、Oh My Zshに関連する設定をダンプするomz_diagnostic_dump
関数を定義している。開発者がデバッグするために必要な情報をダンプするのが目的のようだが、ユーザ名などの情報も含まれているため渡すときは注意。
$ omz_diagnostic_dump Generating diagnostic dump; please be patient... Diagnostic dump file created at: omz_diagdump_20160920-223532.txt To share this with OMZ developers, post it as a gist on GitHub at https://gist.github.com and share the link to the gist. WARNING: This dump file contains all your zsh and omz configuration files, so don't share it publicly if there's sensitive information in them.
directories.zsh
ディレクトリ操作に関するエイリアスを設定している。またそれに伴いディレクトリスタックのオプションを設定している。
例えばd
コマンドを実行すると最近使ったディレクトリが表示されるので移動したいディレクトリの番号を入力して実行すれば移動できる(下記例の場合は4
を実行すれば~/dir1
に移動)。この辺の設定はここのチートシートにまとめられている。
$ d 0 ~/dir1-2 1 ~/dir1-1 2 ~/dir3 3 ~/dir2 4 ~/dir1 5 ~
alias -g
の-g
はグローバルエイリアスというものでコマンドの先頭以外でも展開する場合に必要となる。-g
がないとcd ...
とした場合に展開されないので、../..
ではなく...
に移動しようとする。
# Changing/making/removing directory setopt auto_pushd setopt pushd_ignore_dups setopt pushdminus alias -g ...='../..' alias -g ....='../../..' alias -g .....='../../../..' alias -g ......='../../../../..' alias -- -='cd -' alias 1='cd -' alias 2='cd -2' alias 3='cd -3' alias 4='cd -4' alias 5='cd -5' alias 6='cd -6' alias 7='cd -7' alias 8='cd -8' alias 9='cd -9' alias md='mkdir -p' alias rd=rmdir alias d='dirs -v | head -10' # List directory contents alias lsa='ls -lah' alias l='ls -lah' alias ll='ls -lh' alias la='ls -lAh' # Push and pop directories on directory stack alias pu='pushd' alias po='popd'
functions.zsh
ここでは複数の関数を定義している。
zsh_stats
は今までに使用したコマンド上位20位を表示する。
$ zsh_stats 1 549 11.0042% less 2 344 6.89517% cd 3 308 6.17358% ls 4 305 6.11345% mv 5 224 4.48988% rm …(省略)
Oh My Zshをアンインストールまたは手動アップグレードしたい場合に実行する。
$ uninstall_oh_my_zsh $ upgrade_oh_my_zsh
take
はディレクトリを作成して移動する(which
で関数の定義が確認できる)。
$ which take take () { mkdir -p $1 cd $1 }
URLエンコード・デコードする関数。
$ omz_urlencode # Usage: # omz_urlencode [-r] [-m] [-P] <string> # # -r causes reserved characters (;/?:@&=+$,) to be escaped # # -m causes "mark" characters (_.!~*''()-) to be escaped # # -P causes spaces to be encoded as '%20' instead of '+' $ omz_urldecode # Usage: # omz_urldecode <urlstring> - prints decoded string followed by a newline
下記関数も定義されているが直接使用することはあまりなさそう。
$ open_command $ alias_value $ try_alias_value $ default $ env_default
git.zsh
Git関連の関数が定義されていて、色々なテーマで使用されている$(git_prompt_info)
(Gitの情報をプロンプトに表示)もここで定義されている。
その他、下記関数が定義されているのでPROMPT
などに設定すれば必要な情報が表示できる。
# Gets the difference between the local and remote branches git_remote_status # Outputs the name of the current branch git_current_branch # Gets the number of commits ahead from remote git_commits_ahead # Gets the number of commits behind remote git_commits_behind # Outputs if current branch is ahead of remote git_prompt_ahead # Outputs if current branch is behind remote git_prompt_behind # Outputs if current branch exists on remote or not git_prompt_remote # Formats prompt string for current git commit short SHA git_prompt_short_sha # Formats prompt string for current git commit long SHA git_prompt_long_sha # Get the status of the working tree git_prompt_status # Outputs the name of the current user git_current_user_name # Outputs the email of the current user git_current_user_email
grep.zsh
grepコマンドオプション(色付けとバージョン管理システムのディレクトリを除外)のエイリアスを設定している。
$ alias grep grep='grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn}'
history.zsh
history
コマンドに関する設定をしている。
コマンド履歴ファイルのデフォルトの保存先は$HOME/.zsh_history
で件数は10000となっている。
~/.zshrc
でHIST_STAMPS="mm/dd/yyyy"
などを設定すればhistory
コマンド実行時に実行日情報も表示されるようになる。
## Command history configuration if [ -z "$HISTFILE" ]; then HISTFILE=$HOME/.zsh_history fi HISTSIZE=10000 SAVEHIST=10000 # Show history case $HIST_STAMPS in "mm/dd/yyyy") alias history='fc -fl 1' ;; "dd.mm.yyyy") alias history='fc -El 1' ;; "yyyy-mm-dd") alias history='fc -il 1' ;; *) alias history='fc -l 1' ;; esac
setopt
のそれぞれの意味は以下の通り。
# 複数のZshを同時実行時に履歴ファイルを上書きせずに追加 setopt append_history # 実行日時情報も記録 setopt extended_history # 履歴を削除する必要がある場合、重複している履歴から削除 setopt hist_expire_dups_first # 直前と同じコマンドは履歴に追加しない setopt hist_ignore_dups # ignore duplication command history list # 先頭がスペースのコマンドは履歴に追加しない setopt hist_ignore_space # 過去のコマンド実行時に、すぐに実行しないで編集状態にする setopt hist_verify # コマンドを実行したらすぐに履歴に追加 setopt inc_append_history # 複数ターミナル間で履歴を共有 setopt share_history # share command history data
misc.zsh
miscということで種々雑多な設定がされている。
最初の設定は、下記ページによるとURL文字列をエスケープする設定のようだ。
zshのurl-quote-magicでURL文字列を自動エスケープ - 技術メモ帳
## Load smart urls if available # bracketed-paste-magic is known buggy in zsh 5.1.1 (only), so skip it there; see #4434 autoload -Uz is-at-least if [[ $ZSH_VERSION != 5.1.1 ]]; then for d in $fpath; do if [[ -e "$d/url-quote-magic" ]]; then if is-at-least 5.1; then autoload -Uz bracketed-paste-magic zle -N bracketed-paste bracketed-paste-magic fi autoload -Uz url-quote-magic zle -N self-insert url-quote-magic break fi done fi
jobs
コマンドの出力をデフォルトで jobs -l
にする設定。
## jobs setopt long_list_jobs
ページャーをless
にして、ANSIカラーシーケンスを表示する-R
オプションを設定している。
## pager export PAGER="less" export LESS="-R"
sudo
コマンドをのエイリアスを設定している。
## super user alias alias _='sudo' alias please='sudo'
ack
コマンド(grep
のようなコマンド)のエイリアスを設定している。-i
は大文字小文字を区別しない設定、-l
はパターンマッチしたファイル名のみ出力する設定。
## more intelligent acking for ubuntu users if which ack-grep &> /dev/null; then alias afind='ack-grep -il' else alias afind='ack -il' fi
# only define LC_CTYPE if undefined if [[ -z "$LC_CTYPE" && -z "$LC_ALL" ]]; then export LC_CTYPE=${LANG%%:*} # pick the first entry from LANG fi
コマンド入力時に#
以降はコメントして解釈するようにする設定。
# recognize comments setopt interactivecomments
nvm.zsh
nvmでnode.jsの環境を作っている場合はPROMPT
に$(nvm_prompt_info)
を指定すればnode.jsのバージョンを表示できる。表示内容は${ZSH_THEME_NVM_PROMPT_PREFIX}
と${ZSH_THEME_NVM_PROMPT_SUFFIX}
で囲まれているので色指定などはここに設定する。
prompt_info_functions.zsh
プロンプトにバージョン情報や状態などを表示する*_prompt_info
のダミー関数が定義されている。テーマによってエラーになるのを防ぐためで、実際の実装は各プラグインで書かれているとのこと。
function chruby_prompt_info hg_prompt_info pyenv_prompt_info \ rbenv_prompt_info svn_prompt_info vi_mode_prompt_info \ virtualenv_prompt_info { return 1 }
その他、このスクリプトではrvm_prompt_info()
とruby_prompt_info()
が定義されている。
# oh-my-zsh supports an rvm prompt by default # get the name of the rvm ruby version function rvm_prompt_info() { [ -f $HOME/.rvm/bin/rvm-prompt ] || return 1 local rvm_prompt rvm_prompt=$($HOME/.rvm/bin/rvm-prompt ${=ZSH_THEME_RVM_PROMPT_OPTIONS} 2>/dev/null) [[ "${rvm_prompt}x" == "x" ]] && return 1 echo "${ZSH_THEME_RVM_PROMPT_PREFIX:=(}${rvm_prompt}${ZSH_THEME_RVM_PROMPT_SUFFIX:=)}" } # use this to enable users to see their ruby version, no matter which # version management system they use function ruby_prompt_info() { echo $(rvm_prompt_info || rbenv_prompt_info || chruby_prompt_info) }
spectrum.zsh
256色を試しに表示する関数が定義されている。
spectrum_ls
を実行すれば文字色を変更して表示する(画像は途中までだが256色表示される)。
spectrum_bls
を実行すれば背景色を変更して表示する。
termsupport.zsh
ターミナルウィンドウのタイトルを設定する関数が定義されている。
以下のように、プロンプトを表示する直前に呼び出す関数(precmd_functions
)とコマンドを実行する直前に呼び出す関数(preexec_functions
)を追加している。
precmd_functions+=(omz_termsupport_precmd) preexec_functions+=(omz_termsupport_preexec)
結果として、コマンド実行中はコマンド名を表示(omz_termsupport_preexec
の内容)し、コマンドの実行が完了すると現在ディレクトリなどを表示(omz_termsupport_precmd
の内容)するようになる。
なお、タイトルの変更を無効にしたい場合は~/.zshrc
でDISABLE_AUTO_TITLE="true"
を設定する。
theme-and-appearance.zsh
ここではテーマ関連など主に見た目に関する設定をしている。
~/.zshrc
でDISABLE_LS_COLORS="true"
を有効にしていなければ、ls='ls --color=tty'
などのエイリアスが設定されてls
コマンドが色付けされる。
LSCOLORS
は以下のような設定になっている。
export LSCOLORS="Gxfxcxdxbxegedabagacad"
LSCOLORS
の読み方は下記ページを参照。
Macのターミナルで色つき表示色々 - おしゃれな気分でプログラミング
auto_cd
はcd
を入力せずにディレクトリ名の入力だけで移動できるようにする設定。
multios
はリダイレクトを複数記述できるようにする設定。
setopt auto_cd setopt multios
SCREEN_NO
を設定しているようだが、どこで使用しているのかよくわからなかった。
if [[ x$WINDOW != x ]] then SCREEN_NO="%B$WINDOW%b " else SCREEN_NO="" fi
プロンプト表示のデフォルト設定をする。各テーマで設定があれば上書きされる。
PS1
はPROMPT
と同じ意味。
# Apply theming defaults PS1="%n@%m:%~%# " # git theming default: Variables for theming the git info prompt ZSH_THEME_GIT_PROMPT_PREFIX="git:(" # Prefix at the very beginning of the prompt, before the branch name ZSH_THEME_GIT_PROMPT_SUFFIX=")" # At the very end of the prompt ZSH_THEME_GIT_PROMPT_DIRTY="*" # Text to display if the branch is dirty ZSH_THEME_GIT_PROMPT_CLEAN="" # Text to display if the branch is clean
prompt_subst
はプロンプトの表示する際に変数展開をする設定。
# Setup the prompt with pretty colors setopt prompt_subst