" 外部ファイル読み込み
" if filereadable(expand('~/filepath'))
" source ~/filepath
" endif
if !isdirectory(expand('~/.vim'))
   call mkdir(expand('~/.vim'))
endif

"""""""""""""""""""""""""""""""""""
set compatible " vi compatible
" バックアップファイルを作るディレクトリ
if !isdirectory(expand('~/.vim/backup'))
   call mkdir(expand('~/.vim/backup'))
endif
set backup " バックアップ
set backupdir=$HOME/.vim/backup
set swapfile " スワップファイル用のディレクトリ
set directory=$HOME/.vim/backup
set viminfo+=n~/.vim/viminfo " viminfo
set list " タブ文字、行末など不可視文字を表示する
set listchars=tab:>-,extends:<,trail:-,eol:$ " listで表示される文字のフォーマットを指定する
set showmatch " 閉じ括弧が入力されたとき、対応する括弧を表示する
set ignorecase
set smartcase " 検索時に大文字を含んでいたら大/小を区別
set whichwrap=b,s,h,l,<,>,[,] " カーソルを行頭、行末で止まらないようにする
set showmode " モード表示
set notitle "  do not display editting file on titlebar
set incsearch
set wrapscan " 折り返し検索
set showmatch " 括弧を閉じた時、対になる括弧を一瞬ハイライトする
set wildmode=longest,list,full
set ruler " 行番号、カーソル位置を表示
set nonumber "  do not show line number at left side
set laststatus=2 " ステータスラインを常に表示
set showcmd
set scrolloff=2 " 常に前後2行を表示
syntax enable " シンタックス
set hidden " 編集中でも他ファイルへ移動可
set backspace=indent,eol,start " バックスペースでなんでも消せるように
" set autochdir " 自動的にカレントディレクトリを現在のファイルのディレクトリにする macだと出来ないってゆわれた
set encoding=utf-8 " 言語設定
set fileencodings=utf-8,shift-jis,euc-jp,latin1
set mouse=h " マウス使わない
set clipboard+=unnamed " クリップボードをWindowsと連携
set visualbell " ビープしない
set browsedir=buffer " バッファで開いているファイルのディレクトリ

set tabstop=4 " タブの画面上での幅
set softtabstop=4
set shiftwidth=4 " width of indent
set expandtab " タブをスペースに展開する
set autoindent " オートインデント
set smartindent
filetype plugin indent on

let g:netrw_liststyle = 1
let g:netrw_list_hide = '\(^\|\s\s\)\zs\.\S\+'

" gvimrc分けるのめんどい
if has('gui_running')
  " ツールバー、スクロールバー消す
  set guioptions-=T
  set guioptions-=r
  set lines=45
  set columns=110
  set guifont=DejaVu\ Sans\ Mono\ 9
endif

if has('win32')
" Windows 用の設定
endif

"""""""""""""""""""""""""""""""""""""""
" マップ
" imap <c-j> <esc> でC-Jをescにできる。?
" nmap
" vmap
" map でそれぞれのモードでマップを指定
" キーマッピングには大きく分けて map と noremap の 2 つの種類があります。
" * map はキーシーケンスを展開したあと、さらに別のマップを適用しようとします。
" * noremap は一度だけ展開します。
" →マップを再帰的に展開するときはmap、決め打ちはnoremap(キーの入れ替えなど)
" 割と保存
inoremap <ESC> <ESC>:<C-u>w<CR>
inoremap <C-c> <ESC>:<C-u>w<CR>
noremap <C-c> <ESC>:<C-u>w<CR>

" 方向キーでバッファ操作
" nnoremap <LEFT> <C-c>:bp!<CR>
" nnoremap <RIGHT> <C-c>:bn!<CR>
" nnoremap <UP> <C-c>:ls!<CR>
" nnoremap <DOWN> <C-c>:bd
" nnoremap <C-m>cd <C-c>:cd%:h<CR>
nnoremap <C-o> <C-c>:Explore<CR>

" http://d.hatena.ne.jp/yuroyoro/20101104/1288879591
" 見た目で行移動
nnoremap j gj
nnoremap k gk

" highlight current line
" set cursorline
" カレントウィンドウにのみ罫線を引く
augroup cch
  autocmd! cch
  autocmd WinLeave * set nocursorline
  autocmd WinEnter,BufRead * set cursorline
augroup END

hi clear CursorLine
highlight CursorLine term=underline cterm=underline gui=underline

" 入力モード時、ステータスラインのカラーを変更
augroup InsertHook
autocmd!
autocmd InsertEnter * highlight StatusLine guifg=#ccdc90 guibg=#2E4340
autocmd InsertLeave * highlight StatusLine guifg=#2E4340 guibg=#ccdc90
augroup END

" save window position and size
if has('gui_running')
    let g:save_window_file = expand('~/.vimwinpos')
    augroup SaveWindow
      autocmd!
      autocmd VimLeavePre * call s:save_window()
      function! s:save_window()
        let options = [
          \ 'set columns=' . &columns,
          \ 'set lines=' . &lines,
          \ 'winpos ' . getwinposx() . ' ' . getwinposy(),
          \ ]
        call writefile(options, g:save_window_file)
      endfunction
    augroup END

    if filereadable(g:save_window_file)
      execute 'source' g:save_window_file
    endif
endif