この記事は @HibikineCode 1人 Advent Calendar 2018 の1日目の記事です。
Zshはいいぞ! いろんなシェルのいいところ取り入れた、かしこいシェル!
ソース: .zshrc
なんでZsh使うようになったの
最初はおとなしくBash使ってました。「お前らのターミナルはダサい」で快適そうなターミナルを見てプラグインとか入れたくなり、ZshにPrezto入れて使い始めました。
一回fishに浮気したんですがWSLとの相性が最悪で(文字化けしたり入力周りがおかしくなったりする)やめました。
で、今ではZshに戻ってきて、管理のめんどくさいPrezto使うのをやめ、Zplugで必要なものだけ入れている今のスタイルに落ち着いてます。
プラグインマネージャー: zplug
プラグインマネージャーは、最初はPrezto使って色々入れてたんですが今ではZplugでシンプルに必要なものだけ入れてます。
プラグイン
こんな感じ。
zplug "zplug/zplug", hook-build:"zplug --self-manage"↲
zplug "mafredri/zsh-async"↲
zplug "sindresorhus/pure"↲
zplug "rupa/z", use:z.sh↲
zplug "mollifier/cd-gitroot"↲
zplug "b4b4r07/enhancd", use:init.sh↲
zplug "b4b4r07/zsh-gomi", if:"which fzf"↲
zplug "zsh-users/zsh-syntax-highlighting"↲
zplug "zsh-users/zsh-autosuggestions"↲
zplug "zsh-users/zsh-history-substring-search", defer:2↲
zplug "zsh-users/zsh-completions"↲
zplug "chrissicool/zsh-256color"↲
zplug "junegunn/fzf-bin", as:command, from:gh-r, rename-to:fzf↲
zplug "peco/peco", as:command, from:gh-r, use:"*amd64*"↲
zplug "mrowa44/emojify", as:command↲
zplug "stedolan/jq", from:gh-r, as:command, on:b4b4r07/emoji-cli, if:"which jq"
zplug "walesmd/caniuse.plugin.zsh"↲
zplug "liangguohuan/zsh-dircolors-solarized"↲
zplug "felixr/docker-zsh-completion"↲
ほんとに必要なものをって感じで入れてます。
zsh-async
Zshくんが非同期処理できるようになる。
pure
ミニマルなプロンプト。次項で詳しく解説。
z
先頭にzって入れて後ろにパス名入れるといい感じに飛べるやつ。ちょっと今となってはレガシーかな? でも便利。
cd-gitroot
cd-gitroot
でgitのルートフォルダに飛べる。
enhancd
過去に開いたディレクトリを記憶して、任意のディレクトリに飛べるようになるどこでもドア。クソ便利。
zsh-gomi
CLIごみ箱。
zsh-syntax-highlighting
コマンドに色付けくん
zsh-autosuggestions
過去に入力したコマンドの履歴が灰色のサジェストで出る。便利。
zsh-history-substring-search
コマンド入力途中で上下キー押したときの過去履歴がいい感じに出るようになる。
zsh-completions
補完強化
zsh-256color
256色表示にする
fzf-bin
CLIのファインダーfzf
をzplug経由で落としてくる。
peco
peco
を(以下略
emojify
:muscle:
を💪にする✨
% echo ':muscle:' | emojify
💪
% git log | emojify
みたいな
jq
CLIのJSONプロセッサ
caniuse.plugin.zsh
ブラウザの対応状況「caniuse.com」のページを開いてくれる
% caniuse webgl
zsh-dircolors-solarized
ディレクトリの色をきれいにする
docker-zsh-completion
DockerのZsh補完
プロンプト: pure
2行になるのがほんとすき。毎回入力してる部分がガタガタ動かないのでよいです。
.dotzconfig
[ -f ~/.dotzconfig ] && source ~/.dotzconfig
ローカルでしか使わないzshの設定を入れてるファイル。
gi
function gi() { curl -L -s https://www.gitignore.io/api/$@ ;}
gitignoreを生成する。
% gi node >> .gitignore
alias
ご覧の通り。
# Aliases
alias cd..="cd .."
alias winsrc="cd /mnt/c/Users/Kage/src/"
alias winHome="cd /mnt/c/Users/$USER/"
alias owcl="cd /mnt/e/ownCloud/"
alias ch="cd ~/src/cheetah_app/"
alias chdocker="cd ~/src/cheetah_app/web/cheetah_docker/ && docker-compose up -d"
alias chwatch="cd ~/src/cheetah_app/web/ && yarn watch"
alias getmyip="curl inet-ip.info"
export PATH="$PATH:$HOME/.cargo/bin:/home/linuxbrew/.linuxbrew/bin:$HOME/.config/yarn/global/node_modules/.bin:$HOME/.local/bin"
alias grep='grep --color'
alias df='df -h'
alias dusc='du -s -c *'
alias untgz='tar -xzvf'
alias untbz='tar -xjvf'
# ls aliases
if [ "$(uname)" = 'Darwin' ]; then
# export LSCOLORS=xbfxcxdxbxegedabagacad
alias ls='ls -G'
else
# eval `dircolors ~/.colorrc`
alias ls='ls --color=auto'
fi
alias ll='ls -la --color=auto'
alias la='ls -la --color=auto'
alias sl='ls'
# git aliases
alias hyperlog="git log --oneline --graph --decorate=full"
alias lg=hyperlog
alias gaa='git add --all'
alias gc='git checkout'
alias gcb='git checkout -b'
alias gs='git status'
alias gst='git status'
alias gb='git branch'
alias gcm='git checkout master'
alias gpu='git pull'
alias gpom='git pull origin master'
alias gmm='git merge master'
alias gcdf='git clean -df'
alias gp='git push'
alias gco='git commit'
alias gcom='git commit -m'
alias ga='git add'
# proxy aliases
alias setproxy='git config --file ~/.gitconfig.local http.proxy proxyurl.hogehoge.jp:10080 && git config --file ~/.gitconfig.local https.proxy proxyurl.hogehoge.jp:10080 && sed -i -e "s/#ProxyCommand connect -H proxyurl.hogehoge.jp:10080 %h %p/ProxyCommand connect -H proxyurl.hogehoge.jp:10080 %h %p/" ~/.ssh/config && export http_proxy=http://proxyurl.hogehoge.jp:10080 && export https_proxy=http://proxyurl.hogehoge.jp:10080'
alias setdockerproxy='sudo sed -i -e "s/#export http_proxy=http:\/\/proxyurl.hogehoge.jp:10080/export http_proxy=http:\/\/proxyurl.hogehoge.jp:10080/" /etc/default/docker && sudo sed -i -e "s/#export https_proxy=https:\/\/proxyurl.hogehoge.jp:10080/export https_proxy=http:\/\/proxyurl.hogehoge.jp:10080/" /etc/default/docker'
alias unsetproxy='git config --file ~/.gitconfig.local --unset http.proxy && git config --file ~/.gitconfig.local --unset https.proxy && sed -i -e "s/ProxyCommand connect -H proxyurl.hogehoge.jp:10080 %h %p/#ProxyCommand connect -H proxyurl.hogehoge.jp:10080 %h %p/" ~/.ssh/config && export http_proxy="" && export https_proxy=""'
alias setdockerproxy='sudo sed -i -e "s/#export http_proxy=http:\/\/proxyurl.hogehoge.jp:10080/export http_proxy=http:\/\/proxyurl.hogehoge.jp:10080/" /etc/default/docker && sudo sed -i -e "s/#export https_proxy=https:\/\/proxyurl.hogehoge.jp:10080/export https_proxy=http:\/\/proxyurl.hogehoge.jp:10080/" /etc/default/docker'
alias unsetdockerproxy='sudo sed -i -e "s/export http_proxy=http:\/\/proxyurl.hogehoge.jp:10080/#export http_proxy=http:\/\/proxyurl.hogehoge.jp:10080/" /etc/default/docker && sudo sed -i -e "s/export https_proxy=https:\/\/proxyurl.hogehoge.jp:10080/#export https_proxy=http:\/\/proxyurl.hogehoge.jp:10080/" /etc/default/docker'
getmyip
alias getmyip="curl inet-ip.info"
これ便利。
後いろいろ
パス通したり細かい設定の環境変数だったり。すごいことはやってないです。
まとめ
zsh いいよねって話でした。