Note: この記事は、3年以上前に書かれています。Webの進化は速い!情報の正確性は自己責任で判断してください。
@hamashunに今さら捧ぐ。けっこう前に出すと言いつつ、伸ばし伸ばしになってたネタを投下してみます。あんまり弄ってないけども。

まず軽く紹介。Vimはviから派生したテキストエディタで、特にUNIX系OS(Linux、Mac)ではEmacsと並んで広く使用されているエディタです。プログラマによって開発されたプログラマのためにエディタであり、全ての操作をキーボードから行えることが特徴かな。基本的な操作方法は手前味噌ですが「Vim 基本操作まとめ」を参照のこと。
んで、「.vimrc」という設定ファイルを――ホームディレクトリなり、exeファイルのあるフォルダなりに――用意してやることによって、好きなように拡張して使っていくわけです。無ければ単純なVi互換モードとして動きます。今回はSig.の.vimrcを例にとって、設定ファイルの中身を軽く紹介してみます。サクッと行こう!
設定ファイルといっても、コマンドモードで「:set number」とか打ったことあれば、基本的に似たような決め打ちを列挙していくだけです。条件分岐とかも書けるけど、まあ十分使えます。
set nocompatibleset tags=~/.tags
まずは Vimの各種機能を利用する「おまじない」。2行目はタグジャンプを使う場合に、生成したタグファイルを指定する部分。無くても全く問題ない。
" display" ----------------------set numberset rulerset cmdheight=2set laststatus=2set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8Pset titleset linespace=0set wildmenuset showcmd"set textwidth=78"set columns=100"set lines=150
続いてウィンドウ幅やステータスバーの設定をば。ちなみに二重引用符でコメントです、あしからず。
上から行番号の表示、ステータス行にルーラーを表示、コマンド行やステータス行の表示調整や、ファイル名補完時のメニュー表示機能の追加など。最後の3行はウィンドウの大きさや自動改行の挿入位置ですね。78字での自動改行は、コードレイアウトのガイドラインですが、他人のソースを修正したり、HTMLやテンプレファイルを操作するには邪魔なので消してます。
" syntax color" ---------------------syntax oncolorscheme ronhighlight LineNr ctermfg=darkgrey
シンタックスハイライト。元からある色セットにちょろっと追記してるだけです。Macだともうちょい弄ってるけど、まあ好みで。
" search" ----------------------set ignorecaseset smartcaseset wrapscanset hlsearch
検索用。大文字小文字の無視(しかし大文字だけの文字列にはマッチ)、折り返し検索を有効にして、検索文字列をハイライトさせます。ちなみに「set incsearch」にてインクリメンタル・サーチが利用できますが、なんか好みの問題で使いません。
" edit" ---------------------set autoindentset cindentset showmatchset backspace=indent,eol,startset clipboard=unnamedset pastetoggle=<F12>set guioptions+=a
文字入力まわり。インデント、対応する括弧の表示(挿入モード)、<BS>の動作を定義(挿入モード)、システムクリップボードとGUIの設定、ペーストモード切替キーの定義などです。特にペーストモードは重宝してますな。何もしないとコピペ後にインデント崩れたり、幾つかのキーバインドと干渉しちゃったりしますから。
" tab" --------------------set tabstop=4set expandtabset smarttabset shiftwidth=4set shiftroundset nowrap
タブ幅に関わる設定。インデントに<Tab>キーを使うことを前提に、いろいろ設定してます。1レベルが半角スペース4つ分で、<Tab>キー押したときにスペース4つ出力、とかですね。
" keymap" --------------------set bioskeyset timeoutset timeoutlen=500" movennoremap <Space>h <Home>nnoremap <Space>l <End>inoremap <Space>h <Home>inoremap <Space>l <End>inoremap <C-h> <Left>inoremap <C-j> <Down>inoremap <C-k> <Up>inoremap <C-l> <Right>" date/timeinoremap <Leader>date <C-R>=strftime('%Y/%m/%d (%a)')<CR>inoremap <Leader>time <C-R>=strftime('%H:%M')<CR>inoremap <Leader>w3cd <C-R>=strftime('%Y-%m-%dT%H:%M:%S+09:00')<CR>" text-editinoremap <C-d> <Del>noremap <CR> i<CR><ESC>" brackets"inoremap {} {}<LEFT>inoremap [] []<LEFT>inoremap () ()<LEFT>inoremap "" ""<LEFT>inoremap '' ''<LEFT>inoremap <> <><LEFT>inoremap []5 [% %]<LEFT><LEFT><LEFT>" searchnnoremap n nzznnoremap N Nzznnoremap * *zznnoremap # #zznnoremap g* g*zznnoremap g# g#zz" windownnoremap <silent> <C-x>1 :only<CR>nnoremap <silent> <C-x>2 :sp<CR>nnoremap <silent> <C-x>3 :vsp<CR>" buffernnoremap <silent> bb :b#<CR>nnoremap <silent> bp :bp<CR>nnoremap <silent> bn :bn<CR>nnoremap <silent> bd :bd<CR>nnoremap ls :ls<CR>:b" omni"function InsertTabWrapper()" if pumvisible()" return "\<c-n>"" endif" let col = col('.') - 1" if !col || getline('.')[col - 1] !~ '\k\|<\|/'" return "\<tab>"" elseif exists('&omnifunc') && &omnifunc == ''" return "\<c-n>"" else" return "\<c-x>\<c-o>"" endif"endfunction"inoremap <tab> <c-r>=InsertTabWrapper()<cr>
キーバインドいろいろ設定。ある意味いちばん弄り甲斐のある部分ですね。バッファの切替と、ブラケット記述時の左シフトなんか重宝してるかな。あとノーマルモードからも改行できるようにしてます。最後の部分はオムニ補完。最初こそ物珍しくて使ってたけど、なんだか邪魔に感じて消してます。
" backup" --------------------set backupset backupdir=~/vim_backupset swapfileset directory=~/vim_swap
バックアップやスワップファイルの保存先を指定してます。ここで明示的に指定しとくと色々やりやすくなりますね。主に某エラー画面対策でスワップの削除とか。
" ------------------------------------------------" encoding" > http://www.kawaz.jp/pukiwiki/?vim#cb691f26" ------------------------------------------------"if &encoding !=# 'utf-8'set encoding=japanset fileencoding=japanendifif has('iconv')let s:enc_euc = 'euc-jp'let s:enc_jis = 'iso-2022-jp'" iconvがeucJP-msに対応しているかをチェックif iconv("\x87\x64\x87\x6a", 'cp932', 'eucjp-ms') ==# "\xad\xc5\xad\xcb"let s:enc_euc = 'eucjp-ms'let s:enc_jis = 'iso-2022-jp-3'" iconvがJISX0213に対応しているかをチェックelseif iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==#"\xad\xc5\xad\xcb"let s:enc_euc = 'euc-jisx0213'let s:enc_jis = 'iso-2022-jp-3'endif" fileencodingsを構築if &encoding ==# 'utf-8'let s:fileencodings_default = &fileencodingslet &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'let &fileencodings = &fileencodings .','. s:fileencodings_defaultunlet s:fileencodings_defaultelselet &fileencodings = &fileencodings .','. s:enc_jisset fileencodings+=utf-8,ucs-2le,ucs-2if &encoding =~# '^\(euc-jp\|euc-jisx0213\|eucjp-ms\)$'set fileencodings+=cp932set fileencodings-=euc-jpset fileencodings-=euc-jisx0213set fileencodings-=eucjp-mslet &encoding = s:enc_euclet &fileencoding = s:enc_eucelselet &fileencodings = &fileencodings .','. s:enc_eucendifendif" 定数を処分unlet s:enc_eucunlet s:enc_jisendif" 日本語を含まない場合は fileencoding に encoding を使うようにするif has('autocmd')function! AU_ReCheck_FENC()if &fileencoding =~# 'iso-2022-jp' && search("[^\x01-\x7e]", 'n') == 0let &fileencoding=&encodingendifendfunctionautocmd BufReadPost * call AU_ReCheck_FENC()endif" 改行コードの自動認識set fileformats=unix,dos,mac" □とか○の文字があってもカーソル位置がずれないようにするif exists('&ambiwidth')set ambiwidth=doubleendif
ファイル開くときの文字コード判定部分。ある意味Vimで一番めんどくさい。ここまでやってもたまに間違えるんですよね~。まあ携帯サイトとか、半角カナとか普通なんで半ば諦めてますが。
残り
あとは幾つかプラグイン用の指定があるくらいなので、.vimrcとしてはこんなもんですな。
.vimrcは公開するのが文化的なものがあるのか、ちょちょいとググれば山のように見つかりますね。この記事もいっぱいある中の一例くらいに捉えていただければ貴方のVimライフが広がるかと!
ちなみなプラグイン
これくらいかな。入れてるのって。しょーじきたまにNERD_treeが凄い便利! ...て以外はあんま使うこと無い。surround.vimとか、評判良いのは耳にしますけどねー。なんか探し始めたら一日余裕で潰しそうで自重してますw
参考
memo: Vimpiという便利サービスもあるみたい。e-luckさん多謝(´≧ω≦)b
Note: スパム対策が面倒なので、コメント投稿を廃止しました。以前のコメントは残します。
ご意見・ご要望はtwitter@sigwygかはてブコメントにて。