Web屋のためのHow to Vim (チラ裏)

/web/tool

Note: この記事は、3年以上前に書かれています。Webの進化は速い!情報の正確性は自己責任で判断してください。

Vim Advent Calendar 2011 43日目の記事です。というかもう2012年ですね! あけましておめでとうございます。この度は前回の続き。本当は翌日にでも書くつもりだったけど伸ばしに伸びたWeb屋のためのVim特集をお送りします。初めに言っときますが、3部作です。つまりこの記事は2/3。どうしてこうなった。

Web屋のための Vim-Starter-kit

Demo: Vim Starter-Kit from sigwyg on Vimeo.

はい、けっきょく作ってしまったんですよ。初心者導入キット。黒い画面恐怖症の方々のためにGit依存しないように作ったらNeoBundleでもVundleでもなくPathogen管理となり、Uniteの代わりにNERDTreeとなりました。できればUnite.vim使って欲しい。でもまずVimそのものに慣れてからのほうが良いと思うんだよね。

ファイル構成は以下のようになってます。

.vim
├── autoload
│   └── pathogen.vim
├── bundle
│   ├── QuickBuf
│   ├── Sass
│   ├── endtagcomment.vim
│   ├── gundo.vim
│   ├── html5.vim
│   ├── jslint.vim
│   ├── matchit.vim
│   ├── neocomplcache
│   ├── nerdtree
│   ├── scss-syntax.vim
│   ├── snipmate.vim
│   ├── vim-alignta
│   ├── vim-css3-syntax
│   ├── vim-fontzoom
│   ├── vim-qfreplace
│   ├── vim-surround
│   └── zencoding-vim
└── colors
     └── ir_black.vim

インストール

僕はMacなのでMac環境前提で作ってます。Mac/Linuxであれば、ユーザフォルダに置くだけ(ex. /Users/sigwyg/.vimrc)。Winであれば、.vimrcを_vimrcにリネームするなど配置に若干の手間が掛かります。まあ、そこは追々...

導入したプラグイン

HTMLを編集するデザイナ/コーダーを想定して作ってます。pathogen管理なのは非Git環境を想定したためであり、Uniteが無いのは右も左も判らないうちにUniteを使うのは避けるべきだと思うからです。大事なことなので2度言いました。

pathogen.vim [解説記事] プラグイン管理用のプラグインです。Vimプラグインを、プラグイン単位のディレクトリで管理できるようになります。この利点については過去の記事で。
ir_black.vim [解説記事] カラースキーマです。デフォルトがir_blackなのは趣味。お好みのカラースキーマを見つけたら、colorsフォルダにぶち込んで「colorscheme ir_black」とでも書いて置けば宜しい。
QuickBuf [解説記事] 現在開いているバッファの一覧を出したり、移動したり削除したりが簡単にできるプラグインです。
Sass [解説記事] Sass記法用のシンタックスハイライトです。
endtagcomment.vim[解説記事] HTMLの閉じタグにコメントを追加するスクリプト。@hokacchaが作成し、@kosei27がfolkしています。
gundo.vim [解説記事] VimのUndoツリーを視覚化するプラグインです。利用するにはPythonのパスが通っている必要がありますが、MacVimやGVimを使っているなら特に問題は無いでしょう。
html5.vim [解説記事] HTML5のタグや属性のコード補完とハイライトを提供するプラグインです。
jslint.vim [解説記事] Javascriptのエラーチェックができるプラグインです。エラー箇所をQuickfixウィンドウから確認することができます。
matchit.vim [解説記事] %キー移動を拡張して、対応するタグにも移動できるようになります。Vim標準でパッケージされてますが、デフォルトでは有効になっていません。(:h matchit-install)
neocomplcache [解説記事] 定番の自動補完プラグインです。
NERDTree [解説動画] ツリー型のファイラーです。
scss-syntax.vim [解説記事] scssファイルのシンタックスハイライトを提供します。
snipmate.vim [解説動画] 自由度の高いスニペット・プラグイン
vim-alignta [解説記事]コード整形用のプラグイン。マルチバイト対応。
vim-css3-syntax [解説記事] CSS3用のシンタックスハイライト。
vim-fontzoom [解説記事] プレゼン用。文字サイズを変更します。Macだとcommand+等で代用できますが、デフォルトの文字サイズに戻す「:Fontzoom!」が地味に重宝します。
vim-qfreplace [解説記事] Quickfixウィンドウを利用して複数ファイルの置換を行います。
vim-surround [解説動画] Vimのテキストオブジェクトを拡張します。(この解説動画はちょいと古い。現在のキーマップはsでなくS)
zencoding-vim [解説記事] CSSセレクタからHTMLタグを一括生成したりします。

おすすめ設定

ざっとキーマップ等をご紹介。あくまで参考なので、納得したら適当に弄っちゃってください。

noremap <Up> <Nop>
noremap <Down> <Nop>
noremap <Left> <Nop>
noremap <Right> <Nop>
inoremap <Up> <Nop>
inoremap <Down> <Nop>
inoremap <Right> <Nop>
練習用に、矢印キーを消してあります。hjklを使ってくださいねー
nnoremap zl zL
nnoremap zh zH
水平方向の移動を簡単にしてます。nowrapな時に便利。
noremap j gj
noremap k gk
行移動を見た目上に行うようにしています。wrap指定している場合、見た目上は数行に改行されていても内部的には1行なので。
noremap gh gT
noremap gl gt
タブ移動です。tは遠いよね ==)
noremap <CR> i<CR><ESC>
normalモードでもカーソル位置で改行できるようにしてます。

inoremap {} {}<LEFT>
inoremap [] []<LEFT>
inoremap () ()<LEFT>
inoremap "" ""<LEFT>
inoremap '' ''<LEFT>
inoremap <> <><LEFT>
inoremap []5 [%  %]<LEFT><LEFT><LEFT>
inoremap {}5 {%  %}<LEFT><LEFT><LEFT>
ブラケット入力時にスムーズに編集できるように。最近びみょーかもと思い始めてますが。
nnoremap n nzz
nnoremap N Nzz
nnoremap * *zz
nnoremap # #zz
nnoremap g* g*zz
nnoremap g# g#zz
検索結果に移動したとき、その位置を画面の中央にします。上端とかに移動しても気付きにくいので。
cnoremap  / getcmdtype() == '/' ? '\/' : '/'
検索時、「/」の入力をエスケープします。

nnoremap <silent> <S-Left>  :5wincmd <<CR>
nnoremap <silent> <S-Right> :5wincmd ><CR>
nnoremap <silent> <S-Up>    :5wincmd -<CR>
nnoremap <silent> <S-Down>  :5wincmd +<CR>
ウィンドウ分割時にウィンドウサイズを調節する設定です。Shiftキー+矢印キー。

nnoremap bb :b#<CR>
nnoremap bp :bprevious<CR>
nnoremap bn :bnext<CR>
nnoremap bd :bdelete<CR>
バッファの一覧・移動・削除です。QuickBuf使うまでもないときに。
nnoremap gc `[v`]
vnoremap gc :<C-u>normal gc<CR>
onoremap gc :<C-u>normal gc<CR>
「最後に編集したテキスト」を選択するキーマップ。コピペ後などに重宝。「gv」と似て非なる使い勝手。
nnoremap <Space>r :<C-u>execute "source " expand("%:p")<CR>
表示中のバッファをVimスクリプトと見なして再読込。.vimrc変更後など。
nnoremap <Space>v :<C-u>source $MYVIMRC \| if has('gui_running') \| source $MYGVIMRC \| endif <CR>
vimrcとgvimrcを再読込。vimrc変更後など。Starter-Kitにはgvimrcが含まれていないことに留意されたし。
noremap ; :
noremap : ;
「:」と「;」を入れ替えるキーマップ。コロンは使用頻度の高いキーの1つなので、特にUSキーボードだとすげー楽になります。
inoremap jj <Esc>
「jj」をEscとして使用するキーマップ。別にjjでなくても良いんだけど、エスケープキーは最も使用頻度の高いキーなので(以下略

あと気がついたものがあればREADMEに追記していきます。

Next Step!

Vimの操作に慣れたら、Unite.vimに挑戦してみましょう! 連携が強力なVimFilerやneobundle.vim、非同期処理に必須なvimprocを加えると尚よし。

  • NERDTreeは、:Unite file あるいはVimFiler に
  • QuickBufは、:Unite buffer に
  • pathogenは、neobundle.vim に、それぞれ代替することができます。

あとプリインストールには含めませんでしたが、YankRingっていうYank(コピー)履歴からコピペを選べるプラグインもありまして、そこそこ人気なのですが、これも:Unite history/yankで代替できます。というかだから入れませんでした。何を言っているのかわからねーと思うが...

上記も参考までに。Enjoy! (^^)/ !

Note: スパム対策が面倒なので、コメント投稿を廃止しました。以前のコメントは残します。
ご意見・ご要望はtwitter@sigwygかはてブコメントにて。