_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,BufEnter * call ActivateInvisibleIndicator() augroup END endif
"""""""""""""""""""""""""""""" "grep,tagsのためカレントディレクトリをファイルと同じディレクトリに移動する。 """""""""""""""""""""""""""""" "if exists('+autochdir') " "autochdirがある場合カレントディレクトリを移動 " set autochdir "else " "autochdirが存在しないが、カレントディレクトリを移動したい場合 " au BufEnter * execute ":silent! cd " . expand("%:p:h") "endif
"---------------------------------------- " 各種プラグイン設定 "----------------------------------------
|