" ==============================================
" key mapping
" ==============================================

map! <NUL> <CR>

" 括弧の補完
" cohama/lexima.vim を代わりに使う
" inoremap {<Enter> {}<Left><CR><ESC><S-o>
" inoremap [<Enter> []<Left><CR><ESC><S-o>
" inoremap (<Enter> ()<Left><CR><ESC><S-o>

" クォートの補完
" inoremap " ""<LEFT>
" inoremap ' ''<LEFT>

" タグジャンプ
" nnoremap <C-h> :vsp<CR> :exe("tjump ".expand('<cword>'))<CR>
" nnoremap <C-k> :split<CR> :exe("tjump ".expand('<cword>'))<CR>

" =================
"  ハイライト消し
" =================

" EscEscで検索ハイライトを消す
nnoremap <ESC><ESC> :nohlsearch<CR><Esc>

" =================
"  emacs風に
" =================

"imap <C-k> <ESC>d$i
"imap <C-y> <ESC>pi
"imap <C-d> <ESC>xi
"imap <C-a> <Home>
"imap <C-e> <End>
"imap <C-b> <Left>
"imap <C-f> <Right>
"imap <C-n> <Down>
"imap <C-p> <UP>

" =================
" tab 操作をwindowっぽく
" =================

nnoremap <C-t><C-t> :tabprevious<CR>
inoremap <C-t><C-t> <Esc>:tabprevious<CR>
nnoremap <C-t>h :tabprevious<CR>
inoremap <C-t>h <Esc>:tabprevious<CR>
nnoremap <C-t><C-h> :tabprevious<CR>
inoremap <C-t><C-h> <Esc>:tabprevious<CR>
nnoremap <C-t>l :tabnext<CR>
inoremap <C-t>l <Esc>:tabnext<CR>
nnoremap <C-t><C-l> :tabnext<CR>
inoremap <C-t><C-l> <Esc>:tabnext<CR>

" =================
"  修羅の道
" =================

vnoremap <Up> <Nop>
vnoremap <Down> <Nop>
vnoremap <Left> <Nop>
vnoremap <Right> <Nop>
inoremap <Up> <Nop>
inoremap <Down> <Nop>
inoremap <Left> <Nop>
inoremap <Right> <Nop>
noremap <Up> <Nop>
noremap <Down> <Nop>
noremap <Left> <Nop>
noremap <Right> <Nop>

" =================
" neoshippets
" =================

imap <C-k> <Plug>(neosnippet_expand_or_jump)
smap <C-k> <Plug>(neosnippet_expand_or_jump)
xmap <C-k> <Plug>(neosnippet_expand_target)

inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"

" =================
" nerdtree
" =================

nnoremap <silent><C-e> :NERDTreeToggle<CR>

" =================
"  windowのResize(Tmux風)
" =================

" resize current buffer by +/- 5
nnoremap <C-w>H :vertical resize -5<cr>
nnoremap <C-w>J :resize +5<cr>
nnoremap <C-w>K :resize -5<cr>
nnoremap <C-w>L :vertical resize +5<cr>

nnoremap H :vertical resize -5<cr>
nnoremap J :resize +5<cr>
nnoremap K :resize -5<cr>
nnoremap L :vertical resize +5<cr>

" =================
"  windowのResize(Tmux風)
" =================

" tagbar window
nmap <F9> :TagbarToggle<CR>

" =================
"  その他
" =================

" vim-node file jump
autocmd User Node
  \ if &filetype == "javascript" |
  \   nmap <buffer> <C-w>f <Plug>NodeVSplitGotoFile |
  \   nmap <buffer> <C-w><C-f> <Plug>NodeVSplitGotoFile |
  \ endif

" jsdoc
nmap <silent> <C-m> <Plug>(jsdoc)

" =================
"  インクリメンタルサーチ
" =================

map /  <Plug>(incsearch-forward)
map ?  <Plug>(incsearch-backward)
map g/ <Plug>(incsearch-stay)

" =================
"  Caw(コメントアウト用)
" =================

" コメントアウト用( tabもしくはC-iでコメントout)
nmap <C-i> <Plug>(caw:hatpos:toggle)
vmap <C-i> <Plug>(caw:hatpos:toggle)

" =================
"  Denite
" =================

" ファイルタイプを変更する
nmap <silent> <C-j><C-t> :<C-u>Denite filetype<CR>
" 同一内検索
nmap <silent> <C-j><C-j> :<C-u>Denite line<CR>
" 全文検索
nmap <silent> <C-j><C-g> :<C-u>Denite grep<CR>
" 全文検索(プレビュー)
nmap <silent> <C-j><C-p> :<C-u>Denite -auto_preview grep<CR>
" ヘルプ
nmap <silent> <C-j><C-h> :<C-u>Denite help<CR>
" コマンド
nmap <silent> <C-j><C-c> :<C-u>Denite command<CR>
" ファイルを開く用(rec: Recursive?)
nmap <silent> <C-j><C-f> :<C-u>Denite file_rec<CR>
" ファイルを開く用(mru: Most Recently Used)
nmap <silent> <C-j><C-u> :<C-u>Denite file_mru<CR>
" ヤンク履歴
nmap <silent> <C-j><C-y> :<C-u>Denite neoyank<CR>
" 前回のDeniteバッファを再表示する
nmap <silent> <C-j><C-r> :<C-u>Denite -resume<CR>