Tips for zsh
皆さんのコンソールライフがもっと快適になることを祈って
lang
write in ~/.zshrc
export LANG=ja_JP.UTF-8
description
黙って日本語にしておけ
zsh-completions
how to install
$ brew install zsh-completions
write in ~/.zshrc
if [ -e /usr/local/share/zsh-completions ]; then
fpath=(/usr/local/share/zsh-completions $fpath)
fi
autoload -Uz compinit
compinit -u
description
git
などの後の tab を押すと候補が表示されるようになる
もはや無意識で使いすぎていて、これがあると、どう嬉しいなどの説明はできない
completion option
write in ~/.zshrc
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' # 補完候補で、大文字・小文字を区別しないで補完出来るようにするが、大文字を入力した場合は区別する
zstyle ':completion:*' ignore-parents parent pwd .. # ../ の後は今いるディレクトリを補間しない
zstyle ':completion:*:default' menu select=1 # 補間候補一覧上で移動できるように
zstyle ':completion:*:cd:*' ignore-parents parent pwd # 補間候補にカレントディレクトリは含めない
description
補完をもっと強化する
history
write in ~/.zshrc
HISTFILE=~/.zsh_history
HISTSIZE=1000000
SAVEHIST=1000000
setopt share_history # 履歴を他のシェルとリアルタイム共有する
setopt hist_ignore_all_dups # 同じコマンドをhistoryに残さない
setopt hist_ignore_space # historyに保存するときに余分なスペースを削除する
setopt hist_reduce_blanks # historyに保存するときに余分なスペースを削除する
setopt hist_save_no_dups # 重複するコマンドが保存されるとき、古い方を削除する
setopt inc_append_history # 実行時に履歴をファイルにに追加していく
keybind
write in ~/.zshrc
bindkey -e
description
Mac はデフォルトで emacs なので設定いらんかもだけど
↑ ctr+p, ↓ ctr+n, → ctr+f, ← ctr+b
先頭 ctr+a、最後尾 ctr+e、前を削除 ctr+h、後ろを削除 ctr+d
search history
ctr+r で検索
write in ~/.zshrc
autoload 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
description
先頭が一致したコマンドの履歴を一つづつたどれる
git
, docker
など先頭が同じコマンド群でよく使う
alias
write in ~/.zshrc
alias ls='ls -F'
alias la='ls -Fa'
alias ll='ls -Flh'
alias lla='ls -Falh'
alias ..='cd ../'
alias ...='cd ../../'
alias dcom='docker-compose'
alias dk='docker'
もし興味があれば
マージされたローカルブランチが全て削除される
write in ~/.zshrc
alias gcl="git fetch --prune; git br --merged master | grep -vE '^\*|master$|develop$' | xargs -I % git branch -d % ; git br --merged main | grep -vE '^\*|main$|develop$' | xargs -I % git branch -d % ; git br --merged develop | grep -vE '^\*|master$|develop$' | xargs -I % git branch -d %; git br -vv"
chpwd
write in ~/.zshrc
chpwd() {
ls_abbrev
}
ls_abbrev() {
# -a : Do not ignore entries starting with ..
# -C : Force multi-column output.
# -F : Append indicator (one of */=>@|) to entries.
local cmd_ls='ls'
local -a opt_ls
opt_ls=('--color=always' '-aFlh')
case "${OSTYPE}" in
freebsd*|darwin*)
if type gls > /dev/null 2>&1; then
cmd_ls='gls'
else
# -G : Enable colorized output.
opt_ls=('-CFG')
fi
;;
esac
local ls_result
ls_result=$(CLICOLOR_FORCE=1 COLUMNS=$COLUMNS command $cmd_ls ${opt_ls[@]} | sed $'/^\e\[[0-9;]*m$/d')
local ls_lines=$(echo "$ls_result" | wc -l | tr -d ' ')
if [ $ls_lines -gt 30 ]; then
echo "$ls_result" | head -n 15
echo '...'
echo "$ls_result" | tail -n 15
echo "$(command ls -1a | wc -l | tr -d ' ') files exist"
else
echo "$ls_result"
fi
}
prompt
色々使ったけど
pure がおすすめ
https://github.com/sindresorhus/pure
powerlevel とかはかっこいいが、レンダリングが遅かったので、やめた(3年ぐらい前なので、改善されているかも)
https://github.com/romkatv/powerlevel10k
完成した .zshrc
## lang
export LANG=ja_JP.UTF-8
## zsh-completions
if [ -e /usr/local/share/zsh-completions ]; then
fpath=(/usr/local/share/zsh-completions $fpath)
fi
# autoload -Uz compinit
compinit -u
## completion option
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}' # 補完候補で、大文字・小文字を区別しないで補完出来るようにするが、大文字を入力した場合は区別する
zstyle ':completion:*' ignore-parents parent pwd .. # ../ の後は今いるディレクトリを補間しない
zstyle ':completion:*:default' menu select=1 # 補間候補一覧上で移動できるように
zstyle ':completion:*:cd:*' ignore-parents parent pwd # 補間候補にカレントディレクトリは含めない
## history
HISTFILE=~/.zsh_history
HISTSIZE=1000000
SAVEHIST=1000000
setopt share_history # 履歴を他のシェルとリアルタイム共有する
setopt hist_ignore_all_dups # 同じコマンドをhistoryに残さない
setopt hist_ignore_space # historyに保存するときに余分なスペースを削除する
setopt hist_reduce_blanks # historyに保存するときに余分なスペースを削除する
setopt hist_save_no_dups # 重複するコマンドが保存されるとき、古い方を削除する
setopt inc_append_history # 実行時に履歴をファイルにに追加していく
## keybind
bindkey -e
## search history
# ctr+r で検索
# コマンドの途中でctrl-pでそのコマンドから始まる履歴検索
autoload 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
alias ls='ls -F'
alias la='ls -Fa'
alias ll='ls -Flh'
alias lla='ls -Falh'
alias ..='cd ../'
alias ...='cd ../../'
alias dcom='docker-compose'
alias dk='docker'
alias gcl="git fetch --prune; git br --merged master | grep -vE '^\*|master$|develop$' | xargs -I % git branch -d % ; git br --merged main | grep -vE '^\*|main$|develop$' | xargs -I % git branch -d % ; git br --merged develop | grep -vE '^\*|master$|develop$' | xargs -I % git branch -d %; git br -vv"
## chpwd
# cdの後にlsを実行
chpwd() {
ls_abbrev
}
ls_abbrev() {
# -a : Do not ignore entries starting with ..
# -C : Force multi-column output.
# -F : Append indicator (one of */=>@|) to entries.
local cmd_ls='ls'
local -a opt_ls
opt_ls=('--color=always' '-aFlh')
case "${OSTYPE}" in
freebsd*|darwin*)
if type gls > /dev/null 2>&1; then
cmd_ls='gls'
else
# -G : Enable colorized output.
opt_ls=('-CFG')
fi
;;
esac
local ls_result
ls_result=$(CLICOLOR_FORCE=1 COLUMNS=$COLUMNS command $cmd_ls ${opt_ls[@]} | sed $'/^\e\[[0-9;]*m$/d')
local ls_lines=$(echo "$ls_result" | wc -l | tr -d ' ')
if [ $ls_lines -gt 30 ]; then
echo "$ls_result" | head -n 15
echo '...'
echo "$ls_result" | tail -n 15
echo "$(command ls -1a | wc -l | tr -d ' ') files exist"
else
echo "$ls_result"
fi
}