fudist

_vimrc-sample

vim UTF-8日本語版 - 設定ファイル」へ戻る

scriptencoding cp932
set nocompatible
"scriptencodingと、このファイルのエンコードが一致するよう注意!
"scriptencodingは、vimの内部エンコードと同じにすると問題が起きにくい。

"----------------------------------------
" システム設定
"----------------------------------------
"unix,win32でのpathの違いを吸収
"$CFGHOMEはユーザーランタイムディレクトリを示す。
"ランタイムパスを通す必要のあるプラグインを使用する場合、
"$CFGHOMEを使用すると Windows/Linuxで切り分ける必要が無くなる。
"例) vimfiles/qfixapp (Linuxでは~/.vim/qfixapp)にランタイムパスを通す場合。
"set runtimepath+=$CFGHOME/qfixapp
if has('unix')
  let $CFGHOME=$HOME.'/.vim'
else
  let $CFGHOME=$VIM.'/vimfiles'
endif

"UTF-8化を_vimrcで行う場合以下を有効にする。
"source $CFGHOME/pluginjp/encode.vim
"_vimrcでscriptencodingと異なる内部エンコーディングに変更する場合、
"変更後に改めてscriptencodingを指定しておくと問題が起きにくくなります。

"scriptencoding cp932

"mswin.vimを読み込む
"source $VIMRUNTIME/mswin.vim
"behave mswin

"ファイルの上書きの前にバックアップを作る/作らない
"set writebackupを指定してもオプション 'backup' がオンでない限り、
"バックアップは上書きに成功した後に削除される。
set nowritebackup
"バックアップ/スワップファイルを作成する/しない。
set nobackup
"set noswapfile
"viminfoを作成しない。
"set viminfo=
"クリップボードを共有。
set clipboard+=unnamed
"8進数を無効にする。<C-a>,<C-x>などに影響する。
set nrformats-=octal
"キーコードやマッピングされたキー列が完了するのを待つ時間(ミリ秒)。
set timeoutlen=3500
"編集結果非保存のバッファから、新しいバッファを開くときに警告を出さない。
set hidden
"ヒストリの保存数
set history=50
"日本語の行の連結時には空白を入力しない。
set formatoptions+=mM
"Visual blockモードでフリーカーソルを有効にする。
set virtualedit=block
"カーソルキーで行末/行頭の移動可能に設定。
set whichwrap=b,s,[,],<,>
"バックスペースでインデントや改行を削除できるようにする。
set backspace=indent,eol,start
"□や○の文字があってもカーソル位置がずれないようにする。
if exists('&ambiwidth')
  set ambiwidth=double
endif
"コマンドライン補完するときに強化されたものを使う。
set wildmenu
"マウスを有効にする。
if has('mouse')
  set mouse=a
endif
"pluginを使用可能にする
filetype plugin on

"----------------------------------------
" 表示設定
"----------------------------------------
"gvimの色テーマは.gvimrcで指定する。
"colorscheme mycolor
"スプラッシュ(起動時のメッセージ)を表示しない。
"set shortmess+=I
" ハイライトを有効にする。
if &t_Co > 2 || has('gui_running')
  syntax on
endif
"エラー時の音とビジュアルベルの抑制。
"gvimの場合は.gvimrcで設定する
set noerrorbells
set novisualbell
set visualbell t_vb=
"マクロ実行中などの画面再描画を行わない。
"set lazyredraw
"Windowsでディレクトリパスの区切り文字表示に / を使えるようにする
set shellslash
"行番号表示
set number
"括弧の対応表示時間
set showmatch matchtime=1
"タブを設定
"set ts=4 sw=4 sts=4
"自動的にインデントする (noautoindent:インデントしない)
set autoindent
"Cインデントの設定
set cinoptions+=:0
"タイトルを表示
set title
"コマンドラインの高さ (gvimはgvimrcで指定)
set laststatus=2
set cmdheight=2
"コマンドをステータス行に表示
set showcmd
"画面最後の行をできる限り表示する。
set display=lastline
"Tab、行末の半角スペースを明示的に表示する。
set list
set listchars=tab:^\ ,trail:~
"ステータスラインに文字コード等表示
"iconvが使用可能の場合、カーソル上の文字コードをエンコードに応じた表示にするGetB()を使用。
if has('iconv')
  set statusline=%<%f\ %m\ %r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=[0x%{GetB()}]\ (%v,%l)/%L%8P\
else
  set statusline=%<%f\ %m\ %r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=\ (%v,%l)/%L%8P\
endif

""""""""""""""""""""""""""""""
"GetB() : カーソル上の文字コードをエンコードに応じた表示にする
""""""""""""""""""""""""""""""
function! GetB()
  let c = matchstr(getline('.'), '.', col('.') - 1)
  let c = iconv(c, &enc, &fenc)
  return s:String2Hex(c)
endfunction
" :help eval-examples
" The function Nr2Hex() returns the Hex string of a number.
function! s:Nr2Hex(nr)
  let n = a:nr
  let r = ''
  while n
    let r = '0123456789ABCDEF'[n % 16] . r
    let n = n / 16
  endwhile
  return r
endfunc
" The function String2Hex() converts each character in a string to a two
" character Hex string.
function! s:String2Hex(str)
  let out = ''
  let ix = 0
  while ix < strlen(a:str)
    let out = out . s:Nr2Hex(char2nr(a:str[ix]))
    let ix = ix + 1
  endwhile
  return out
endfunc

"----------------------------------------
" 検索
"----------------------------------------
" 検索の時に大文字小文字を区別しない。
" 大文字小文字の両方が含まれている場合は大文字小文字を区別。
set ignorecase
set smartcase
"検索時にファイルの最後まで行ったら最初に戻る (nowrapscan:戻らない)
set wrapscan
"インクリメンタルサーチ
set incsearch
"検索文字の強調表示
set hlsearch
"w,bの移動で認識する文字
"set iskeyword=a-z,A-Z,48-57,_,.,-,>
"vimgrep をデフォルトのgrepとする場合internal
set grepprg=internal
"diffの設定
if has('win32') || has('win64')
  set diffexpr=MyDiff()
  function! MyDiff()
    let opt = '-a --binary '
    if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
    if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
    let arg1 = v:fname_in
    if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
    let arg2 = v:fname_new
    if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
    let arg3 = v:fname_out
    if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
    let eq = ''
    if $VIMRUNTIME =~ ' '
      if &sh =~ '\<cmd'
        let cmd = '""' . $VIMRUNTIME . '\diff"'
        let eq = '"'
      else
        let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
      endif
    else
      let cmd = $VIMRUNTIME . '\diff'
    endif
    silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq
  endfunction
endif

"現バッファの差分表示(変更箇所の表示)。
command! DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis
"ファイルまたはバッファ番号を指定して差分表示。#なら裏バッファと比較
command! -nargs=? -complete=file Diff if '<args>'=='' | browse vertical diffsplit|else| vertical diffsplit <args>|endif
"パッチコマンド
set patchexpr=MyPatch()
function! MyPatch()
   :call system($VIM."\\'.'patch -o " . v:fname_out . " " . v:fname_in . " < " . v:fname_diff)
endfunction

"----------------------------------------
" ノーマルモード
"----------------------------------------
"ヘルプ検索
nnoremap <F1> K
"現在開いているvimスクリプトファイルを実行。
nnoremap <F8> :source %<CR>
"強制全保存終了を無効化。
nnoremap ZZ <Nop>
"カーソルをj k では表示行で移動する。論理行移動は<C-n>,<C-p>
"キーボードマクロには論理行移動を推奨。
"h l は行末、行頭を超えることが可能に設定(whichwrap)
nnoremap <Down> gj
nnoremap <Up>   gk
nnoremap h <Left>
nnoremap j gj
nnoremap k gk
nnoremap l <Right>
"l を <Right>に置き換えても、折りたたみを l で開くことができるようにする。
"不都合がある場合は以下を無効にしてください。
if has('folding')
  nnoremap <expr> l foldlevel(line('.')) ? "\<Right>zo" : "\<Right>"
endif

"----------------------------------------
" 挿入モード
"----------------------------------------

"----------------------------------------
" ビジュアルモード
"----------------------------------------

"----------------------------------------
" コマンドモード
"----------------------------------------

"----------------------------------------
" Vimスクリプト
"----------------------------------------
""""""""""""""""""""""""""""""
"ファイルを開いたら前回のカーソル位置へ移動
""""""""""""""""""""""""""""""
augroup vimrcEx
  autocmd!
  autocmd BufReadPost *
    \ if line("'\"") > 1 && line("'\"") <= line('$') |
    \   exe "normal! g`\"" |
    \ endif
augroup END

""""""""""""""""""""""""""""""
"挿入モード時、ステータスラインの色を変更
""""""""""""""""""""""""""""""
let g:hi_insert = 'highlight StatusLine guifg=darkblue guibg=darkyellow gui=none ctermfg=blue ctermbg=yellow cterm=none'

if has('syntax')
  syntax on
  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

""""""""""""""""""""""""""""""
"全角スペースを表示
""""""""""""""""""""""""""""""
if has('syntax')
  "コメント以外で全角スペースを指定しているので、scriptencodingと、
  "このファイルのエンコードが一致するよう注意!
"_vimrcでscriptencodingと異なる内部エンコーディングに変更している場合、
"変更後に改めてscriptencodingを指定しておくと問題が起きにくくなります。

"scriptencoding cp932
syntax on
  function! ActivateInvisibleIndicator()
    highlight ZenkakuSpace cterm=underline ctermfg=darkgrey gui=underline guifg=darkgrey
    "全角スペースを明示的に表示する。
    match ZenkakuSpace / /
  endfunction
  augroup InvisibleIndicator
    autocmd!
    autocmd VimEnter,BufEntercall ActivateInvisibleIndicator()
  augroup END
endif

""""""""""""""""""""""""""""""
"grep,tagsのためカレントディレクトリをファイルと同じディレクトリに移動する。
""""""""""""""""""""""""""""""
"if exists('+autochdir')
" "autochdirがある場合カレントディレクトリを移動
" set autochdir
"else
" "autochdirが存在しないが、カレントディレクトリを移動したい場合
" au BufEnter * execute ":silent! cd " . expand("%:p:h")
"endif

"----------------------------------------
" 各種プラグイン設定
"----------------------------------------