vimいじり

vimのカスタマイズが楽しくて仕事が手につかない今日この頃、みなさんいかがお過ごしですか。
あれからまた.vimrcをいじったので改めて紹介。

.vimrc

以下は前回からの差分のみ。

"全般
set splitright   "vsplitで新規ウィンドウは右側にする

"colorscheme desert
colorscheme edark
let edark_current_line=1
let edark_ime_cursor=1
let edark_insert_status_line=1

edarkはrdarkを自分好みにカスタマイズしたカラースキーマ
そしてPmenu、SpecialKeyなどのハイライト定義はカラースキーマに全部押し込んだので削除。


edarkはこちら
http://eureka.pasela.org/products/scripts/vim/edark.vim
rdarkはこちら
http://ld.yi.org/vim/rdark/

"検索関係

"選択した文字列を検索
vnoremap <silent> // y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR>
"選択した文字列を置換
vnoremap /r "xy:%s/<C-R>=escape(@x, '\\/.*$^~[]')<CR>//gc<Left><Left><Left>

選択したテキストに対して検索したり置換したりってのは日常的な使い方だったので。
置換は上記の検索の後に:%s/<C-R>/hoge/gcとすることで対応。<C-R>はレジスタの挿入で、'/'レジスタは「最後に検索したパターン」を表す。

"操作関係

"表示行単位で移動
nmap j gj
nmap k gk
vmap j gj
vmap k gk

"挿入モードのカーソル移動
inoremap <C-J> <Down>
inoremap <C-K> <Up>
inoremap <C-H> <Left>
inoremap <C-L> <Right>

"ウィンドウ移動
noremap <S-Up> <C-W>k
noremap <S-Down> <C-W>j
noremap <S-Left> <C-W>h
noremap <S-Right> <C-W>l

"バッファ切り替え
noremap <S-PageDown> :bn<CR>
noremap <S-PageUp>   :bp<CR>

自分はクォートとか括弧を書く場合、先に閉じてから中を書くタイプなのだが、閉じてから一つ戻るのにカーソルキーに手を伸ばすのが億劫なので挿入モードでもhjklで移動できるようにキーマップを変更。<C-H>が潰れるのは残念だが、BSよりもカーソル移動の方がメリットが大きい。

ウィンドウ移動、バッファ切り替えはできればAltキーに割り当てたかったんだが、ターミナル越しに使うときにはまりそうなので断念。

"========== プラグイン設定 ==========
"autocomplpop
let g:AutoComplPop_NotEnableAtStartup=1

"winmanager
"http://www.vim.org/scripts/script.php?script_id=95
"http://www.vim.org/scripts/script.php?script_id=1440
let g:winManagerWindowLayout = 'FileExplorer,TagList|BufExplorer'
et g:explDateFormat='%Y-%m-%d %H:%M:%S'

autocomplpopはどうも自分には馴染まなかったので、とりあえずデフォルトでオフにした。

winmanagerは何やら別の人による修正版があるようなのでそちらに入れ替えた。
そして3分割はいまいち使えなかったので2分割でファイルとタグを切り替えて使うように変更。

"========== プライベートな拡張 ==========
"日付挿入
function! InsertCDate(format)
  let old_lc_time = v:lc_time
  try
    exec ':silent! lang time C'
    let datetime = strftime(a:format)
    return datetime
  finally
    exec ':silent! lang time ' . old_lc_time
  endtry
endf
"YYYY-MM-DD HH:MM:SS
inoremap <Leader>date <C-R>=InsertCDate('%Y-%m-%d %H:%M:%S')<CR>
nnoremap <Leader>date i<C-R>=InsertCDate('%Y-%m-%d %H:%M:%S')<CR><ESC>
vnoremap <Leader>date s<C-R>=InsertCDate('%Y-%m-%d %H:%M:%S')<CR><ESC>
"RFC2822(WDay, DD Month YYYY HH:MM:SS +-Timezone)
if has('win32')
  "Windowsの%zは「東京 (標準時)」とか返してきて+0900が得られない……
  inoremap <Leader>dt822 <C-R>=InsertCDate('%a, %d %b %Y %H:%M:%S +0900')<CR>
  nnoremap <Leader>dt822 i<C-R>=InsertCDate('%a, %d %b %Y %H:%M:%S +0900')<CR><ESC>
  vnoremap <Leader>dt822 s<C-R>=InsertCDate('%a, %d %b %Y %H:%M:%S +0900')<CR><ESC>
else
  inoremap <Leader>dt822 <C-R>=InsertCDate('%a, %d %b %Y %H:%M:%S %z')<CR>
  nnoremap <Leader>dt822 i<C-R>=InsertCDate('%a, %d %b %Y %H:%M:%S %z')<CR><ESC>
  vnoremap <Leader>dt822 s<C-R>=InsertCDate('%a, %d %b %Y %H:%M:%S %z')<CR><ESC>
endif

最後にプライベートな拡張として日付挿入機能を追加。
i<C-R>=hogehoge……という書き方が果たして正しいやり方なのかがいまいちわからない。
あとnとvはi<Leader>date<ESC>みたいにマップすればいいのかと思ったけど、期待通りに動かなかったので仕方なく長いのを3つも書くことに。

.gvimrc

.gvimrcはカラー定義を削除した以外は変更なし。