現在のvimrc(.vimrc)

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('.')
!~ '\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

"

"