読者です 読者をやめる 読者になる 読者になる

( ꒪⌓꒪) ゆるよろ日記

( ゚∀゚)o彡°オパーイ!オパーイ! ( ;゚皿゚)ノシΣ フィンギィィーーッ!!!

iTerm2 + zsh + tmux + vim で快適な256色ターミナル環境を構築する

vim tmux iTerm2

こんにちわ。債務者ことゆろよろです。家買いました。


さて、最近こんなまとめが話題になりました。自分もコメントしましたが、すごい情報量になってます。


これ知らないプログラマって損してんなって思う汎用的なツール #JavaScript #PHP #Ruby #Python #HTML - Qiita
【まとめ】これ知らないプログラマって損してんなって思う汎用的なツール 100超 #PHP #JavaScript #Python #Ruby #HTML - Qiita


で、自分のコメントにも書いたのだけど、基本的に仕事はターミナルでssh接続して、Vimでコード書いてるので、この辺の環境構築についてまとめてみた。最近Terminal.appからiTerm2に移行して、screenからtmuxに乗り換えたので、その辺も含めて導入方法を書いておく。


手元の端末はMBPでOSX Lionだけど、ほぼ同じ設定でUbuntu11.10/CentOS5.6/Sientific-Linux6.2で使い回してる。

スクショ

こんなかんじです
f:id:yuroyoro:20120211114748p:image:w640
f:id:yuroyoro:20120211114747p:image:w640
f:id:yuroyoro:20120211114744p:image:w640

導入するものリスト

  • iTerm2(ターミナル)
  • homebrew(パッケージ管理)
  • zsh
  • git
  • tig
  • tmux
  • vim
    • vundle(プラグイン管理)
    • neocomplecache
    • unite.vim
    • vim-powerline
    • その他色々


自分のdotfilesに関しては、Githubにおいてあります。


yuroyoro/dotfiles · GitHub

手っ取り早く設定するには

この記事にある手順で、Vimの導入まで進めます。設定ファイルは、以下のように$HOMEに、自分が公開してるdotfilesをcloneして、setup.shを叩けばよいです。

git clone https://github.com/yuroyoro/dotfiles.git
cd dotfiles
./setup.sh


setup.shでは、各設定ファイルへのシンボリックリンクを生成するのですが、すでにファイルが存在する場合はlnコマンドが失敗するので、その場合は適宜対処してください。


tmuxとmac osxのクリップボード連携を行うために、 reattach-to-user-namespaceコマンドを導入します。

git clone https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.git
cd tmux-MacOSX-pasteboard
make reattach-to-user-namespace && cp reattach-to-user-namespace ~/bin


Vimを使うには、もう少し設定が必要です。
まず、~/.vim/bundleディレクトリを作成し、そこにvubdle.vimをcloneします。

cd ~/.vim
mkdir bundle
cd bundle
git clone https://github.com/gmarik/vundle.git


次に、vimコマンドででvimを起動します。最初はエラーが出ますが無視してください。で、":"を押してコマンドモードに入り、BundleInstallを実行します。

f:id:yuroyoro:20120211114733p:image


すると、利用するプラグインがダウンロードされます。


f:id:yuroyoro:20120211114732p:image


最後に、vim-procをmakeします。

cd ~/.vim/bundle/vimproc/
make -f make_mac.mak


vim-powerlineを使うので、フォントにパッチを当てないとステータスラインがちゃんと表示されません。フォントにパッチ当てるの面倒だったりするなら、
.vimrc.statuslineにある以下の行をコメントアウトしてください。

" vim-powerlineでフォントにパッチを当てないなら以下をコメントアウト
let g:Powerline_symbols = 'fancy'


では、各ツールの導入手順・使い方など。

iTerm2の導入

ターミナルは一番長い時間使う、もっとも重要なソフトウェアです。今まではTerminal.appでしたが、vim-poewlineがiTerm2じゃないと動かないので移行しました。


f:id:yuroyoro:20120211121632p:image:w360


まずはiTerm2をダウンロー丼してインスコしてください。


iTerm2 - Mac OS Terminal Replacement


設定などはそんなにいじってないけど、基本はウィンドウを5枚くらいあげていて、タブとか使わないし存在意義もよくわからないので、cmd + 数字キーでウィンドウを切り替えられるようにした。


f:id:yuroyoro:20120211114742p:image


あと、設定したフォントによっては、vimのステータスラインが再描画されなかったりするので、'Treat ambigous-width characters as double width'のチェックを外した。


f:id:yuroyoro:20120211114741p:image


俺は、あずきフォントS2Gうにフォントを愛用してますが、あまり人様にはおすすめできませぬ。

homebrew

パッケージ管理にはhomebrewを使います。macportsとかなにそれ?


Homebrew — MacPorts driving you to drink? Try Homebrew!


インスコは、ここに書いてあるとおり、以下のコマンドで。あ、XCode入れておいてね。

mkdir homebrew && curl -L https://github.com/mxcl/homebrew/tarball/master | tar xz --strip 1 -C homebrew


インスコが終わったら、とりあえず必要そうなアレをbrewで入れます。適当に列挙してありますので、必要に応じて。最低限、zsh git tmux tig ctags curl readline coreuilts proctools wget くらいは入れておきましょう。

brew install binutils cmake coreutils ctags curl gdbm gettext git glib imagemagick irssi jpeg libevent libffi libiconv libpng libtiff lv lynx ncftp neon nkf nmap parallel pcre pcre++ pip pkg-config potrace proctools readline tig tmux tree w3m wget zsh

zsh

もはやzshなしでは生きられない体になってしまってるので、zsh入れます。


【コラム】漢のzsh (1) 最強のシェル、それは「zsh」 | エンタープライズ | マイナビニュース


macだったら'brew install zsh'で入ります。設定などはgithubを見てください。わりとコメントも書いてあるので見れば分かるはず。


dotfiles/.zshrc at master · yuroyoro/dotfiles · GitHub


.zshrcは、本体の他に、oxs固有の設定を行う.zshrc.osxとlinuxで使う.zshrc.linuxに別れてます。あと、alias関係は.zshrc.aliasにまとめてあります。


zshを使っている一番の理由は、なんと言っても強力なコマンドライン補完です。例えば、以下の用に'vim zsh'まで入力してTABを押すと、一致するファイル名を補完してくれますし。


f:id:yuroyoro:20120211114731p:image


C-p, C-nでヒストリから途中まで入力したコマンドに一致するモノを検索してくれたり、gitのサブコマンドも補完してくれたりで、もう手放せません。


f:id:yuroyoro:20120211114730p:image


git

dotfilesもgithubで管理してるし、もはやgitが無いと何もできませんわ。'brew install git'で入ってるはず。


設定に関しては、.gitconfigと.gitignoreを見てください。


dotfiles/.gitconfig at master · yuroyoro/dotfiles · GitHub
dotfiles/.gitignore at master · yuroyoro/dotfiles · GitHub


あと、前にこんなエントリも書いたので参考までに。


.gitconfigに設定してるaliasなどのまとめ - ゆろよろ日記

入門git
入門git
posted with amazlet at 12.02.11
Travis Swicegood
オーム社
売り上げランキング: 20990


入門Git
入門Git
posted with amazlet at 12.02.11
濱野 純(Junio C Hamano)
秀和システム
売り上げランキング: 105390

git-now

git nowは、tempコマンドのための独自サブコマンドで、このgit nowで細かくコミットして、git rebase -iでコミットをまとめる、というスタイルで開発してます。


tmp コミットのための独自サブコマンド git-now - アジャイルSEを目指すブログ


'brew install https://github.com/iwata/git-now/raw/master/git-now.rb'で入ります。

tig

tigはコマンドラインから利用できるgit brwoserです。なんとなくログを見るのに便利です。


f:id:yuroyoro:20120211114739p:image


コンソールから使える git ブラウザ、tig が超便利 - #生存戦略 、それは - subtech
Tig(text-mode interface for git)を使う | Kwappa研究開発室


tigに関しては、ひとつ重要な設定があります。デフォルトのtigのkey-bindでは、'G'でgit gcが走ってしまって色々と取り返しがつかないことになるので、.gitconfigに以下の用に設定しておきます。

[tig "bind"]
  generic = g move-first-line
  generic = G move-last-line

tmux

ターミナルマルチプレクサtmuxです。今まではscreenを利用していたのですが、色々あって移行しました。


tmuxを使う一番の利点は、ssh接続がネットワークの不調で切れてしまったり、間違ってCmd+wを押してウィンドウを閉じてしまっても、元の作業状態にすぐに復元できる点です。なので、sshでサーバに入ってコード書くときも、macでコード書くときも必ずtmuxを使ってます。


.tmux.confをごにょごにょする - mizchi log


tmuxも、'brew install tmux'で入ります。で、設定ファイルは"~/.tmux.conf"です。


dotfiles/.tmux.conf at master · yuroyoro/dotfiles · GitHub


tmuxは、tmuxコマンドで起動します。


f:id:yuroyoro:20120211114729p:image


tmuxのデフォルトは緑生い茂るステータスバーですが、自分は青ベースに設定しました。


プレフィックスキーをtに設定しています。その他のキーバインドもほぼscreen互換になるように設定してます。なので、&tl;Ctrl-t>の後にcで新しいウィンドウを生成、<Ctrl-c><Space>で次のウィンドウへ、<Ctrl-c><BS>で前のウィンドウへ移動します。


tmuxのキーバインド(プレフィックスキー:t)は、このような設定しました。

キーバインド コマンド
C-t ? ショートカットキーのリストを表示
C-t c 新しいウィンドウを作成
C-t n 次のウィンドウへ移動
C-t SPACE 次のウィンドウへ移動
C-t p 前のウィンドウへ移動
C-t BS 前のウィンドウへ移動
C-t w ウィンドウの選択メニューを表示
C-t d セッションのデタッチ
C-t : コマンドプロンプトの開始
C-t [ コピーモードの開始
C-t ] バッファ内容のペースト
C-t q ペインのインジケータを表示
C-t % ウィンドウを左右のペインに分割
C-t o 次のペインへ移動
C-t { ペインの入れ替え
C-t } ペインの入れ替え(逆順)
C-t l ペインの左右分割位置を左へ移動
C-t h ペインの左右分割位置を右へ移動
C-t x ペインの破棄


あと、copy-modeに入るのには<Ctrl-t>]なのですが、デフォルトの設定では<Ctrl-t>を押した後にControllキーから指を離して[を押す必要があって、素早くcopy-modeに入れません。なので、Controllキーから指を離さずに[を押してもcopy-modeに入れるように設定してあります。

# copy-mode ^[
unbind ^"["
bind -r ^"[" copy-mode
unbind ^]
bind -r ^] paste-buffer


mac osxでは、tmuxとクリップボードの連携に一手間必要なので、以下の記事を参考に、 reattach-to-user-namespaceコマンドを導入します。


Mac の tmux でクリップボードを使う。 - こせきの技術日記


しかし、.tmux.confに以下の用に.tmux.confに書いてしまうと、linux環境でtmuxが起動しなくなってしまいます。

# コレを.tmux.confに書いてしまうとlinux環境で使えなくなる……
set-option -g default-command "reattach-to-user-namespace -l zsh"


そこで、osxの時だけ上記の設定を行うラッパーコマンドtmuxxを導入します。


tmux wrapper script — Gist


このコマンドを~/binなどPATHの通った場所に実行権を与えて配置しておき、.zshrcなどでtmuxにaliasを設定します。これで、osxのときだけ"reattach-to-user-namespace"が有効になります。

# tmux
alias tmux='tmuxx'
alias tm='tmuxx'
alias tma='tmux attach'
alias tml='tmux list-window'


.tmux.confについては、以下も参考にしました。


.tmux.confをごにょごにょする - mizchi log
dotfiles/.tmux.conf at master · tokorom/dotfiles · GitHub

Vim

まずは、vim本体をMacVim-KaoriYaにします。


MacVimに対して、香り屋パッチの統合、ローカライズ、MacVim固有の設定、日本語文字コード自動判別、必要なshared library、Perl/Python/Rubyのdynamic loading、Objective-C対応ctags、などを追加しています。インストールしてすぐ使えるのが目標です。もちろんTerminal.app、iTerm.app上で動くコンソール版Vimとしても使用できます。



macvim-kaoriya -


MacVim KaoriYa - Google Project Hosting


ダウンロードしてきて、MacVim.appをApplicationsディレクトリに放り込みましょう。俺は、gVimはあまり使わずにTerminal.appからvimを起動する派なので、.bashrcや.zshrcなどで環境変数EDITORとaliasに設定をしておきます。

export EDITOR=/Applications/MacVim.app/Contents/MacOS/Vim
alias vi='env LANG=ja_JP.UTF-8 /Applications/MacVim.app/Contents/MacOS/Vim "$@"'
alias vim='env LANG=ja_JP.UTF-8 /Applications/MacVim.app/Contents/MacOS/Vim "$@"'
.vimrcについて

じゃあ、肝心のvimの設定に入ります。


そのまえに、「Vim テクニックバイブル」を買いましょう。Vim使いならこの本は持ってないとダメです。




で、俺の.vimrcはここで公開していて、コメントもできるだけ書いてあるのでまぁ参考にしてください。


みてわかるとおり、設定自体はは分割されていて、.vimrc本体からそれぞれの設定ファイルを読み込む形になってます。


dotfiles/.vimrc at master · yuroyoro/dotfiles · GitHub

"vunlde.vimで管理してるpluginを読み込む
source ~/dotfiles/.vimrc.bundle

"基本設定
source ~/dotfiles/.vimrc.basic
"StatusLine設定
source ~/dotfiles/.vimrc.statusline
"インデント設定
source ~/dotfiles/.vimrc.indent
"表示関連
source ~/dotfiles/.vimrc.apperance
"補完関連
source ~/dotfiles/.vimrc.completion
"Tags関連
source ~/dotfiles/.vimrc.tags
"検索関連
source ~/dotfiles/.vimrc.search
"移動関連
source ~/dotfiles/.vimrc.moving
"Color関連
source ~/dotfiles/.vimrc.colors
"編集関連
source ~/dotfiles/.vimrc.editing
"エンコーディング関連
source ~/dotfiles/.vimrc.encoding
"その他
source ~/dotfiles/.vimrc.misc
"プラグインに依存するアレ
source ~/dotfiles/.vimrc.plugins_setting
プラグイン管理にvundle.vimを使う

以前はpathogen.vimを使っていたのですが、vundle.vimに乗り換えました。今ならneovundleのほうがいいかも?


Vim-users.jp - Hack #215: Vundle で plugin をモダンに管理する
gmarik/vundle · GitHub
Vim-users.jp - Hack #238: neobundle.vim で plugin をモダンに管理する


vundleは基本的にpathogen.vimと同様に、.vim/bundleに以下にプラグインを放り込むようになっています。pathogen.vimと異なるのは、gitのsubmoduleではなく、明示的に.vimrcにBundle 'plugin-name'のように利用するプラグインを指定するようになっている点です。.vimrcでコメントアウトすることで、気軽にプラグインの有効/無効を切り替えることが可能です。

"vunlde.vimで管理してるpluginを読み込む

filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

" Edit {{{
  " NERD_commenter.vim :最強コメント処理 (<Leader>c<space>でコメントをトグル)
  Bundle 'scrooloose/nerdcommenter.git'

  " 自動閉じタグ
  " Bundle 'yuroyoro/vim-autoclose'

  " -- でメソッドチェーン整形
  Bundle 'c9s/cascading.vim'


vundleの導入は、.vimディレクトリにgit cloneするだけです。vundleが有効になった状態で、コマンドで"BundleInstall plugin-name"と指定する事で、vim-script.orgやgithubからプラグインをダウンロードします。

f:id:yuroyoro:20120211114727p:image
f:id:yuroyoro:20120211114726p:image

補完にneocomplecacheを使う

vimでの補完と言えば、AutoComplePopが有名ですが、今は色々と高機能なneocomplecache.vimを使っています。


neocomplecacheの使い方や設定は、VimテクニックバイブルやVim-users.jp - neocomplcacheなどに詳しく解説があるので省きます。自分は、Scala用のディクショナリを設定してscalaのLibraryからクラス名などが補完されるようにしています。


f:id:yuroyoro:20101104224756p:image


neocomplecache関連の設定ファイルはコレです。


404 · GitHub


unite.vim

unite.vimは、バッファやファイルなど様々な入力ソースを検索し、ファイルを開いたりディレクトリに移動したりyankしたりできます。


例えば、:Unite fileとコマンドを入力すると、このようにカレントディレクトリ以下からファイルを選択するバッファが開きます。


f:id:yuroyoro:20101104224759p:image


ここで、ファイル名などを入力することで絞り込みが行われます。ファイルやディレクトリを選択した状態でTABを押すと、可能なアクションが表示されます。


f:id:yuroyoro:20101104224800p:image


例えば、exというアクションを選択すると、選んだファイル名が入力された状態でコマンドモードに入ります。


f:id:yuroyoro:20101104225130p:image


自分は、uniteのプレフィックスキーはfに設定しています。ノーマルモードでfmを押すと、最近使ったファイルが一覧ででます。他にもffでカレントディレクトリ以下から、fdでそのバッファのあるディレクトリからファイルを選択できるようにしてます。


f:id:yuroyoro:20120211114738p:image

nnoremap    [unite]   <Nop>
nmap    f [unite]

" 分割しないでuniteのbufferを表示する
nnoremap [unite]u  :<C-u>Unite -no-split<Space>

" 全部乗せ
nnoremap <silent> [unite]a  :<C-u>UniteWithCurrentDir -no-split -buffer-name=files buffer file_mru bookmark file<CR>
" ファイル一覧
nnoremap <silent> [unite]f  :<C-u>Unite -no-split -buffer-name=files file<CR>
" バッファ一覧
nnoremap <silent> [unite]b  :<C-u>Unite -no-split buffer<CR>
" 常用セット
nnoremap <silent> [unite]u  :<C-u>Unite -no-split buffer file_mru<CR>
" 最近使用したファイル一覧
nnoremap <silent> [unite]m  :<C-u>Unite -no-split file_mru<CR>
" 現在のバッファのカレントディレクトリからファイル一覧
nnoremap <silent> [unite]d  :<C-u>UniteWithBufferDir -no-split file<CR>


通常は、uniteのバッファは新しいウィンドウが作成されて開くのですが、縦分割してたりtaglist.vimのウィンドウが出てたり、MiniBufferExplorerがあったりすると、uniteのウィンドウを閉じた後のウィンドウサイズがうまく復元されませんでした。なので、今カーソルのあるウィンドウを再利用してuniteのバッファを出すように、--no-splitオプションをつけています。

vim-powerlineでカッコイイステータスラインを使う

Lokaltog/vim-powerline · GitHub


今回、iTerm2に移行したのは、このvim-poewlineがTerminal.appでは上手く表示されないからです。このvim-poewlineを導入すると、こんな感じでステータスラインがカッコよくなります。

ノーマルモード:
f:id:yuroyoro:20120211114737p:image

インサートモード:
f:id:yuroyoro:20120211114736p:image


ヴィジュアルモード:
f:id:yuroyoro:20120211114735p:image


このように、モードによって色が変わったりもします。カコイイ。


ですが、このような表示するには、フォントにパッチを当てる必要があります。githubのwikiに方法が書いてあるので、基本的になこの通りに普段使ってるフォントにパッチを当てればオーケーです。


また、すでにパッチ適用済みのフォントも配付されています。面倒であればこれらを使うのがよいでしょう。


Patched fonts · Lokaltog/vim-powerline Wiki · GitHub


では、パッチ適用の手順です。俺は あずきフォントS2Gうにフォントにパッチを当てました。ふつうにプログラミングにつかうなら、Rictyなんかがいいんじゃないかと思います。



【Vim】Powerline でリッチなステータスラインを使う
- blog.remora.cx


この記事では、cygwin環境での方法が書いてあります。mac osxでは、以下の手順でパッチを当てます。

fontforgeをインストールする

brew install fontforge


githubにあるvim-powerlineをcloneする

git clone https://github.com/Lokaltog/vim-powerline.git


fontpatcherで、好みのフォントにパッチをあてる

cd vim-powerline/fontpatcher
./fontpatcher MyFontFile.ttf


パッチをあてるとfont名-Poewline.ttfとかいうファイル名でパッチをあてたフォントファイルが生成されるので、それをフォントディレクトリにコピーするなり、Fontbookでインストールするナリします。

cp MyFontFile-Powerline.otf ~/Library/Fonts


で、パッチを当てたフォントを使用するように、iTerm2に設定します。


f:id:yuroyoro:20120211114734p:image


あとは、.vimrcに以下の設定を加えればオーケーです。

let g:Powerline_symbols = 'fancy'
taglist.vim

taglist.vim : ソースコード上のメソッド宣言、変数宣言の一覧を表示 — 名無しのvim使い


taglist.vimは、ctagsの結果をアウトラインとして表示してくれるプラグインです。このように表示されます。


f:id:yuroyoro:20120211114725p:image


mac osxにデフォルトで入ってるctagsは、Exuberant Ctagsではないので、そのままではtaglist.vimを利用できません。brewでctagsをインストールし、デフォルトの/usr/bin/ctags は削除するなりしてしまいましょう。

vimshell

Vimの中でShell機能を実現するプラグインです。スゴすぎる…!


f:id:yuroyoro:20101104225131p:image


このように、vimの中でシェルが動いていて、zshのように扱えます(下のウィンドウがVimShellです)。


insert modeでコマンド入力、normal modeでは通常のvimと同じように、Visual modeで選択できたり検索できたりします。さらに、neocomplecacheによる補完ができたりと強力です。


screentとvim間での連携がいまいちな感じですので、VimShelleでコマンドをほげほげしてyankしたりとか夢がひろがりんぐです。これから活用したいと思います。

その他のプラグイン

導入しているプラグインは、.vimrc.bundleに書いてあります。

dotfiles/.vimrc.bundle at master · yuroyoro/dotfiles · GitHub

"vunlde.vimで管理してるpluginを読み込む

filetype off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

" Edit {{{
  " NERD_commenter.vim :最強コメント処理 (<Leader>c<space>でコメントをトグル)
  Bundle 'scrooloose/nerdcommenter.git'

  " 自動閉じタグ
  " Bundle 'yuroyoro/vim-autoclose'

  " -- でメソッドチェーン整形
  Bundle 'c9s/cascading.vim'

  " visually indent guide
  Bundle 'nathanaelkane/vim-indent-guides'

  " XMLとかHTMLとかの編集機能を強化する
  Bundle 'xmledit'

  " Align : 高機能整形・桁揃えプラグイン
  Bundle 'Align'

  " フィルタリングと整形
  Bundle 'godlygeek/tabular'

  " マルチバイト対応の整形
  Bundle 'h1mesuke/vim-alignta'

  " YankRing.vim : ヤンクの履歴を管理し、順々に参照、出力できるようにする
  Bundle 'YankRing.vim'

  " undo履歴を追える (need python support)
  Bundle 'Gundo'

  " surround.vim : テキストを括弧で囲む/削除する
  Bundle 'tpope/surround.vim'

  " smartchr.vim : ==などの前後を整形
  Bundle 'smartchr'

  " vim-operator-user : 簡単にoperatorを定義できるようにする
  Bundle 'operator-user'

  " operator-camelize : camel-caseへの変換
  Bundle 'operator-camelize'

  " operator-replace : yankしたものでreplaceする
  Bundle 'operator-replace'

  " textobj-user : 簡単にVimエディタのテキストオブジェクトをつくれる
  Bundle 'textobj-user'

  " vim-textobj-syntax : syntax hilightされたものをtext-objectに
  Bundle 'kana/vim-textobj-syntax.git'

  " vim-textobj-plugins : いろんなものをtext-objectにする
  Bundle 'thinca/vim-textobj-plugins.git'

  " vim-textobj-lastpat : 最後に検索されたパターンをtext-objectに
  Bundle 'kana/vim-textobj-lastpat.git'

  " vim-textobj-indent : インデントされたものをtext-objectに
  Bundle 'kana/vim-textobj-indent.git'

  " vim-textobj-function : 関数の中身をtext-objectに
  Bundle 'kana/vim-textobj-function.git'

  " vim-textobj-fold : 折りたたまれたアレをtext-objectに
  Bundle 'kana/vim-textobj-fold.git'
  Bundle 'textobj-rubyblock'

  " vim-textobj-entire : buffer全体をtext-objectに
  Bundle 'textobj-entire'

  " 「foo」 or 【bar】などをtext-objectに
  Bundle 'textobj-jabraces'

  " 改造したmonday.vim(git rebase -i とかtrue/falseとか)
  " Bundle 'yuroyoro/monday'

  " <C-a>でtrue/false切替。他色々
  Bundle 'taku-o/vim-toggle'

" }}}

" Completion {{{
  " 補完 autocomplpop.vim : insertmodeで自動で補完をpopup
  " Bundle 'AutoComplPop'

  " 補完 neocomplcache.vim : 究極のVim的補完環境
  Bundle 'Shougo/neocomplcache'

  " rubyでrequire先を補完する
  " Bundle 'ujihisa/neco-ruby'

  " A neocomplcache plugin for English, using look command
  " Bundle 'ujihisa/neco-look'
" }}}

" Searching/Moving{{{
  " smooth_scroll.vim : スクロールを賢く
  Bundle 'Smooth-Scroll'

  " vim-smartword : 単語移動がスマートな感じで
  Bundle 'smartword'

  " camelcasemotion : CamelCaseやsnake_case単位でのワード移動
  Bundle 'camelcasemotion'

  " <Leader><Leader>w/fなどで、motion先をhilightする
  Bundle 'EasyMotion'

  " matchit.vim : 「%」による対応括弧へのカーソル移動機能を拡張
  Bundle 'matchit.zip'

  " ruby用のmatchit拡張
  Bundle 'ruby-matchit'

  " grep.vim : 外部のgrep利用。:Grepで対話形式でgrep :Rgrepは再帰
  Bundle 'grep.vim'

  " eregex.vim : vim正規表現rubyperl正規表現な入力でできる :%S/perlregex/
  Bundle 'eregex.vim'

  " open-browser.vim : カーソルの下のURLを開くor単語を検索エンジンで検索
  Bundle 'tyru/open-browser.vim'

" }}}

" Programming {{{
  " quickrun.vim : 編集中のファイルを簡単に実行できるプラグイン
  Bundle 'thinca/vim-quickrun'

  " perldocやphpmanual等のリファレンスをvim上で見る
  Bundle 'thinca/vim-ref'

  " SQLUtilities : SQL整形、生成ユーティリティ
  Bundle 'SQLUtilities'

  " vim-ruby : VimRubyを扱う際の最も基本的な拡張機能
  Bundle 'ruby.vim'

  " rails.vim : rails的なアレ
  Bundle 'tpope/vim-rails'

  " Pydiction : Python用の入力補完
  Bundle 'Pydiction'

  " ソースコード上のメソッド宣言、変数宣言の一覧を表示
  Bundle 'taglist.vim'

  " tagsを利用したソースコード閲覧・移動補助機能 tagsファイルの自動生成
  Bundle 'Source-Explorer-srcexpl.vim'

  " NERD_tree, taglist, srcexpl の統合
  Bundle 'trinity.vim'
" }}}
"
" Syntax {{{
  " haml
  Bundle 'haml.zip'

  " JavaScript
  Bundle 'JavaScript-syntax'

  " jQuery
  Bundle 'jQuery'

  " nginx conf
  Bundle 'nginx.vim'

  " markdown
  Bundle 'tpope/vim-markdown'

  " coffee script
  Bundle 'kchmck/vim-coffee-script'

  " python
  Bundle 'yuroyoro/vim-python'

  " scala
  Bundle 'yuroyoro/vim-scala'

  " syntax checking plugins exist for eruby, haml, html, javascript, php, python, ruby and sass.
  Bundle 'scrooloose/syntastic'
" }}}

" Buffer {{{
  " DumbBuf.vim : quickbufっぽくbufferを管理。 "<Leader>b<Space>でBufferList
  Bundle 'DumbBuf'

  " minibufexpl.vim : タブエディタ風にバッファ管理ウィンドウを表示
  Bundle 'minibufexpl.vim'

  " NERDTree : ツリー型エクスプローラ
  Bundle 'The-NERD-tree'

  " vtreeexplorer.vim : ツリー状にファイルやディレクトリの一覧を表示
  Bundle 'vtreeexplorer'
" }}}


" Encording {{{
  Bundle 'banyan/recognize_charcode.vim'
" }}}

" Utility {{{

  " vimshell : vimのshell
  Bundle 'Shougo/vimshell.git'

  " vimproc : vimから非同期実行。vimshelleで必要
  Bundle 'Shougo/vimproc.git'

  " vim-altercmd : Ex command拡張
  Bundle 'tyru/vim-altercmd'

  " vim Interface to Web API
  Bundle 'mattn/webapi-vim'

  " cecutil.vim : 他のpluginのためのutillity1
  Bundle 'cecutil'

  " urilib.vim : vim scriptからURLを扱うライブラリ
  Bundle 'tyru/urilib'

  " ステータスラインに顔文字を表示
  " Bundle 'mattn/hahhah-vim'

  " utillity
  Bundle 'L9'

  " Buffer管理のLibrary
  Bundle 'thinca/vim-openbuf'

  " vimdoc 日本語
  Bundle 'yuroyoro/vimdoc_ja'

  " vim上のtwitter client
  Bundle 'TwitVim'

  " Lingrのclient
  Bundle 'tsukkee/lingr-vim'

  " vimからGit操作する
  Bundle 'tpope/vim-fugitive'

  " ステータスラインをカッコよくする
  Bundle 'Lokaltog/vim-powerline'


" }}}

" ColorSchema{{{{
  " color schema 256
  Bundle 'desert256.vim'
  Bundle 'mrkn256.vim'
  Bundle 'tomasr/molokai'
  Bundle 'yuroyoro/yuroyoro256.vim'
" }}}

" Unite {{{{
  " unite.vim : - すべてを破壊し、すべてを繋げ - vim scriptで実装されたanythingプラグイン
  Bundle 'Shougo/unite.vim'
  Bundle 'tsukkee/unite-help'
  Bundle 'h1mesuke/unite-outline'
  " Bundle 'Sixeight/unite-grep'
  Bundle 'basyura/unite-rails'
  Bundle 'thinca/vim-unite-history'
  Bundle 'tsukkee/unite-tag'
  Bundle 'choplin/unite-vim_hacks'

" }}}
"
Bundle 'gmarik/vundle'

filetype plugin indent on
その他オヌヌメのvim設定

以前書いた記事からサルベージした、特にオヌヌメの設定を紹介しますぁ。

カーソル行のハイライト

ふつーにset cursorlineと設定すると、ウィンドウを分割した場合にフォーカスが当たっていないウィンドウもハイライトされてしまって見にくいので、カレントウィンドウのみに罫線を引くように設定します。

  " カーソル行をハイライト
  set cursorline
  " カレントウィンドウにのみ罫線を引く
  augroup cch
    autocmd! cch
    autocmd WinLeave * set nocursorline
    autocmd WinEnter,BufRead * set cursorline
  augroup END

hi clear CursorLine
hi CursorLine gui=underline
highlight CursorLine ctermbg=black guibg=black


こんなように、右側のみに罫線がでるようになります。わかりにくいかもしれませんが、右のウィンドウに罫線が引かれてます。


f:id:yuroyoro:20101104223735p:image

検索ハイライトの消去

/hogeなどで検索したキーワードのハイライトを、ESC2回押しでクリアするようにします。

"Escの2回押しでハイライト消去
nmap <ESC><ESC> ;nohlsearch<CR><ESC>
.vimrc<e3><82><92>"nnoremap"で検索したときで、

f:id:yuroyoro:20101104223736p:image

ここでESC2回押すとクリアされますお。

f:id:yuroyoro:20101104223737p:image

helpを素早くひく

でカーソル下のキーワードでヘルプを引きます。ふつーはなのでしょうが、後述するウィンドウの移動でを使っているので、俺はにしてます。

" Ctrl-iでヘルプ
nnoremap <C-i>  :<C-u>help<Space>
" カーソル下のキーワードをヘルプでひく
nnoremap <C-i><C-i> :<C-u>help<Space><C-r><C-w><Enter>
保存時の空白除去

「私は行末のスペースを許さないっ!!」ので、buffer保存時に行末のスペースを削除するようにしてます。あとタブではなくスペース派なので、タブもスペースに変換してます。ftpluginでfiletype毎に設定するのがいんじゃないでしょうか?

" 保存時に行末の空白を除去する
autocmd BufWritePre * :%s/\s\+$//ge
" 保存時にtabをスペースに変換する
autocmd BufWritePre * :%s/\t/  /ge
コマンド入力を素早く

これは';'キーと':'キーを入れ替えることで、素早くコマンドモードに入れるようにしています。特に、US配列だと':'を入力するのにShiftキーが必要になるため、俺に取っては必須の設定です。この設定にしてから生産性が向上した気がする……。

" ;でコマンド入力( ;と:を入れ替)
noremap ; :
ウィンドウ移動を楽に

俺はわりとウィンドウを分割する派で、ウィンドウ間をよく移動するので、CTRL-hjklでウィンドウを移動できるようにしてまlとか入力しにくいので。

" CTRL-hjklでウィンドウ移動
nnoremap <C-j> :<C-w>j
nnoremap <C-k> :<C-k>j
nnoremap <C-l> :<C-l>j
nnoremap <C-h> :<C-h>j

最後に

ターミナルでのCLI作業は、慣れるとものすごく快適になって離れられなくなります。なにより、一度憶えてしまえば大抵の環境で作業できるようになります。


zshもtmuxもvimもgitも、スポーツと同じく反復練習で体に憶えさせる必要があります。辛抱強く使っていれば、考える前に勝手に指が動くようになってるので、今まで敬遠していた人もあきらめずに頑張ってみてください。俺も、まだまだ精進しますので。

とっておきのgit設定


このクソ長い記事を最後までよんでくださった方に、gitでの生産性が1000倍に向上するとっておきの設定をお教えします!!!!


このようにaliasを設定します。これだけ!!!

alias oppai='git'


すると、'oppai show'とか!!!
f:id:yuroyoro:20120211114724p:image

'oppai fetch'とか!!!
f:id:yuroyoro:20120211114723p:image


'oppai pull --prune'とか!!!
f:id:yuroyoro:20120211114722p:image


素晴らしいデスね????!!!!!!1111