現在のvimrc(.vimrc)
2011年3月18日Table of Contents
WEB上に置いておくとなにかと便利なので、vimrc晒し。
" KYO's Tech thekyo.jp
" KYO's Tech thekyo.jp
""
" 基本設定
"
" バックアップファイル(***~)を作らない
set nobk
""
" 文字コード設定
"
" ターミナルコンソールエンコーディング
set termencoding=utf-8
" 改行コード[unix|dos|mac]
set fileformat=unix
set fileformats=unix,dos,mac
" 内部エンコーディング
set fileencoding=utf-8
set fileencodings=iso-2022-jp,utf-8,cp932,euc-jp,default,latin
""
" タブ/インデント設定
"
" 画面上でのタブ幅(tabstop/softtabstop)
set ts=4
set sts=0
" タブをスペースに展開
set expandtab
" 自動的にインデントする(shiftwidth/autoindent)
set sw=4
set autoindent
" スマートインデント(smartindent or cindent)
" set smartindent
set cindent
" バックスペースで、インデントや改行を削除(backspace)
" 0: Vi互換
" 1: indent,eol
" 2: indent,eol,start
set bs=2
""
" 編集設定
"
" 括弧入力時に、対応する括弧を表示
set showmatch
" コマンドライン補完に強化されたものを利用する
set wildmenu
"set wildmenu=list:full
" テキスト整形オプション
set formatoptions=tcq
" ステータスライン表示情報
"set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P
function GetStatusEx()
let str = ''
let str = str. '['. &fileformat. ']'
if has('multi byte') && fileencoding != ''
let str = '['. &fenc . ']'. str
endif
return str
endfunction
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P
" テキスト挿入の自動折り返しを日本語対応
set formatoptions+=mM
" 折り畳み
set foldmethod=marker
set foldmarker={{{,}}}
set foldminlines=1
set foldnestmax=20
" テキストの最大幅 (0:自動改行しない)
set textwidth=0
" 編集中でも他のファイルを開けるように設定
set hidden
" 行番号を表示
set number
" ルーラーを表示
set ruler
" タブや改行を表示 (list:表示)
set list
" どの文字でタブや改行を表示するかを設定
"set listchars=tab:>-,extends:<,trail:-,eol:<
" 長い行を折り返して表示 (nowrap:折り返さない)
set wrap
" 常にステータス行を表示 (詳細は:he laststatus)
set laststatus=2
" コマンドラインの高さ (Windows用gvim使用時はgvimrcを編集すること)
set cmdheight=2
" コマンドをステータス行に表示
set showcmd
" タイトルを表示
set title
" 画面を黒地に白にする (次行の先頭の " を削除すれば有効になる)
colorscheme evening
" シンタックスのハイライト
syntax on
" ビープ音
set visualbell
" Tab、行末の半角スペースを明示的に表示
set list
set listchars=tab:^\ ,trail:~
""
" 検索設定
"
" インクリメントサーチ
set incsearch
" 水平サーチ
set hlsearch
" 検索時、大文字小文字を無視
set ignorecase
" 大文字小文字の両方が含まれている場合、大文字と小文字を区別
set smartcase
" 検索時、ファイル末尾から先頭へ戻る
set wrapscan
""
" dictionary
"
set dictionary=$HOME/.vim/dict/php.dict
""
" 日本語エンコード
"
if &encoding !=# 'utf-8'
set encoding=japan
endif
set fileencoding=japan
if has('iconv')
let s:enc_euc = 'euc-jp'
let s:enc_jis = 'iso-2022-jp'
" iconvがJISX0213に対応しているかをチェック
if 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\|jisx0213\)$'
set fileencodings+=cp932
set fileencodings-=euc-jp
set fileencodings-=euc-jisx0213
let &encoding = s:enc_euc
else
let &fileencodings = &fileencodings .','. s:enc_euc
endif
endif
unlet s:enc_euc
unlet s:enc_jis
endif
""
" 全角スペース表示
"
function! ZenkakuSpace()
"ZenkakuSpaceをカラーファイルで設定するなら次の行は削除
highlight ZenkakuSpace cterm=underline ctermfg=darkgrey gui=underline guifg=darkgrey
"全角スペースを明示的に表示する。
silent! match ZenkakuSpace / /
endfunction
if has('syntax')
augroup ZenkakuSpace
autocmd!
autocmd VimEnter,BufEnter * call ZenkakuSpace()
augroup END
endif
""
" インサートモード時の色変更
"
let g:hi_insert = 'highlight StatusLine guifg=darkblue guibg=darkyellow gui=none ctermfg=blue ctermbg=darkred cterm=none'
if has('syntax')
augroup InsertHook
autocmd!
autocmd InsertEnter * call s:StatusLine('Enter')
autocmd InsertLeave * call s:StatusLine('Leave')
augroup END
endif
let s:slhlcmd = ''
function! s:StatusLine(mode)
if a:mode == 'Enter'
silent! let s:slhlcmd = 'highlight ' . s:GetHighlight('StatusLine')
silent exec g:hi_insert
else
highlight clear StatusLine
silent exec s:slhlcmd
endif
endfunction
function! s:GetHighlight(hi)
redir => hl
exec 'highlight '.a:hi
redir END
let hl = substitute(hl, '[\r\n]', '', 'g')
let hl = substitute(hl, 'xxx', '', '')
return hl
endfunction
""
" 現在のファイルをそのまま実行(ファイルが存在すること)
"
" @see http://subtech.g.hatena.ne.jp/secondlife/20060727/1153990447
" @usage ,e
"
function! ShebangExecute()
let m = matchlist(getline(1), '#!\(.*\)')
if(len(m) > 2)
execute '!'. m[1] . ' %'
else
execute '!' &ft ' %'
endif
endfunction
nmap ,e :call ShebangExecute()<CR>
""
" php syntax check
"
" @see http://d.hatena.ne.jp/tell-k/20081224/1230185066
" @usage :make
autocmd filetype php :set makeprg=php\ -l\ %
autocmd filetype php :set errorformat=%m\ in\ %f\ on\ line\ %l
""
" yanktmp.vim
"
" @usage sy
map <silent> sy :call :call YanktmpYank()<CR>
map <silent> sp :call :call YanktmpPaste_p()<CR>
map <silent> sp :call :call YanktmpPaste_p()<CR>
"""
"" ポップアップメニューのカラーを設定
""
" highlight Pmenu ctermbg=4
" highlight PmenuSel ctermbg=1
" highlight PMenuSbar ctermbg=4
""<TAB>で補完
"" {{{ Autocompletion using the TAB key
"" This function determines, wether we are on the start of the line text (then tab indents) or
"" if we want to try autocompletion
" function! InsertTabWrapper()
" let col = col('.') - 1
" if !col || getline('.')[col - 1] !~ '\k'
" return "\<TAB>"
" else
" if pumvisible()
" return "\<C-N>"
" else
" return "\<C-N>\<C-P>"
" end
" endif
" endfunction
"" Remap the tab key to select action with InsertTabWrapper
" inoremap <tab> <c-r>=InsertTabWrapper()<cr>
"" }}} Autocompletion using the TAB key
"
"