Web系だけど.zshrc晒す

この記事は [@HibikineCode 1人 Advent Calendar 2018](https://adventar.org/calendars/3251) の1日目の記事です。

Zshはいいぞ！　いろんなシェルのいいところ取り入れた、かしこいシェル！

ソース: [.zshrc](https://github.com/HibikineKage/dotfiles/blob/master/.zshrc)

## なんでZsh使うようになったの

最初はおとなしくBash使ってました。「[お前らのターミナルはダサい](https://qiita.com/kinchiki/items/57e9391128d07819c321)」で快適そうなターミナルを見てプラグインとか入れたくなり、ZshにPrezto入れて使い始めました。

一回fishに浮気したんですがWSLとの相性が最悪で(文字化けしたり入力周りがおかしくなったりする)やめました。

で、今ではZshに戻ってきて、管理のめんどくさいPrezto使うのをやめ、Zplugで必要なものだけ入れている今のスタイルに落ち着いてます。

## プラグインマネージャー: zplug

プラグインマネージャーは、最初はPrezto使って色々入れてたんですが今ではZplugでシンプルに必要なものだけ入れてます。

### プラグイン
こんな感じ。

```.zshrc
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](https://github.com/mafredri/zsh-async)

Zshくんが非同期処理できるようになる。

#### [pure](https://github.com/sindresorhus/pure)
ミニマルなプロンプト。次項で詳しく解説。

#### [z](https://github.com/rupa/z)
先頭にzって入れて後ろにパス名入れるといい感じに飛べるやつ。ちょっと今となってはレガシーかな？　でも便利。

#### [cd-gitroot](https://github.com/mollifier/cd-gitroot)
`cd-gitroot`でgitのルートフォルダに飛べる。

#### [enhancd](https://github.com/b4b4r07/enhancd)
過去に開いたディレクトリを記憶して、任意のディレクトリに飛べるようになるどこでもドア。クソ便利。

#### [zsh-gomi](https://github.com/b4b4r07/zsh-gomi)
CLIごみ箱。

#### [zsh-syntax-highlighting](https://github.com/zsh-users/zsh-syntax-highlighting)
コマンドに色付けくん

#### [zsh-autosuggestions](https://github.com/zsh-users/zsh-autosuggestions)
過去に入力したコマンドの履歴が灰色のサジェストで出る。便利。

#### [zsh-history-substring-search](https://github.com/zsh-users/zsh-history-substring-search)
コマンド入力途中で上下キー押したときの過去履歴がいい感じに出るようになる。

#### [zsh-completions](https://github.com/zsh-users/zsh-completions)
補完強化

#### [zsh-256color](https://github.com/chrissicool/zsh-256color)
256色表示にする

#### [fzf-bin](https://github.com/junegunn/fzf-bin)
CLIのファインダー`fzf`をzplug経由で落としてくる。

#### [peco](https://github.com/peco/peco)
`peco`を(以下略

#### [emojify](https://github.com/mrowa44/emojify)
`:muscle:`を💪にする✨

```zsh

% echo ':muscle:' | emojify
💪

% git log | emojify
```

みたいな

#### [jq](https://github.com/stedolan/jq)
CLIのJSONプロセッサ

#### [caniuse.plugin.zsh](https://github.com/walesmd/caniuse.plugin.zsh)

ブラウザの対応状況「[caniuse.com](https://caniuse.com)」のページを開いてくれる

```zsh

% caniuse webgl
```

#### [zsh-dircolors-solarized](https://github.com/liangguohuan/zsh-dircolors-solarized)

ディレクトリの色をきれいにする

#### [docker-zsh-completion](https://github.com/felixr/docker-zsh-completion)

DockerのZsh補完

## プロンプト: pure
2行になるのがほんとすき。毎回入力してる部分がガタガタ動かないのでよいです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/152713/955f39d6-83b4-1557-c397-03de7f4a5160.png)

## `.dotzconfig`

```zsh

[ -f ~/.dotzconfig ] && source ~/.dotzconfig
```

ローカルでしか使わないzshの設定を入れてるファイル。

## gi

```zsh

function gi() { curl -L -s https://www.gitignore.io/api/$@ ;}
```

gitignoreを生成する。

```zsh
% gi node >> .gitignore
```

## alias

ご覧の通り。

```.zshrc
# 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`
```zsh
alias getmyip="curl inet-ip.info"
```
これ便利。

## 後いろいろ
パス通したり細かい設定の環境変数だったり。すごいことはやってないです。

# まとめ

zsh いいよねって話でした。