"============================================================================= " Description: .vimrcサンプル設定 " Author: anonymous " Last Modified: 0000-00-00 07:03 " Version: 0.00 "============================================================================= set nocompatible scriptencoding cp932 " scriptencodingと、このファイルのエンコーディングが一致するよう注意! " scriptencodingは、vimの内部エンコーディングと同じものを推奨します。 " 改行コードは set fileformat=unix に設定するとunixでも使えます。 " Windowsで内部エンコーディングを cp932以外にしていて、 " 環境変数に日本語を含む値を設定したい場合は Let を使用します。 " Letは vimrc(オールインワンパッケージの場合)と encode.vim で定義されます。 " Let $HOGE=$USERPROFILE.'/ほげ' "---------------------------------------- " ユーザーランタイムパス設定 "---------------------------------------- "Windows, unixでのruntimepathの違いを吸収するためのもの。 "$MY_VIMRUNTIMEはユーザーランタイムディレクトリを示す。 ":echo $MY_VIMRUNTIMEで実際のパスを確認できます。 if isdirectory($HOME . '/.vim') let $MY_VIMRUNTIME = $HOME.'/.vim' elseif isdirectory($HOME . '\vimfiles') let $MY_VIMRUNTIME = $HOME.'\vimfiles' elseif isdirectory($VIM . '\vimfiles') let $MY_VIMRUNTIME = $VIM.'\vimfiles' endif "ランタイムパスを通す必要のあるプラグインを使用する場合、 "$MY_VIMRUNTIMEを使用すると Windows/Linuxで切り分ける必要が無くなります。 "例) vimfiles/qfixapp (Linuxでは~/.vim/qfixapp)にランタイムパスを通す場合 "set runtimepath+=$MY_VIMRUNTIME/qfixapp "---------------------------------------- " 内部エンコーディング指定 "---------------------------------------- "内部エンコーディングのUTF-8化と文字コードの自動認識設定をencode.vimで行う。 "オールインワンパッケージの場合 vimrcで設定されます。 "エンコーディング指定や文字コードの自動認識設定が適切に設定されている場合、 "次行の encode.vim読込部分はコメントアウトして下さい。 silent! source $MY_VIMRUNTIME/pluginjp/encode.vim "scriptencodingと異なる内部エンコーディングに変更する場合、 "変更後にもscriptencodingを指定しておくと問題が起きにくくなります。 scriptencoding cp932 "---------------------------------------- " システム設定 "---------------------------------------- "ファイルの上書きの前にバックアップを作る/作らない "set writebackupを指定してもオプション 'backup' がオンでない限り、 "バックアップは上書きに成功した後に削除される。 set nowritebackup "バックアップ/スワップファイルを作成する/しない set nobackup if version >= 703 "再読込、vim終了後も継続するアンドゥ(7.3) "set undofile "アンドゥの保存場所(7.3) "set undodir=. endif set backupdir=~/.vimbackup let &directory = &backupdir "set noswapfile "viminfoを作成しない "set viminfo= "クリップボードを共有 set clipboard+=unnamed "8進数を無効にする。,に影響する 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 "□や○の文字があってもカーソル位置がずれないようにする set ambiwidth=double "コマンドライン補完するときに強化されたものを使う set wildmenu "マウスを有効にする if has('mouse') set mouse=a endif "pluginを使用可能にする filetype plugin indent on " vi互換モードの解除 set nocp " HOMEへ移動 cd $HOME " 文字エンコーディング set encoding=utf-8 if has('win32') || has('win64') set termencoding=cp932 else set termencoding=utf-8 endif set fileencoding=utf-8 " updatetimeを設定 set updatetime=500 ""---------------------------------------- " 検索 "---------------------------------------- "検索の時に大文字小文字を区別する set noignorecase set nosmartcase "検索時にファイルの最後まで行ったら最初に戻る set wrapscan "インクリメンタルサーチ set incsearch "検索文字の強調表示 set hlsearch "w,bの移動で認識する文字 "set iskeyword=a-z,A-Z,48-57,_,.,-,> "vimgrep をデフォルトのgrepとする場合internal set grepprg=internal "---------------------------------------- " 表示設定 "---------------------------------------- "スプラッシュ(起動時のメッセージ)を表示しない set shortmess+=I "エラー時の音とビジュアルベルの抑制(gvimは.gvimrcで設定) set noerrorbells set novisualbell set visualbell t_vb= "マクロ実行中などの画面再描画を行わない "set lazyredraw "Windowsでディレクトリパスの区切り文字表示に / を使えるようにする set shellslash "行番号表示 set number if version >= 703 "相対行番号表示(7.3) "set relativenumber endif "括弧の対応表示時間 set showmatch matchtime=1 "タブを設定 "set ts=4 sw=4 sts=4 "自動的にインデントする set autoindent "Cインデントの設定 set cindent set cinoptions+=:0,g0 "タイトルを表示 set title "コマンドラインの高さ (gvimはgvimrcで指定) set cmdheight=2 set laststatus=2 "コマンドをステータス行に表示 set showcmd "画面最後の行をできる限り表示する set display=lastline "Tab、行末の半角スペースを明示的に表示する " set list " set listchars=tab:-> " ハイライトを有効にする if &t_Co > 2 || has('gui_running') syntax on endif " インデント幅 set shiftwidth=2 " タブの画面上での幅 set tabstop=2 " タブをスペースに展開 set expandtab " オムニ補完でプレビューウィンドウを表示しない set completeopt=longest,menu " 長い行を折り返さず表示 set wrap " 改行時の自動コメント挿入のオフ autocmd FileType * setlocal formatoptions-=ro """""""""""""""""""""""""""""" "ステータスラインに文字コード等表示 "iconvが使用可能の場合、カーソル上の文字コードをエンコードに応じた表示にするFencB()を使用 """""""""""""""""""""""""""""" if has('iconv') set statusline=%<%f\ %m\ %r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=[0x%{FencB()}]\ (%v,%l)/%L%8P\ else set statusline=%<%f\ %m\ %r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=\ (%v,%l)/%L%8P\ endif "FencB() : カーソル上の文字コードをエンコードに応じた表示にする function! FencB() let c = matchstr(getline('.'), '.', col('.') - 1) let c = iconv(c, &enc, &fenc) return s:Byte2hex(s:Str2byte(c)) endfunction function! s:Str2byte(str) return map(range(len(a:str)), 'char2nr(a:str[v:val])') endfunction function! s:Byte2hex(bytes) return join(map(copy(a:bytes), 'printf("%02X", v:val)'), '') endfunction "---------------------------------------- " diff/patch "---------------------------------------- "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 cmd = '!diff ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 silent execute cmd endfunction endif "現バッファの差分表示(変更箇所の表示) command! DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis "ファイルまたはバッファ番号を指定して差分表示。#なら裏バッファと比較 command! -nargs=? -complete=file Diff if ''=='' | browse vertical diffsplit|else| vertical diffsplit |endif "パッチコマンド set patchexpr=MyPatch() function! MyPatch() :call system($VIM."\\'.'patch -o " . v:fname_out . " " . v:fname_in . " < " . v:fname_diff) endfunction "---------------------------------------- " ノーマルモード "---------------------------------------- "ヘルプ検索 " nnoremap K "現在開いているvimスクリプトファイルを実行 nnoremap :source % "強制全保存終了を無効化 nnoremap ZZ "カーソルをj k では表示行で移動する。物理行移動は, "キーボードマクロには物理行移動を推奨 "h l は行末、行頭を超えることが可能に設定(whichwrap) nnoremap gj nnoremap gk nnoremap h nnoremap j gj nnoremap k gk nnoremap l "l を に置き換えても、折りたたみを l で開くことができるようにする if has('folding') nnoremap l foldlevel(line('.')) ? "\zo" : "\" endif " インサートモード、コマンドモード時はEmacsキーバインドを使う inoremap inoremap inoremap inoremap cnoremap cnoremap " スペースキーを押した時、中心を保ってスクロール nnoremap jzz nnoremap kzz " モード切替時にIMEを自動オフ inoremap :set iminsert=0 " vimrcとgvimrcを再設定するための設定 if has('win32') || has('win64') nnoremap ev :edit ~/Dropbox/dotfile/.vimrc nnoremap eg :edit ~/Dropbox/dotfile/.gvimrc else nnoremap ev :edit ~/Dropbox/dotfile/.vimrc nnoremap eg :edit ~/Dropbox/dotfile/.gvimrc endif " 入力で空行の挿入 nnoremap o "---------------------------------------- " 挿入モード "---------------------------------------- "---------------------------------------- " ビジュアルモード "---------------------------------------- "---------------------------------------- " コマンドモード "---------------------------------------- "---------------------------------------- " Vimスクリプト "---------------------------------------- """""""""""""""""""""""""""""" "ファイルを開いたら前回のカーソル位置へ移動 "$VIMRUNTIME/vimrc_example.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') augroup InsertHook autocmd! autocmd InsertEnter * call s:StatusLine('Enter') autocmd InsertLeave * call s:StatusLine('Leave') augroup END endif " if has('unix') && !has('gui_running') " " ESCですぐに反映されない対策 " inoremap " 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 redraw 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 """""""""""""""""""""""""""""" "全角スペースを表示 """""""""""""""""""""""""""""" "コメント以外で全角スペースを指定しているので、scriptencodingと、 "このファイルのエンコードが一致するよう注意! "強調表示されない場合、ここでscriptencodingを指定するとうまくいく事があります。 "scriptencoding cp932 function! 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 """""""""""""""""""""""""""""" "grep,tagsのためカレントディレクトリをファイルと同じディレクトリに移動する """""""""""""""""""""""""""""" "if exists('+autochdir') " "autochdirがある場合カレントディレクトリを移動 " set autochdir "else " "autochdirが存在しないが、カレントディレクトリを移動したい場合 " au BufEnter * execute ":silent! lcd " . escape(expand("%:p:h"), ' ') "endif "---------------------------------------- " 各種プラグイン設定 "---------------------------------------- " Vundle set nocompatible filetype off if has('vim_starting') set runtimepath+=~/.bundle/neobundle.vim call neobundle#rc(expand('~/.bundle')) endif " 利用中のプラグインをBundle NeoBundle 'Shougo/neobundle.vim' NeoBundle 'Shougo/neocomplcache' NeoBundle 'Shougo/unite.vim' NeoBundle 'Shougo/vimshell' NeoBundle 'Shougo/vimfiler' NeoBundle 'Shougo/vimproc' NeoBundle 'Shougo/vinarise' NeoBundle 'Shougo/unite-build' NeoBundle 'Shougo/neocomplcache-clang' NeoBundle 'Rip-Rip/clang_complete' NeoBundle 'osyo-manga/neocomplcache-clang_complete' NeoBundle 'osyo-manga/vim-cpp11-syntax' NeoBundle 'osyo-manga/unite-kakizome' NeoBundle 'thinca/vim-visualstar' NeoBundle 'thinca/vim-ref' NeoBundle 'thinca/vim-vcs' NeoBundle 'tyru/skk.vim' " NeoBundle 'tyru/eskk.vim' NeoBundle 'tyru/restart.vim' NeoBundle 'tyru/caw.vim' NeoBundle 'tyru/open-browser.vim' NeoBundle 'taku-o/vim-toggle' NeoBundle 'h1mesuke/unite-outline' NeoBundle 't9md/vim-quickhl' NeoBundle 'Lokaltog/vim-easymotion' NeoBundle 'gregsexton/VimCalc' " NeoBundle 'mattn/webapi-vim' NeoBundle 'mattn/excitetranslate-vim' NeoBundle 'mattn/unite-advent_calendar' NeoBundle 'basyura/TweetVim' NeoBundle 'basyura/twibill.vim' NeoBundle 'basyura/bitly.vim' NeoBundle 'basyura/webapi-vim' NeoBundle 'toritori0318/vim-redmine' NeoBundle 'Lokaltog/vim-powerline' NeoBundle 'Conque-Shell' filetype plugin indent on " neocomplcache let g:neocomplcache_enable_at_startup = 1 let g:neocomplcache_max_list = 5000 let g:neocomplcache_auto_completion_start_length = 2 let g:neocomplcache_manual_completion_start_length = 2 let g:neocomplcache_enable_ignore_case = &ignorecase let g:neocomplcache_enable_smart_case = 0 if !exists('g:neocomplcache_delimiter_patterns') let g:neocomplcache_delimiter_patterns= {} endif let g:neocomplcache_delimiter_patterns.cpp = ['::'] if !exists('g:neocomplcache_omni_patterns') let g:neocomplcache_omni_patterns = {} endif let g:neocomplcache_omni_patterns.c = '\%(\.\|->\)\h\w*' let g:neocomplcache_omni_patterns.cpp = '\h\w*\%(\.\|->\)\h\w*\|\h\w*::' if !exists('g:neocomplcache_include_paths') let g:neocomplcache_include_paths = {} endif if has('win32') || has('win64') let g:neocomplcache_include_paths.cpp = "C:/MinGW/lib/gcc/mingw32/4.5.2/include/c++,C:/MinGW/include,C:/MinGW/include/boost" else let g:neocomplcache_include_paths.cpp = "/usr/include" endif if !exists('g:neocomplcache_member_prefix_patterns') let g:neocomplcache_member_prefix_patterns = {} endif call neocomplcache#set_dictionary_helper(g:neocomplcache_member_prefix_patterns, 'c,cpp,objc,objcpp', '\.\|->') let g:neocomplcache_snippets_dir = '~/.snippets' let g:neocomplcache_snippets_disable_runtime_snippets = 0 if has('win32') || has('win64') set path+=C:/MinGW/include set path+=C:/MinGW/lib/gcc/mingw32/4.5.2/include endif " neocomplcache map imap (neocomplcache_snippets_expand) smap (neocomplcache_snippets_expand) imap (neocomplcache_start_unite_quick_match) if has('win32') || has('win64') let g:clang_use_library = 1 let g:clang_library_path = 'C:/MinGW/bin' let g:clang_user_options = \ '-IC:/MinGW/lib/gcc/mingw32/4.5.2/include/ '. \ '-IC:/MinGW/include '. \ '-fms-extensions -fgnu-runtime '. \ '-include malloc.h ' let g:clang_complete_auto = 1 let g:neocomplcache_force_overwrite_completefunc = 1 elseif has('macunix') let g:neocomplcache_clang_use_library = 1 let g:neocomplcache_clang_library_path = '/usr/share/clang' let g:neocomplcache_clang_user_options = \ '-I/usr/include '. \ '-fms-extensions -fgnu-runtime '. \ '-include malloc.h ' let g:neocomplcache_force_overwrite_completefunc = 1 else let g:clang_use_library = 1 let g:clang_library_path = '/usr/share/clang' let g:clang_user_options = \ '-I/usr/include '. \ '-fms-extensions -fgnu-runtime '. \ '-include malloc.h ' let g:clang_complete_auto = 1 let g:neocomplcache_force_overwrite_completefunc = 1 endif " vimshell let g:vimshell_interactive_update_time = 10 let g:vimshell_disable_escape_highlight = 1 if has('mac') let g:vimshell_prompt = $USER."% " elseif has('win32') || has('win64') || has('unix') let g:vimshell_prompt = $USERNAME."% " endif " vimshell map nnoremap ,vs :VimShell nnoremap ,vcs :VimShellCreate nnoremap ,vp :VimShellPop " vimfiler let g:vimfiler_as_default_explorer = 1 let g:vimfiler_sort_type = 'filename' let g:vimfiler_enable_clipboard = 1 let g:vimfiler_safe_mode_by_default = 0 " vimfiler map nnoremap ,vf :VimFiler nnoremap ,vcf :VimFilerCreate " unite.vim let g:unite_source_file_mru_limit = 200 let g:unite_enable_start_insert = 0 let g:unite_source_file_mru_filename_format = '' let g:unite_source_grep_default_opts = '-iRHn' " unite.vim map nnoremap [unite] nmap , [unite] nnoremap [unite]f :Unitebuffer nnoremap [unite]b :Unitebookmark nnoremap [unite]m :Unitefile_mru nnoremap [unite]r :UniteWithBufferDir file nnoremap ,vr :UniteResume " vinarise let g:vinarise_enable_auto_detect = 1 " unite-build map nnoremap ,vb :Unite build nnoremap ,vcb :Unite build:! nnoremap ,vch :UniteBuildClearHighlight " quickhl.vim map nmap m (quickhl-toggle) xmap m (quickhl-toggle) nmap M (quickhl-reset) xmap M (quickhl-reset) "nmap j (quickhl-match) " skk.vim map! (skk-toggle-im) let g:skk_large_jisyo = expand('~/.skk/SKK-JISYO.L') let g:skk_auto_save_jisyo = 1 set imdisable " eskk.vim " let g:eskk#directory = "~/.skk" " let g:eskk#dictionary = { 'path': "~/.skk-jisyo", 'sorted': 0, 'encoding': 'utf-8', } " let g:eskk#large_dictionary = { 'path': "~/.skk/SKK-JISYO.L", 'sorted': 1, 'encoding': 'euc-jp', } " let g:eskk#enable_completion = 1 " let g:eskk#egg_like_newline_completion = 1 " set imdisable " restart.vim nnoremap rs :Restart " EasyMotion let g:EasyMotion_leader_key = '' " C++11 syntax let g:c_no_curly_error = 1 " ref.vim nmap ,ra :Ref alc " lynx.exe の絶対パス if has('win32') || has('win64') let s:lynx = $VIM."/lynx.exe" let s:cfg = $VIM."/lynx.cfg" let g:ref_alc_cmd = s:lynx.' -cfg='.s:cfg.' -dump %s' let g:ref_alc_start_linenumber = 39 let g:ref_alc_encoding = 'Shift-JIS' else endif " open-browser.vim nmap gx (openbrowser-open) vmap gx (openbrowser-open) " TweetVim nnoremap ,tl :TweetVimHomeTimeline nnoremap ,tr :TweetVimMentions nnoremap ,ts :TweetVimSay nnoremap ,tu :Unite tweetvim if !exists('g:neocomplcache_dictionary_filetype_lists') let g:neocomplcache_dictionary_filetype_lists = {} endif let neco_dic = g:neocomplcache_dictionary_filetype_lists let neco_dic.tweetvim_say = $HOME . '/.tweetvim/screen_name' let g:tweetvim_tweet_per_page = 50 let g:tweetvim_cache_size = 10 let g:tweetvim_config_dir = expand('~/.tweetvim') "---------------------------------------- " その他処理 "---------------------------------------- " fullscreenのToggle nnoremap ,tf :call ToggleFullScreen() function! ToggleFullScreen() if &guioptions =~# 'C' set guioptions-=C if exists('s:go_temp') if s:go_temp =~# 'm' set guioptions+=m endif if s:go_temp =~# 'T' set guioptions+=T endif endif simalt ~r else let s:go_temp = &guioptions set guioptions-=C set guioptions-=m set guioptions-=T simalt ~x endif endfunction " AllMaps command! \ -nargs=* -complete=mapping \ AllMaps \ map | map! | lmap " Linux環境でのクリップボードコピー if has('unix') vnoremap y "+y imap "*pa endif