Note: この記事は、3年以上前に書かれています。Webの進化は速い!情報の正確性は自己責任で判断してください。
@hamashunに今さら捧ぐ。けっこう前に出すと言いつつ、伸ばし伸ばしになってたネタを投下してみます。あんまり弄ってないけども。
まず軽く紹介。Vimはviから派生したテキストエディタで、特にUNIX系OS(Linux、Mac)ではEmacsと並んで広く使用されているエディタです。プログラマによって開発されたプログラマのためにエディタであり、全ての操作をキーボードから行えることが特徴かな。基本的な操作方法は手前味噌ですが「Vim 基本操作まとめ」を参照のこと。
んで、「.vimrc」という設定ファイルを――ホームディレクトリなり、exeファイルのあるフォルダなりに――用意してやることによって、好きなように拡張して使っていくわけです。無ければ単純なVi互換モードとして動きます。今回はSig.の.vimrcを例にとって、設定ファイルの中身を軽く紹介してみます。サクッと行こう!
設定ファイルといっても、コマンドモードで「:set number」とか打ったことあれば、基本的に似たような決め打ちを列挙していくだけです。条件分岐とかも書けるけど、まあ十分使えます。
set nocompatible
set tags=~/.tags
まずは Vimの各種機能を利用する「おまじない」。2行目はタグジャンプを使う場合に、生成したタグファイルを指定する部分。無くても全く問題ない。
" display
" ----------------------
set number
set ruler
set cmdheight=2
set laststatus=2
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P
set title
set linespace=0
set wildmenu
set showcmd
"set textwidth=78
"set columns=100
"set lines=150
続いてウィンドウ幅やステータスバーの設定をば。ちなみに二重引用符でコメントです、あしからず。
上から行番号の表示、ステータス行にルーラーを表示、コマンド行やステータス行の表示調整や、ファイル名補完時のメニュー表示機能の追加など。最後の3行はウィンドウの大きさや自動改行の挿入位置ですね。78字での自動改行は、コードレイアウトのガイドラインですが、他人のソースを修正したり、HTMLやテンプレファイルを操作するには邪魔なので消してます。
" syntax color
" ---------------------
syntax on
colorscheme ron
highlight LineNr ctermfg=darkgrey
シンタックスハイライト。元からある色セットにちょろっと追記してるだけです。Macだともうちょい弄ってるけど、まあ好みで。
" search
" ----------------------
set ignorecase
set smartcase
set wrapscan
set hlsearch
検索用。大文字小文字の無視(しかし大文字だけの文字列にはマッチ)、折り返し検索を有効にして、検索文字列をハイライトさせます。ちなみに「set incsearch
」にてインクリメンタル・サーチが利用できますが、なんか好みの問題で使いません。
" edit
" ---------------------
set autoindent
set cindent
set showmatch
set backspace=indent,eol,start
set clipboard=unnamed
set pastetoggle=<F12>
set guioptions+=a
文字入力まわり。インデント、対応する括弧の表示(挿入モード)、<BS>の動作を定義(挿入モード)、システムクリップボードとGUIの設定、ペーストモード切替キーの定義などです。特にペーストモードは重宝してますな。何もしないとコピペ後にインデント崩れたり、幾つかのキーバインドと干渉しちゃったりしますから。
" tab
" --------------------
set tabstop=4
set expandtab
set smarttab
set shiftwidth=4
set shiftround
set nowrap
タブ幅に関わる設定。インデントに<Tab>キーを使うことを前提に、いろいろ設定してます。1レベルが半角スペース4つ分で、<Tab>キー押したときにスペース4つ出力、とかですね。
" keymap
" --------------------
set bioskey
set timeout
set timeoutlen=500
" move
nnoremap <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/time
inoremap <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-edit
inoremap <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>
" search
nnoremap n nzz
nnoremap N Nzz
nnoremap * *zz
nnoremap # #zz
nnoremap g* g*zz
nnoremap g# g#zz
" window
nnoremap <silent> <C-x>1 :only<CR>
nnoremap <silent> <C-x>2 :sp<CR>
nnoremap <silent> <C-x>3 :vsp<CR>
" buffer
nnoremap <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 backup
set backupdir=~/vim_backup
set swapfile
set directory=~/vim_swap
バックアップやスワップファイルの保存先を指定してます。ここで明示的に指定しとくと色々やりやすくなりますね。主に某エラー画面対策でスワップの削除とか。
" ------------------------------------------------
" encoding
" > http://www.kawaz.jp/pukiwiki/?vim#cb691f26
" ------------------------------------------------
"
if &encoding !=# 'utf-8'
set encoding=japan
set fileencoding=japan
endif
if 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 = &fileencodings
let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'
let &fileencodings = &fileencodings .','. s:fileencodings_default
unlet s:fileencodings_default
else
let &fileencodings = &fileencodings .','. s:enc_jis
set fileencodings+=utf-8,ucs-2le,ucs-2
if &encoding =~# '^\(euc-jp\|euc-jisx0213\|eucjp-ms\)$'
set fileencodings+=cp932
set fileencodings-=euc-jp
set fileencodings-=euc-jisx0213
set fileencodings-=eucjp-ms
let &encoding = s:enc_euc
let &fileencoding = s:enc_euc
else
let &fileencodings = &fileencodings .','. s:enc_euc
endif
endif
" 定数を処分
unlet s:enc_euc
unlet s:enc_jis
endif
" 日本語を含まない場合は fileencoding に encoding を使うようにする
if has('autocmd')
function! AU_ReCheck_FENC()
if &fileencoding =~# 'iso-2022-jp' && search("[^\x01-\x7e]", 'n') == 0
let &fileencoding=&encoding
endif
endfunction
autocmd BufReadPost * call AU_ReCheck_FENC()
endif
" 改行コードの自動認識
set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
set ambiwidth=double
endif
ファイル開くときの文字コード判定部分。ある意味Vimで一番めんどくさい。ここまでやってもたまに間違えるんですよね~。まあ携帯サイトとか、半角カナとか普通なんで半ば諦めてますが。
残り
あとは幾つかプラグイン用の指定があるくらいなので、.vimrcとしてはこんなもんですな。
.vimrcは公開するのが文化的なものがあるのか、ちょちょいとググれば山のように見つかりますね。この記事もいっぱいある中の一例くらいに捉えていただければ貴方のVimライフが広がるかと!
ちなみなプラグイン
これくらいかな。入れてるのって。しょーじきたまにNERD_treeが凄い便利! ...て以外はあんま使うこと無い。surround.vimとか、評判良いのは耳にしますけどねー。なんか探し始めたら一日余裕で潰しそうで自重してますw
参考
memo: Vimpiという便利サービスもあるみたい。e-luckさん多謝(´≧ω≦)b
Note: スパム対策が面倒なので、コメント投稿を廃止しました。以前のコメントは残します。
ご意見・ご要望はtwitter@sigwygかはてブコメントにて。