.vimrc ファイルを公開

" ==== Vi IMproved 7.1 ====

" Vi 互換を無効にする
set nocompatible

" タブをスペースで挿入
set expandtab
" タブ幅関連の設定
set tabstop=4
set shiftwidth=4
set softtabstop=0
set smarttab

" インデントの設定
set smartindent
set autoindent

" 現在のカーソル位置(行、桁)を Vim ウィンドウの右下に常に表示
set ruler

" 外部のエディタで編集中のファイルが変更されたら、
" 自動的に読み直す。ファイルが削除された場合は読み直さない
set autoread

" マウスを有効にする (ウィンドウサイズを変えるのに便利)
set mouse=a

" :set list を実行した時に使われる文字を変更
" TAB文字: '>'と,TABが占めるスペースの数だけ - を表示
" 行末の空白: '-' と表示
set listchars=tab:>-,trail:-

" ステータスラインに文字コードと改行文字を表示する
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P

" コマンド,検索パターンの履歴数を設定
set history=100000

" カーソルの上または下に、最低でも指定した数の行を表示させる
set scrolloff=999 " 常にカーソル位置をウィンドウの中央に表示する

" 挿入モードで <BS> を使って削除できる文字を指定
set backspace=indent,eol,start

" 入力途中のコマンドを右下に表示
set showcmd

" 検索文字列が小文字の場合は大文字小文字を区別なく検索する
set ignorecase
" 検索文字列に大文字が含まれている場合は区別して検索する
set smartcase
" インクリメンタルサーチ
set incsearch
" 検索結果文字列のハイライトを有効にする
set hlsearch
" 検索が折り返さないようにする
set nowrapscan

" 括弧の対応は強調表示のみ
set noshowmatch
" シンタックスハイライトを有効にする
syntax on
" ステータスラインを常に表示
set laststatus=2

" ファイルを上書きした時にバックアップファイルを作成しない
set nobackup

" 補完動作の設定
" 複数のマッチがあるときは、全てのマッチを羅列し、
" 共通する最長の文字列までが補完される。
set wildmode=list:longest

" 変更中のファイルでも、保存しないで他のファイルを表示出来るようにする
set hidden

" autocommands をサポートするなら実行
if has("autocmd")
  "ファイルタイプに応じたプラグイン・インデントを使用
  filetype plugin indent on

  augroup vimrcEx
      au!
      " ファイルタイプがテキストの場合には,
      " 行が長くなりすぎないように78文字で分割する
      autocmd FileType text setlocal textwidth=78

      autocmd BufReadPost *
        \ if line("'\"") > 0 && line("'\"") <= line("$") |
        \   exe "normal! g`\"" |
        \ endif
  augroup END
endif " has("autocmd")

" ポップアップメニューの色を変更
hi Pmenu ctermbg=Blue
hi PmenuSel ctermbg=Red

" YankRing 3.0 の為の設定
set viminfo+=!

" man を vim で読む為の設定
runtime ftplugin/man.vim

" スクリプトファイルを実行
function! ShebangExecute()
    let m = matchlist(getline(1), '#!\(.*\)')
    if(len(m) > 2)
        execute '!'. m[1] . ' %'
    else
        execute '!' &ft ' %'
    endif
endfunction
nnoremap ,e :call ShebangExecute()<CR>

" Omni 補完機能を Tab キーで使えるように設定 (Vim 7.0 以降)
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>

" ==== タブ関連の設定====================  
" タブバーを常に表示
"set showtabline=2
" 新しいタブを開くショートカット
"nnoremap ,t :tabnew 

" minibufexpl.vim の設定
let g:miniBufExplMapWindowNavVim    = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapCTabSwitchBufs  = 1
let g:miniBufExplModSelTarget       = 1

" ==== グローバルなキーマップを設定 ==========
" 張り付け
set pastetoggle=<F9>
nnoremap <F9> :set paste<CR>i

" .vimrc を新しいタブで開く
nnoremap ,v :edit ~/.vimrc<CR>

" 検索結果のハイライトを消す
nnoremap ,h :noh<CR>

" NERD_tree (ツリー型エクスプローラ) の設定
nnoremap <F10> :NERDTreeToggle<CR>
inoremap <F10> <C-o>:NERDTreeToggle<CR>

" taglist の設定
nnoremap <F11> :TlistToggle<CR>
inoremap <F11> <C-o>:TlistToggle<CR>

"" 挿入モード
inoremap <C-a> <Home>
inoremap <C-e> <End>
inoremap <C-h> <Left>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-l> <Right>

inoremap <ESC>b <C-Left>
inoremap <ESC>f <C-Right>

inoremap <C-x> <BS>
inoremap <C-d> <Del>

"inoremap <C-u> 定義済み
"inoremap <C-k> <Up>に定義済み

"inoreamp <C-w> 定義済み
"inoremap <ESC>d <nop>

"" コマンドモード
" bash のキーマップライク
cnoremap <C-a> <Home>
cnoremap <C-e> <End>
cnoremap <C-b> <Left>
cnoremap <C-f> <Right>

" <ESC> == <A> (<A> == ALT)
cnoremap <ESC>b <C-Left>
cnoremap <ESC>f <C-Right>

cnoremap <C-h> <BS>
cnoremap <C-d> <Del>

"cnoremap <C-u> 定義済み
"cnoremap <C-k> <nop>

"cnoremap <C-w> 定義済み
"cnoremap <ESC>d <nop>

"" ノーマルモード
nnoremap j gj
nnoremap k gk

"" ビジュアルモード
vnoremap j gj
vnoremap k gk