vimrc

再びvimrc
ちょっとだけ更新しました.
タブ機能とか,バックスペースのマップとかQuickrunとかの設定を追加してます.

" ~/.vimrc : vim config-file
"
"------------------------
" color関連
"------------------------
" 色をつける
syntax on

" 規定のカラースキーマを利用する
" colorscheme desert

"highlight SatausLine cterm=NONE ctermfg=white ctermbg=black
"highlight LineNr ctermfg=darkyellow
"highlight Nontext ctermfg=darkgrey
"highlight Folded ctermfg=blue
"highlight SpecialKey ctermfg=darkcyan
"highlight Statement ctermfg=darkyellow
"highlight Comment ctermfg=darkblue
"highlight Type ctermfg=darkgreen

hi Cursor ctermbg=black
hi Pmenu cterm=standout ctermfg=white ctermbg=8
hi PmenuSel cterm=bold ctermfg=white ctermbg=4
hi PmenuSbar ctermbg=0
hi StatusLine term=standout cterm=underline ctermfg=2
hi StatusLineNC cterm=underline
hi VertSplit cterm=NONE
hi LineNr ctermfg=2

"------------------------
" display関連
"------------------------
" 背景は黒いことをvimに通知
set background=dark
" 起動時のメッセージを消す
set shortmess+=I
" スクロール時の余白確保
set scrolloff=5
" 行番号をつける
set number
" display incomplete commands
set showcmd
" 長い行を折り返す
set wrap
"タイトルバーにファイル名を表示
"set title
" ルーラを非表示
set noruler
" ヴィジュアルベルを鳴らさない(鳴らす場合は,visualbellのみ)
set visualbell t_vb=
" 常にステータス行を表示
set laststatus=2
"ステータスラインに文字コードと改行文字を表示する
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P
" 現在のモードを表示する
set showmode
" 全角スペースを視覚化
hi ZenkakuSpace cterm=underline ctermfg=lightblue ctermbg=white
match ZenkakuSpace / /


" -------------------
" 編集
" -------------------
" インデントの幅
set shiftwidth=2
" 自動的にインデント
set autoindent
" 賢いインデント
set smartindent
" allow backspacing over everything in insert mode
set backspace=indent,eol,start
" コマンド補完機能
set wildmenu
" 対応する括弧を表示
"set showmatch
" 対応する括弧表示を無効化
let loaded_matchparen = 1
" テキスト挿入中の自動折り返しを日本語に対応させる
set formatoptions+=mM
" zsh like な補完に
set wildmode=longest,list:longest
" 全角文字も崩さず表示
set ambiwidth=double
" 補完候補の見せ方
set completeopt=menu,preview,longest,menuone
" 補完候補の検索場所の指定
" w: 他のWindow内のバッファから
" b: バッファ内の現在読み込まれている他のバッファから
" u: バッファリスト内の、現在読み込まれていない別のバッファから検索
" k: オプション 'dictionary' で指定されたファイルから検索
" d: カレントファイルとインクルードされるファイルから、定義された名前またはマクロを検索
set complete=.,w,b,u,k,d
" 自動読み直し
set autoread


" -------------------
" タブ
" -------------------
" 賢いタブ
set smarttab
" タブをスペースに置き換える
set expandtab
" ファイル中のTab文字を画面上の見た目で何文字幅にするか設定
set tabstop=4
" 自動で挿入されるタブの幅
set shiftwidth=4
" キーボードで<Tab>キーを押したときに挿入される空白の量
set softtabstop=0 "0ならtabstopで指定した量
" タブにshiftsidthを使用
" set smarttab
" Tab の表示
"set list
" タブを>----で表示
set listchars=tab:>-
" タブを>    で表示
" set listchars=tab:>\


" -------------------
" 文字コード関連
" -------------------
" ターミナルの文字コード
set encoding=utf-8

set termencoding=utf-8

set fileencoding=utf-8

" 認識して欲しい文字コード
set fileencodings=iso-2022-jp,cp932,euc-jp,utf-8

" 文字コードの自動認識
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
  endfunction
  autocmd BufReadPost * call AU_ReCheck_FENC()
endif
" 改行コードの自動認識
set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
  set ambiwidth=double
endif

" -------------------
" 検索
" -------------------
" 検索文字列が小文字の場合は大文字小文字を区別なく検索する(noignorecase)
set ignorecase
" 検索文字列に大文字が含まれている場合は区別して検索する(nosmartcase)
set smartcase
" 検索文字をハイライトする
set hlsearch
" インクリメンタルサーチ
set incsearch
" 最初に戻る
set nowrapscan
" 検索語が画面中央に来る
nmap n nzz
nmap N Nzz
nmap * *zz
nmap # #zz
nmap g* g*zz
nmap g# g#zz

" -------------------
" Keymapping
" -------------------
" Command Mode
" 始動キー
let mapleader=","
" Reload vimrc
noremap <Leader>r :source ~/.vimrc<CR>:noh<CR>
" Save
nnoremap <Leader>, :<C-u>update<CR>
nnoremap <Leader>q :<C-u>q<CR>
nnoremap <Leader>Q :<C-u>q!<CR>
" Paste Mode
nnoremap <Leader>p :<C-u>set invpaste<CR>
" make
noremap <Leader>m :<C-u>make!<CR><CR>:<C-u>make! clean<CR><CR>
noremap <Space>m :<C-u>make!<CR>
noremap <Space>M  :<C-u>make! clean<CR><CR>

" Backspace
noremap ^? ^H
noremap! ^? ^H
noremap <BS> ^H
noremap! <BS> ^H

" Reset Highlight
nnoremap <Esc><Esc> :noh<CR>
" Jump
noremap gh ^
noremap gl $
" Split resize
nnoremap + <C-W>k<C-W>+<C-W>p
nnoremap - <C-W>k<C-W>-<C-W>p
" Vsplit resize
nnoremap ) <C-W>h<C-W>><C-W>p
nnoremap ( <C-W>h<C-W><LT><C-W>p
" tab pages
nnoremap tt :<C-u>tabnew<CR>
nnoremap tn :<C-u>tabnext<CR>
nnoremap tp :<C-u>tabprevious<CR>
nnoremap tc :<C-u>tabclose<CR>
nnoremap tf :<C-u>tabfirst<CR>
nnoremap tl :<C-u>tablast<CR>

" FuzzyFinder
nnoremap <silent> fb :<C-u>FufBuffer<CR>
nnoremap <silent> fF :<C-u>FufFile<CR>
nnoremap <silent> ff :<C-u>FufFile <C-r>=expand('%:~:.')[:-1-len(expand('%:~:.:t'))]<CR><CR>
nnoremap <silent> tb :<C-u>tabnew<CR>:tabmove<CR>:FufBuffer<CR>
nnoremap <silent> tF :<C-u>tabnew<CR>:tabmove<CR>:FufFile<CR>
nnoremap <silent> tf :<C-u>tabnew<CR>:tabmove<CR>:FufFile <C-r>=expand('#:~:.')[:-1-len(expand('#:~:.:t'))]<CR><CR>

" quickrun
nnoremap <silent> <Leader>x :<C-u>QuickRun<CR>

"" GNU global
" Tips: ジャンプ前に戻るにはCtrl-o, 進むにはCtrl-iを使うとよい
" input Gtags
nnoremap <C-g> :<C-u>Gtags 
" 検索結果を前方,後方ジャンプする
nnoremap <C-n> :<C-u>cn<CR>
nnoremap <C-p> :<C-u>cp<CR>
" カーソル位置の単語を検索
nnoremap <C-j> :<C-u>GtagsCursor<CR>
" 現在のファイル内の定義を一覧する
nnoremap <C-l> :<C-u>Gsettags -f %<CR>

" Insert Mode
" filetypeに応じた補完を行う
inoremap <C-b> <C-x><C-o>

" -------------------
" その他
" -------------------
" バックアップするorしない
set backup
" バックアップファイルの場所
set backupdir=~/log/vim
" スワップファイルを作成するディレクトリ
" set dir=~/tmp
" 覚えておく履歴の数
set history=50    
" 編集中の内容を保ったまま別の画面に切替えられるようにする
set hid
" 行末・行間移動を可能にする(それらでカーソルが止まらない)
set whichwrap=b,s,h,l,<,>,[,]
" 水平分割で開く新しいファイルを下に開き,フォーカスを移す
set splitbelow
" Big http://vim-users.jp/2009/12/hack106/
" 分割表示する他のウィンドウを最小化する
" 大きさを復活させるには <Ctrl+w>= を
command! Big wincmd _ | wincmd |


" -------------------
" plugin
" -------------------
" Ruby on Railsモードへの布石
filetype on
filetype indent on
filetype plugin on
" :R      コントローラとビューの切り替え
" ショートカット

"" Ruby mode
"au FileType ruby :set nowrap tabstop=2 tw=0 sw=2 enc=utf-8 fenc=utf-8
"au FileType html :set nowrap tabstop=2 tw=0 sw=2 enc=utf-8 fenc=utf-8

"au BufNewFile *.html  :set ft=html
"au BufNewFile *.css   :set ft=html

"au BufNewFile *.rhtml :set ft=ruby
"au BufNewFile *.rb    :set ft=ruby
"au BufNewFile *.yml   :set ft=ruby