1. alt

    誤字訂正

    alt
Changes in body
Source | HTML | Preview
@@ -1,524 +1,524 @@
# はじめに
10月頃に思い切ってEl Capitanにしたものの、あまりの不具合の多さに1日でYosemiteにTime machineしたのは苦い思い出。。。
-大分不具合も落ち着いた様なので再度El Captain移行をチャレンジした時の記録です。
+大分不具合も落ち着いた様なので再度El Capitan移行をチャレンジした時の記録です。
参考文献にも記載した「[ターミナルマルチプレクサ tmux をカスタマイズする](http://qiita.com/b4b4r07/items/01359e8a3066d1c37edc)」の内容をかなり参考にしています。(ありがとうございます)
## 完成図
![tmux_attach-session.png](https://qiita-image-store.s3.amazonaws.com/0/10852/90e56d3e-0ae5-24f5-b9b3-64fb9ec33991.png)
こんな感じのターミナルをセットアップします。
## 環境
* OS X 11.11 El Capitan 11.11.2
* ターミナル.app 2.6.1 (361.1)
* Homebrew 0.9.5
* zsh 5.2
* tmux 2.1
* vim 7.4.979
## カラースキームを揃えよう
各ツールでカラースキームを揃えた方が見やすいと思います。
個人的に[Solarized](http://ethanschoonover.com/solarized)のDarkが気に入っているので、各ツール用に作られたSolarizedなカラースキームで揃えていきます。
* [Solarized - Ethan Schoonover](http://ethanschoonover.com/solarized)
![solarized-vim.png](https://qiita-image-store.s3.amazonaws.com/0/10852/746d8595-8bf1-bcbc-9c20-d9beffe2ebea.png)
# 環境構築
## ターミナルをセットアップ
カラースキーム設定をするだけ。
1. ターミナルで実行下記を実行して`ターミナル.app`用Solarizedなプロファイルをダウンロード
- ```zsh:ターミナルで実行
+ ```console:ターミナルで実行
$ curl -o ~/Downloads/Solarized\ Dark.terminal https://raw.githubusercontent.com/tomislav/osx-terminal.app-colors-solarized/master/Solarized%20Dark.terminal && open ~/Downloads/
```
2. ターミナル上でキーボードの`Command`+`,`を押下して`環境設定`を開き`プロファイル`タブをクリック
3. リスト下部の`歯車`をクリックして`ダウンロード`フォルダ内にある`Solarized Dark.terminal`を選択して`開く`
![terminal.app_profile_load.png](https://qiita-image-store.s3.amazonaws.com/0/10852/47272a1b-4a2d-85eb-f4f2-b9309257a874.png)
4. プロファイルを読み込み後、`デフォルト`をクリックしておく
![terminal.app_profile_load2.png](https://qiita-image-store.s3.amazonaws.com/0/10852/42a354f8-a61b-9266-ac26-f6f66850a84b.png)
5. プロファイル名の`Solarized Dark`をダブルクリックすると、プロファイルが設定された新しいターミナルウインドウが開く
## Homebrewをセットアップ
1. ターミナルでインスト-ルシェルを実行
- ```zsh:ターミナルで実行
+ ```console:ターミナルで実行
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```
2. Xcodeもコマンドライン・デベロッパ・ツールも何れもインストールされていない場合、コマンドライン・デベロッパ・ツールのインストール画面が表示されるので、問題なければ`インストール`をクリック
![terminal.app_commandline-developertools.png](https://qiita-image-store.s3.amazonaws.com/0/10852/335d0061-4f83-38eb-0698-e5fd0c81f25f.png)
3. `Command Line Tools使用許諾契約` が表示されるので、内容を確認して`同意する`をクリック
4. インストールが完了したら、ターミナルに戻って`Return`キーを押下
5. 管理者パスワードの入力を求められるので、入力して`Reruen`キーを押下でインストール開始
![terminal.app_adminpass.png](https://qiita-image-store.s3.amazonaws.com/0/10852/fc2580ea-7512-bf84-9ed1-b7bed698032d.png)
6. `Installation successful!`と表示されたらインストール完了
7. `brew --version`コマンドでバージョン確認
- ```zsh:ターミナルで実行
+ ```console:ターミナルで実行
$ brew --version
Homebrew 0.9.5 (git revision e043; last commit 2015-12-28)
```
8. コマンド類をインストール
- ```zsh:ターミナルで実行
+ ```console:ターミナルで実行
$ brew update
$ brew install zsh zsh-completions tmux
$ brew install vim --override-system-vi
$ brew install reattach-to-user-namespace # tmuxとOSXのクリップボード共有で利用
```
## zshをセットアップ
1. Homebrewでインストールしたzshを標準シェルへ設定する
- ```zsh:ターミナルで実行
+ ```console:ターミナルで実行
$ sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells"
$ chsh -s /usr/local/bin/zsh
```
2. zsh設定管理ツール`oh-my-zsh`をセットアップ
- ```zsh:ターミナルで実行
+ ```console:ターミナルで実行
$ curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh
```
3. 個別設定ファイルの設置
* 設定ファイルは`~/.oh-my-zsh/custom/`配下に`*.zsh`ファイルを置くと自動的にロードされる
* テーマファイルは`~/.oh-my-zsh/theme/`配下に`*.zsh-theme`ファイルを置くと自動的にロードされる
- ```zsh:ターミナルで実行
+ ```console:ターミナルで実行
$ vi ~/.oh-my-zsh/custom/setting.zsh
```
```zsh:~/.oh-my-zsh/custom/setting.zsh
# ========================
# oh-my-zsh settings
# ========================
# 読み込むテーマを指定
ZSH_THEME="prompt"
# カラーを有効化
autoload -Uz colors
colors
# 文字コード
LANG=ja_JP.UTF-8
LC_CTYPE=ja_JP.UTF-8
LANG=ja_JP.UTF-8
LC_ALL=ja_JP.UTF-8
# ページャー
PAGER=less
# 履歴の件数
HISTSIZE=500000
SAVEHIST=500000
# 重複した履歴を保存しない
setopt hist_ignore_dups
# 履歴を共有する
setopt share_history
# 高機能なワイルドカード展開を使用する
setopt extended_glob
# ウインドウ名の表示
set -g set-titles on
set -g set-titles-string '#W'
# 補完
## for zsh-completions
fpath=(/usr/local/share/zsh-completions $fpath)
## 補完機能を有効にする
autoload -Uz compinit
compinit -u
## 補完で小文字でも大文字にマッチさせる
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
## ../ の後は今いるディレクトリを補完しない
zstyle ':completion:*' ignore-parents parent pwd ..
## sudo の後ろでコマンド名を補完する
zstyle ':completion:*:sudo:*' command-path /usr/local/sbin /usr/local/bin \
/usr/sbin /usr/bin /sbin /bin /usr/X11R6/bin
## ps コマンドのプロセス名補完
zstyle ':completion:*:processes' command 'ps x -o pid,s,args'
# 日本語ファイル名を表示可能にする
setopt print_eight_bit
# '#' 以降をコメントとして扱う
setopt interactive_comments
# ディレクトリ名だけでcdする
setopt auto_cd
# 賢いmvを有効にする
autoload zmv
# エイリアス
export CLICOLOR=1
alias vi='vim'
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias mkdir='mkdir -p'
alias sudo='sudo '
alias ls='ls -G -F'
# C で標準出力をクリップボードにコピーする
## mollifier delta blog : http://mollifier.hatenablog.com/entry/20100317/p1
if which pbcopy >/dev/null 2>&1 ; then
alias -g C='| pbcopy'
fi
# Sublime Text 3 エイリアス
alias subl='/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl'
```
- ```zsh:ターミナルで実行
+ ```console:ターミナルで実行
$ vi ~/.oh-my-zsh/custom/tmux.zsh
```
```zsh:~/.oh-my-zsh/custom/tmux.zsh
# tmux用zsh設定ファイル
## http://qiita.com/b4b4r07/items/01359e8a3066d1c37edc
function is_exists() { type "$1" >/dev/null 2>&1; return $?; }
function is_osx() { [[ $OSTYPE == darwin* ]]; }
function is_screen_running() { [ ! -z "$STY" ]; }
function is_tmux_runnning() { [ ! -z "$TMUX" ]; }
function is_screen_or_tmux_running() { is_screen_running || is_tmux_runnning; }
function shell_has_started_interactively() { [ ! -z "$PS1" ]; }
function is_ssh_running() { [ ! -z "$SSH_CONECTION" ]; }
function tmux_automatically_attach_session()
{
if is_screen_or_tmux_running; then
! is_exists 'tmux' && return 1
if is_tmux_runnning; then
echo "${fg_bold[red]} _____ __ __ _ ___ __ ${reset_color}"
echo "${fg_bold[red]}|_ _| \/ | | | \ \/ / ${reset_color}"
echo "${fg_bold[red]} | | | |\/| | | | |\ / ${reset_color}"
echo "${fg_bold[red]} | | | | | | |_| |/ \ ${reset_color}"
echo "${fg_bold[red]} |_| |_| |_|\___//_/\_\ ${reset_color}"
elif is_screen_running; then
echo "This is on screen."
fi
else
if shell_has_started_interactively && ! is_ssh_running; then
if ! is_exists 'tmux'; then
echo 'Error: tmux command not found' 2>&1
return 1
fi
if tmux has-session >/dev/null 2>&1 && tmux list-sessions | grep -qE '.*]$'; then
# detached session exists
tmux list-sessions
echo -n "Tmux: attach? (y/N/num) "
read
if [[ "$REPLY" =~ ^[Yy]$ ]] || [[ "$REPLY" == '' ]]; then
tmux attach-session
if [ $? -eq 0 ]; then
echo "$(tmux -V) attached session"
return 0
fi
elif [[ "$REPLY" =~ ^[0-9]+$ ]]; then
tmux attach -t "$REPLY"
if [ $? -eq 0 ]; then
echo "$(tmux -V) attached session"
return 0
fi
fi
fi
if is_osx && is_exists 'reattach-to-user-namespace'; then
# on OS X force tmux's default command
# to spawn a shell in the user's namespace
tmux_config=$(cat $HOME/.tmux.conf <(echo 'set-option -g default-command "reattach-to-user-namespace -l $SHELL"'))
tmux -f <(echo "$tmux_config") new-session && echo "$(tmux -V) created new session supported OS X"
else
tmux new-session && echo "tmux created new session"
fi
fi
fi
}
tmux_automatically_attach_session
```
- ```zsh:ターミナルで実行
+ ```console:ターミナルで実行
$ vi ~/.oh-my-zsh/themes/prompt.zsh-theme
```
```zsh:~/.oh-my-zsh/themes/prompt.zsh-theme
## Default shell configuration set prompt
case ${UID} in
## root
0)
PROMPT="%B%{${fg[magenta]}%}#%{${reset_color}%}%b "
PROMPT2="%B%{${fg[magenta]}%}#%{${reset_color}%}%b "
RPROMPT="[%~]"
SPROMPT="%B%{${fg[red]}%}%r is correct? [n,y,a,e]:%{${reset_color}%}%b "
#[ -n "${REMOTEHOST}${SSH_CONNECTION}" ] &&
PROMPT="[%{${fg[white]}%}${USER}]${PROMPT}"
;;
## user
*)
PROMPT="%{${fg[magenta]}%}%%%{${reset_color}%} "
PROMPT2="%{${fg[magenta]}%}%%%{${reset_color}%} "
RPROMPT="[%~]"
SPROMPT="%{${fg[red]}%}%r is correct? [n,y,a,e]:%{${reset_color}%} "
#[ -n "${REMOTEHOST}${SSH_CONNECTION}" ] &&
PROMPT="[%{${fg[white]}%}${USER}]${PROMPT}"
;;
esac
```
## tmuxをセットアップ
1. 設定ファイルを配置
- ```zsh:ターミナルで実行
+ ```console:ターミナルで実行
$ vi ~/.tmux.conf
```
```zsh:~/.tmux.conf
# ==========================
# tmux settings
# color : https://github.com/seebi/tmux-colors-solarized
# ==========================
# prefixキーをC-zに変更する
unbind C-z
set -g prefix C-z
# デフォルトキーバインドを解除する
unbind C-b
# キーストロークのディレイを減らす
set -sg escape-time 1
# ウィンドウのインデックスを1から始める
set -g base-index 1
# ペインのインデックスを1から始める
setw -g pane-base-index 1
# 設定ファイルをリロードする
bind r source-file ~/.tmux.conf \; display "Reloaded!"
# C-z*2でtmux内のプログラムにC-zを送る
bind C-z send-prefix
# | でペインを縦に分割する
bind | split-window -h
# - でペインを横に分割する
bind - split-window -v
# Vimのキーバインドでペインを移動する
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
bind -r C-h select-window -t :-
bind -r C-l select-window -t :+
bind -r Space select-window -t :+
# Vimのキーバインドでペインをリサイズする
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
# マウス操作を有効にする
setw -g mouse
# 256色端末を使用する
set -g default-terminal "screen-256color"
# ウィンドウリストの色を設定する
setw -g window-status-fg cyan
setw -g window-status-bg default
setw -g window-status-attr dim
# アクティブなウィンドウを目立たせる
setw -g window-status-current-fg white
setw -g window-status-current-bg red
setw -g window-status-current-attr bright
# ペインボーダーの色を設定する
set -g pane-border-fg green
set -g pane-border-bg black
# アクティブなペインを目立たせる
set -g pane-active-border-fg white
set -g pane-active-border-bg yellow
# コマンドラインの色を設定する
set -g message-fg white
set -g message-bg black
set -g message-attr bright
# ステータスバーを設定する
## ステータスバーの色を設定する
set -g status-fg colour255
set -g status-bg colour238
## ステータスバーを下部に表示する
set -g status-position top
## 左右のステータスバーの長さを決定する
set-option -g status-left-length 40
set-option -g status-right-length 40
## 左パネルを設定する
set -g status-left "#[fg=colour255,bg=colour241]S:#S #[fg=yellow]W:#I #[fg=cyan]P:#P #[default]"
## 右パネルを設定する
set -g status-right "#[fg=colour255,bg=colour241] Host: #h [%Y-%m-%d(%a) %H:%M] #[default]"
## window-status のフォーマットを指定する。
set-window-option -g window-status-format " #I: #W "
## カレントウィンドウの window-status のフォーマットを指定する
set-window-option -g window-status-current-format "#[fg=colour255,bg=colour27,bold] #I: #W #[default]"
## ステータスバーのUTF-8サポートを有効にする
set -g status-utf8 on
## リフレッシュの間隔を設定する(デフォルト 15秒)
set -g status-interval 1
## ウィンドウリストの位置を中心寄せにする
set -g status-justify centre
## ヴィジュアルノーティフィケーションを有効にする
setw -g monitor-activity on
set -g visual-activity on
# コピーモードを設定する
## viのキーバインドを使用する
setw -g mode-keys vi
## vim <=> tmux 間でクリップボード利用を可能にする
### 事前にbrewしておく-> brew install reattach-to-user-namespace
set-option -g default-command "reattach-to-user-namespace -l $SHELL"
## コピーモードの操作をvi風に設定する
bind-key v copy-mode \; display "Copy mode!"
bind-key -t vi-copy v begin-selection
bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"
unbind -t vi-copy Enter
bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"
## Prefix+p でペースト
## クリップボードにも保存されているので Cmd-v でもペースト可能
bind-key p paste-buffer
```
## vimをセットアップ
1. フォルダの作成
- ```zsh:ターミナルで実行
+ ```console:ターミナルで実行
$ mkdir ~/.vim/colors
$ mkdir ~/.vim/backup
```
2. vim用Solarizedカラースキームをダウンロード
- ```zsh:ターミナルで実行
+ ```console:ターミナルで実行
$ git clone https://github.com/altercation/vim-colors-solarized
$ mv ./vim-colors-solarized/colors/solarized.vim ~/.vim/colors/
$ rm -rf ./vim-colors-solarized
```
3. 設定ファイルを配置
- ```zsh:ターミナルで実行
+ ```console:ターミナルで実行
$ vi ~/.vimrc
```
- ```vmrc:~/.vimrc
+ ```vim:~/.vimrc
"--------------------
"" vim settings
"--------------------
"" Theme
syntax enable
set background=dark
colorscheme solarized
""新しい行のインデントを現在行と同じにする
set autoindent
"バックアップファイルのディレクトリを指定する
set backupdir=$HOME/.vim/backup
"クリップボードをWindowsと連携する
set clipboard=unnamed
"vi互換をオフする
set nocompatible
"スワップファイル用のディレクトリを指定する
set directory=$HOME/.vim/backup
"タブの代わりに空白文字を指定する
set expandtab
"タブ幅の設定
set tabstop=4
"変更中のファイルでも、保存しないで他のファイルを表示する
set hidden
"インクリメンタルサーチを行う
set incsearch
"行番号を表示する
set number
"閉括弧が入力された時、対応する括弧を強調する
set showmatch
"新しい行を作った時に高度な自動インデントを行う
set smarttab
"新しい行を作った時に高度な自動インデントを行う
set smarttab
" grep検索を設定する
set grepformat=%f:%l:%m,%f:%l%m,%f\ \ %l%m,%f
set grepprg=grep\ -nh
" 検索結果のハイライトをEsc連打でクリアする
nnoremap <ESC><ESC> :nohlsearch<CR>
" vimgrepやgrep した際に、cwindowしてしまう
autocmd QuickFixCmdPost *grep* cwindow
" エスケープシーケンスの表示 tab eol
set list
set listchars=tab:▸\ ,eol:¬
" 全角スペースの表示
function! ZenkakuSpace()
highlight ZenkakuSpace cterm=reverse ctermfg=DarkGray gui=reverse guifg=DarkGray
endfunction
if has('syntax')
augroup ZenkakuSpace
autocmd!
"ZenkakuSpace をカラーファイルで設定するなら、
"次の行をコメントアウト
autocmd ColorScheme * call ZenkakuSpace()
autocmd VimEnter,WinEnter * match ZenkakuSpace / /
augroup END
call ZenkakuSpace()
endif
```
# 参考文献
* [ターミナルマルチプレクサ tmux をカスタマイズする](http://qiita.com/b4b4r07/items/01359e8a3066d1c37edc)
* [Solarized - Ethan Schoonover](http://ethanschoonover.com/solarized)
* ターミナル.app用:[tomislav/osx-terminal.app-colors-solarized](https://github.com/tomislav/osx-terminal.app-colors-solarized)
* tmux用:[seebi/tmux-colors-solarized](https://github.com/seebi/tmux-colors-solarized)
* vim用:[altercation/vim-colors-solarized](https://github.com/altercation/vim-colors-solarized)
* [達人に学ぶ.tmux.confの基本設定](http://qiita.com/succi0303/items/cb396704493476373edf)
* [Homebrew](http://brew.sh/index_ja.html)