zsh，autojump, pecoで作業効率を上げたい


一回一回パスを打ち込んで探索するのが面倒だなーと思って

## version確認
```cat /etc/redhat-release```でcentosのバージョン確かめれる．

```
$ cat /etc/redhat-release
CentOS release 6.4 (Final)
```

これにzsh，autojump, pecoを入れていく．

## zsh
zsh(Z Shell)はUnixのコマンドシェルの1つ(Wiki参照)

使っていてやっぱり補完がいいなと思う(月並みな感想ですが)

### zshのインストール
```yum -y install zsh```

これでインストールできる．

入ったか確認する．

```
$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
/bin/dash
# 追加された
/bin/zsh
```

zshをインストールしたあとは，設定ファイルの```.zshrc```をいじっていくのですが，テンプレートとして```oh-my-zsh```を入れると楽になる．

### oh-my-zshの導入

```git clone https://github.com/robbyrussell/oh-my-zsh.git```

これでカレントディレクトリに```.oh-my-zsh```が入る

その後の手順をとりあえず一通り書く

```
$cd .oh-my-zsh

$cp templates/zshrc.zsh-template ~/.zshrc
```

これでテンプレートをそのまま自分の設定ファイルにできた．

いきなり```cp```するのは怖いなって人はあらかじめ```.zshrc```のコピーを取っておけばいいと思う．

```bash:.zshrc
# oh-my-zshどこにあるの？
export ZSH=$HOME/.oh-my-zsh

# テーマ何にするの？
ZSH_THEME="cloud"

# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"
```

```ZSH_THEME``` は[このページ](https://github.com/robbyrussell/oh-my-zsh/wiki/themes)でサンプルが見れるから好みのテーマに適宜変更すればいいと思う．

設定を変えた後は```source .zshrc```
これは次以降かいてません


## auto-jump

ディレクトリ探索が楽になる．
自分がよく使うパス(使ったことのあるパス)を記憶してよく使う順に候補を出してくれる．

例をあげるとこんな感じ

```
$ j do[tab]
do__1__/Users/shu/Documents
do__2__/Users/shu/Downloads
・
・
```

### インストール
[wting/autojump](https://github.com/wting/autojump)によるとPython2.6以上が必要らしい．

```
$ python --version
Python 2.6.6
```

大丈夫だった．

```git clone https://github.com/wting/autojump.git```

```
$ cd autojump
$ ./install.py
・
・
・
[[ -s $HOME/.autojump/etc/profile.d/autojump.sh ]] && source /home/shu-/.autojump/etc/profile.d/autojump.sh

	autoload -U compinit && compinit -u
・
・
```

こんな感じになる．
とりあえず言われた通り```.zshrc```に記述してリスタート

ここで注意だが，```source .zshrc```だとうまくいかなかった．
一回ログアウトしてログインしなおすと使えるようになる．

### 確認
とりあえず適当にどっかにcdして，それがちゃんと```j```コマンドででてくるか確かめる．

```
$ cd autojump
$ cd
$ j a[tab]
a__1__/home/shu-/autojump  a__2__/home/shu-/autojump
```

なんか2個できたけどできた．

これは階層関係なくどこにでも飛べます

```
$ pwd
/usr/share/tomcat7

$ j a[tab]

$ pwd
/home/shu-/autojump
```

こんな感じ

## peco
コマンド履歴が見やすくなる

例えばこんな感じ
```control + r```

```
QUERY> sudo                                                                                                                          IgnoreCase [210 (1/10)]
sudo yum install autojump-zsh
sudo yum autojump-zsh
sudo yum -y autojump-zsh
sudo service httpd restart
・
・
```

```QUERY>``` に入力した文字でフィルタリングしてくれる

詳しくは [peco/peco](https://github.com/peco/peco)で

### インストール
```wget``` でダウンロードする．

```
wget -O peco.tar.gz https://github.com/peco/peco/releases/download/v0.3.3/peco_linux_386.tar.gz
```

```-O``` オプションは保存先に名前をつけれるオプション

そしたら解凍する．
```tar -C ./ -xzf peco.tar.gz```

すると，```peco_linux_386```というファイルができる．

その後
```sudo mv peco_linux_386 /user/local/bin/```
これでユーザ全員が使えるようになる．

### zshのhistroyでpecoを使う
[pecoをCentOS6.5にインストール](http://qiita.com/popstaplerate/items/dd983267a7075250035b)
[[peco]peco-select-history.zsh で表示されるコマンド履歴の重複を削除する](http://qiita.com/wada811/items/78b14181a4de0fd5b497)
を参考にさせていただきました．

```bash:.zshrc
#peco
function peco-select-history() {
    local tac
    if which tac > /dev/null; then
        tac="tac"
    else
        tac="tail -r"
    fi

    BUFFER=$(\history -n 1 | \
        eval $tac | \
        awk '!a[$0]++' | \
        peco --query "$LBUFFER")
    CURSOR=$#BUFFER
    zle clear-screen
}
zle -N peco-select-history
bindkey '^r' peco-select-history

#履歴ファイルの保存先
export HISTFILE=${HOME}/.zsh_history

# メモリに保存される履歴の件数
export HISTSIZE=1000

# 履歴ファイルに保存される履歴の件数
export SAVEHIST=100000

# 重複を記録しない
setopt hist_ignore_dups

# 開始と終了を記録
setopt EXTENDED_HISTORY
```

pecoの設定をするついでにzshのHistroyの設定も一緒にした．

個人的には重複を記録しないオプションは大事だと思う．


### 確認
適当にコマンド打つ

```
$ cd
$ [control]+r
QUERY>
cd

#重複がないか確認した
cd httpd/
sudo cd httpd
cd log
cd lo
cd /var
・
・
#なさそう
#historyの確認
$ less .zsh_history
#重複はなかった
```

## 最終的な.zshrc
oh-my-zshをテンプレートとして利用しているが，最終的な設定ファイルは以下のようになる．

なおmacを利用していて，rmにはaliasを設定している．

```shell:.zshrc
# Path to your oh-my-zsh installation.
export ZSH=$HOME/oh-my-zsh

# Set name of the theme to load.
# Look in ~/.oh-my-zsh/themes/
# Optionally, if you set this to "random", it'll load a random theme each
# time that oh-my-zsh is loaded.
ZSH_THEME="cloud"

# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"

# Uncomment the following line to use hyphen-insensitive completion. Case
# sensitive completion must be off. _ and - will be interchangeable.
# HYPHEN_INSENSITIVE="true"

# Uncomment the following line to disable bi-weekly auto-update checks.
# DISABLE_AUTO_UPDATE="true"

# Uncomment the following line to change how often to auto-update (in days).
# export UPDATE_ZSH_DAYS=13

# Uncomment the following line to disable colors in ls.
# DISABLE_LS_COLORS="true"

# Uncomment the following line to disable auto-setting terminal title.
# DISABLE_AUTO_TITLE="true"

# Uncomment the following line to enable command auto-correction.
# ENABLE_CORRECTION="true"

# Uncomment the following line to display red dots whilst waiting for completion.
# COMPLETION_WAITING_DOTS="true"

# Uncomment the following line if you want to disable marking untracked files
# under VCS as dirty. This makes repository status check for large repositories
# much, much faster.
# DISABLE_UNTRACKED_FILES_DIRTY="true"

# Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output.
# The optional three formats: "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
# HIST_STAMPS="mm/dd/yyyy"

# Would you like to use another custom folder than $ZSH/custom?
# ZSH_CUSTOM=/path/to/new-custom-folder

# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(git)

# User configuration

export PATH=$HOME/bin:/usr/local/bin:$PATH
# export MANPATH="/usr/local/man:$MANPATH"

source $ZSH/oh-my-zsh.sh

# You may need to manually set your language environment
# export LANG=en_US.UTF-8

# Preferred editor for local and remote sessions
# if [[ -n $SSH_CONNECTION ]]; then
#   export EDITOR='vim'
# else
#   export EDITOR='mvim'
# fi

# Compilation flags
# export ARCHFLAGS="-arch x86_64"

# ssh
# export SSH_KEY_PATH="~/.ssh/dsa_id"

# Set personal aliases, overriding those provided by oh-my-zsh libs,
# plugins, and themes. Aliases can be placed here, though oh-my-zsh
# users are encouraged to define aliases within the ZSH_CUSTOM folder.
# For a full list of active aliases, run `alias`.
#
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"

## auto-jump
[[ -s $HOME/.autojump/etc/profile.d/autojump.sh ]] && source $HOME/.autojump/etc/profile.d/autojump.sh

autoload -U compinit && compinit -u

## peco
function peco-select-history() {
    local tac
    if which tac > /dev/null; then
        tac="tac"
    else
        tac="tail -r"
    fi

    BUFFER=$(\history -n 1 | \
        eval $tac | \
        awk '!a[$0]++' | \
        peco --query "$LBUFFER")
    CURSOR=$#BUFFER
    zle clear-screen
}
zle -N peco-select-history
bindkey '^r' peco-select-history

#履歴ファイルの保存先
export HISTFILE=${HOME}/.zsh_history

# メモリに保存される履歴の件数
export HISTSIZE=1000

# 履歴ファイルに保存される履歴の件数
export SAVEHIST=100000

# 重複を記録しない
setopt hist_ignore_dups

# 開始と終了を記録
setopt EXTENDED_HISTORY

# alias
##rm設定
to_trash() {
    for file in $@
    do
        mv $file ~/.Trash
    done
}
alias rm="to_trash"

```

## 感想
それぞれまだまだ使えることが多そうだから，GitHubページをみてもっと理解を含めていろいろ使えるようになりたい