vimrc

syntax on
"-------------------------------------------------------------------------------
set nocompatible
"-------------------------------------------------------------------------------
" ステータスライン
set laststatus=2 " 常にステータスラインを表示
"set statusline=%<%F\ %r%h%w%y%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%4v(ASCII=%03.3b,HEX=%02.2B)\ %l/%L(%P)%m
set statusline=[%n]%F\ \ \ \ \ \|%{(&fenc!=''?&fenc:&enc).'\|'.&ff.'\|'}%m%r%=<%l/%L> " ステータスライン
"-------------------------------------------------------------------------------
" 文字コード関連
" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
    set ambiwidth=double
endif
"-----------------------------------------------------------------------------
" 基本設定
set ambiwidth=double           " 文脈依存は全角
set ignorecase                 " 検索時に大文字小文字を無視 (noignorecase:無視しない)
set smartcase                  " 大文字小文字の両方が含まれている場合は大文字小文字を区別
set backspace=indent,eol,start " バックスペースでなんでも消せるように
set autoread                   " 他で書き換えられたら自動で読み直す
set noswapfile                 " スワップファイル作らない
set hidden                     " 編集中でも他のファイルを開けるようにする
set formatoptions=lmoq         " テキスト整形オプション,マルチバイト系を追加
"set whichwrap=b,s,h,l,<,>,[,]  " カーソルを行頭、行末で止まらないようにする
"-----------------------------------------------------------------------------
" インデント
set ts=4                 " タブの画面上での幅
set shiftwidth=4         " シフト移動幅
set expandtab            " タブをスペースに展開する
"-----------------------------------------------------------------------------
" 表示
set guicursor=a:blinkon0 " カーソルの点滅を行わない
set ruler                " ルーラーを表示
set sm                   " 括弧入力時に対応する括弧を表示
let loaded_matchparen = 1 "対応括弧を強調しない
set list              " 不可視文字表示
set listchars=tab:>.,trail:_,extends:>,precedes:<" 不可視文字の表示形式
set display=uhex      " 印字不可能文字を16進数で表示
"-----------------------------------------------------------------------------
" 色設定
hi NonText ctermfg=darkgray
hi Folded ctermfg=blue
hi SpecialKey cterm=underline ctermfg=darkgray
hi Folded term=standout cterm=bold ctermfg=4 ctermbg=0
hi Pmenu     cterm=bold ctermfg=4 ctermbg=7
hi PmenuSel  cterm=bold ctermfg=0 ctermbg=6
hi PmenuSbar ctermfg=4 ctermbg=7
hi Search term=NONE cterm=NONE ctermfg=black ctermbg=LightGray
hi Search ctermbg = 4 ctermfg = 7
hi TabLineSel  term=bold cterm=bold,underline ctermfg=7 ctermbg=0
hi TabLineFill ctermfg=white ctermbg=black
hi StatusLine   term=NONE cterm=NONE ctermfg=black ctermbg=white
hi MatchParen term=standout ctermbg=LightGrey ctermfg=Black guibg=LightGrey guifg=Black
"-----------------------------------------------------------------------------
"キーマップ
noremap j gj
noremap k gk
vnoremap j gj
vnoremap k gk
nmap n nzz
nmap N Nzz
nmap * *zz
nmap # #zz
nmap g* g*zz
nmap g# g#zz
" タブを使う
nnoremap <C-h>  gT
nnoremap <C-l>  gt
nnoremap <Leader>1 1gt
nnoremap <Leader>2 2gt
nnoremap <Leader>3 3gt
nnoremap <Leader>4 4gt
nnoremap <Leader>5 5gt
nnoremap <Leader>6 6gt
nnoremap <Leader>7 7gt
nnoremap <Leader>8 8gt
nnoremap <Leader>9 9gt
"-----------------------------------------------------------------------------
" 補完・履歴
set wildmenu           " コマンド補完を強化
set wildchar=<tab>     " コマンド補完を開始するキー
set wildmode=list:full " リスト表示,最長マッチ
set history=1000       " コマンド・検索パターンの履歴数
" <TAB>で補完
function! InsertTabWrapper()
    let col = col('.') - 1
    if !col || getline('.')[col - 1] !~ '\k'
        return "\<TAB>"
    else
        return "\<C-N>"
    endif
endfunction
inoremap <tab> <c-r>=InsertTabWrapper()<cr>
"-----------------------------------------------------------------------------
" 検索
set wrapscan   " 最後まで検索したら先頭へ戻る
set ignorecase " 大文字小文字無視
set smartcase  " 大文字ではじめたら大文字小文字無視しない
set incsearch  " インクリメンタルサーチ
set hlsearch   " 検索文字をハイライト
" 選択した文字列を検索
vnoremap <silent> // y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR>
" 選択した文字列を置換
vnoremap /r "xy:%s/<C-R>=escape(@x, '\\/.*$^~[]')<CR>//gc<Left><Left><Left>
" Escで検索ハイライトを削除
nnoremap <Esc><Esc> :<C-u>set nohlsearch<Return>
nnoremap / :<C-u>set hlsearch<Return>/
nnoremap ? :<C-u>set hlsearch<Return>?
nnoremap * :<C-u>set hlsearch<Return>*
nnoremap # :<C-u>set hlsearch<Return>#
"-------------------------------------------------------------------------------
" 全角スペース、末尾の半角スペース、タブを色づけする(色は俺好み、でも全角スペースを□にしたい)
if has("syntax")
    syntax on
    function! ActivateInvisibleIndicator()
        syntax match InvisibleJISX0208Space " " display containedin=ALL
        highlight InvisibleJISX0208Space term=underline ctermbg=Blue guifg=#999999 gui=underline
        syntax match InvisibleTrailedSpace "[ ]\+$" display containedin=ALL
        highlight InvisibleTrailedSpace term=underline ctermbg=Red guifg=#FF5555 gui=underline
        syntax match InvisibleTab "\t" display containedin=ALL
        highlight InvisibleTab term=underline ctermbg=Cyan guibg=#555555
    endf

    augroup invisible
        autocmd! invisible
        autocmd BufNew,BufRead * call ActivateInvisibleIndicator()
    augroup END
endif
"-----------------------------------------------------------------------------
"タブ機能
nmap <Tab> :tabn<CR>
nmap <C-t> :tabnew_
set showtabline=2
set tabline=%!MyTabLine()
function MyTabLine()
  let s = ''
  for i in range(tabpagenr('$'))
    if i + 1 == tabpagenr()
      let s .= '%#TabLineSel#'
    else
      let s .= '%#TabLine#'
    endif
    let s .= '%' . (i+1) . 'T'
    let s .= ' ' . (i+1) . (1==getwinvar(i+1,'&modified')?'[+]':'') . ' %{MyTabLabel(' . (i+1) . ')} '
  endfor
  let s .= '%#TabLineFill#%T'
  if tabpagenr('$') > 1
    let s .= '%=%#TabLine#%999Xclose'
  endif
  return s
endfunction

function MyTabLabel(n)
  let buflist = tabpagebuflist(a:n)
  let winnr = tabpagewinnr(a:n)
  return bufname(buflist[winnr - 1])
endfunction
"-----------------------------------------------------------------------------
" QFixHome
let howm_dir             = '~/.vim/howm/'
let howm_filename        = '%Y/%m/%Y-%m-%d-%H%M%S.howm'
let howm_fileencoding    = 'utf-8'
let howm_fileformat      = 'unix'
let mygrepprg = 'grep'
let MyGrep_ShellEncoding = 'utf-8'
"-----------------------------------------------------------------------------
" yankring.vim
let g:yankring_history_dir = "~/.vim/tmp/"
nmap ,y :YRShow<CR>
"-----------------------------------------------------------------------------
" backspace問題用
noremap! <7f> <08>
"-----------------------------------------------------------------------------
" 文字コードの自動認識
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
  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
"-----------------------------------------------------------------------------