はじめに
10月頃に思い切ってEl Capitanにしたものの、あまりの不具合の多さに1日でYosemiteにTime machineしたのは苦い思い出。。。
大分不具合も落ち着いた様なので再度El Captain移行をチャレンジした時の記録です。
参考文献にも記載した「ターミナルマルチプレクサ tmux をカスタマイズする」の内容をかなり参考にしています。(ありがとうございます)
完成図
こんな感じのターミナルをセットアップします。
環境
- 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のDarkが気に入っているので、各ツール用に作られたSolarizedなカラースキームで揃えていきます。
環境構築
ターミナルをセットアップ
カラースキーム設定をするだけ。
ターミナルで実行下記を実行して
ターミナル.app
用Solarizedなプロファイルをダウンロードターミナルで実行$ curl -o ~/Downloads/Solarized\ Dark.terminal https://raw.githubusercontent.com/tomislav/osx-terminal.app-colors-solarized/master/Solarized%20Dark.terminal && open ~/Downloads/
ターミナル上でキーボードの
Command
+,
を押下して環境設定
を開きプロファイル
タブをクリックプロファイル名の
Solarized Dark
をダブルクリックすると、プロファイルが設定された新しいターミナルウインドウが開く
Homebrewをセットアップ
ターミナルでインスト-ルシェルを実行
ターミナルで実行$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Xcodeもコマンドライン・デベロッパ・ツールも何れもインストールされていない場合、コマンドライン・デベロッパ・ツールのインストール画面が表示されるので、問題なければ
インストール
をクリックCommand Line Tools使用許諾契約
が表示されるので、内容を確認して同意する
をクリックインストールが完了したら、ターミナルに戻って
Return
キーを押下Installation successful!
と表示されたらインストール完了brew --version
コマンドでバージョン確認ターミナルで実行$ brew --version Homebrew 0.9.5 (git revision e043; last commit 2015-12-28)
コマンド類をインストール
ターミナルで実行$ brew update $ brew install zsh zsh-completions tmux $ brew install vim --override-system-vi $ brew install reattach-to-user-namespace # tmuxとOSXのクリップボード共有で利用
zshをセットアップ
Homebrewでインストールしたzshを標準シェルへ設定する
ターミナルで実行$ sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells"$ chsh -s /usr/local/bin/zsh
zsh設定管理ツール
oh-my-zsh
をセットアップターミナルで実行$ curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh
個別設定ファイルの設置
- 設定ファイルは
~/.oh-my-zsh/custom/
配下に*.zsh
ファイルを置くと自動的にロードされる - テーマファイルは
~/.oh-my-zsh/theme/
配下に*.zsh-theme
ファイルを置くと自動的にロードされる
ターミナルで実行$ vi ~/.oh-my-zsh/custom/setting.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-completionsfpath=(/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/p1if which pbcopy >/dev/null 2>&1;thenalias -g C='| pbcopy'fi# Sublime Text 3 エイリアスalias subl='/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl'
ターミナルで実行$ vi ~/.oh-my-zsh/custom/tmux.zsh
~/.oh-my-zsh/custom/tmux.zsh# tmux用zsh設定ファイル## http://qiita.com/b4b4r07/items/01359e8a3066d1c37edcfunction 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;thenecho"${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;thenecho"This is on screen."fielseif shell_has_started_interactively && ! is_ssh_running;thenif ! is_exists 'tmux';thenecho'Error: tmux command not found' 2>&1 return 1 fiif 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) "readif[["$REPLY"=~ ^[Yy]$ ]]||[["$REPLY"=='']];then tmux attach-session if[$? -eq 0];thenecho"$(tmux -V) attached session"return 0 fielif[["$REPLY"=~ ^[0-9]+$ ]];then tmux attach -t "$REPLY"if[$? -eq 0];thenecho"$(tmux -V) attached session"return 0 fififiif 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 namespacetmux_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"fififi} tmux_automatically_attach_session
ターミナルで実行$ vi ~/.oh-my-zsh/themes/prompt.zsh-theme
~/.oh-my-zsh/themes/prompt.zsh-theme## Default shell configuration set promptcase${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をセットアップ
設定ファイルを配置
ターミナルで実行$ vi ~/.tmux.conf
~/.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-namespaceset-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をセットアップ
フォルダの作成
ターミナルで実行$ mkdir ~/.vim/colors $ mkdir ~/.vim/backup
vim用Solarizedカラースキームをダウンロード
ターミナルで実行$ git clone https://github.com/altercation/vim-colors-solarized $ mv ./vim-colors-solarized/colors/solarized.vim ~/.vim/colors/ $ rm -rf ./vim-colors-solarized
設定ファイルを配置
ターミナルで実行$ vi ~/.vimrc
~/.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