最近の.vimrc
いつも気がついたら.vimrc編集、って感じなのでずいぶんカオスってきた。
で、色々と直してたのだけど、ついでにさらしてみるのもいいかと思ってさらしてみた。
まぁ、前に一度さらしてるのだが。
加えてちょこちょことおすすめ設定をば。
ということで、.vimrc全体。
syntax on filetype plugin on filetype indent on " set {{{1 set title set nocompatible set noinsertmode set ruler set wildmode=list:longest set wildmenu set showmatch set matchpairs+=<:> set matchtime=3 set hidden set nowrap set list set listchars=tab:\ \ ,trail:_,precedes:<,extends:> set laststatus=2 set cmdheight=1 set showmode set smartindent set autoindent set incsearch set hlsearch set wrapscan set encoding=utf-8 set backspace=indent,start,eol set fileformats=unix,dos,mac set laststatus=2 set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8p set showcmd set nrformats-=octal set tags=./tags,../tags,~/tags set viewdir=~/.backup/view set backupdir=~/.backup/vim set backup set foldmethod=marker set foldlevel=15 set completeopt+=longest if exists('&ambiwidth') set ambiwidth=single endif let g:netrw_liststyle=1 " 自動文字コード判別 {{{1 set fileencoding=utf-8 set fileencodings=iso-2022-jp,utf-8,euc-jp,sjis if has('autocmd') function! AU_ReCheck_FENC() if &fileencoding =~# 'iso-2022-jp' && search("[^\x01-\x7e]", 'n') == 0 let &fileencoding=&encoding endif endfunction autocmd BufReadPost * call AU_ReCheck_FENC() endif " 自動バックアップ {{{1 if has( "autocmd" ) autocmd BufWritePre * call UpdateBackupFile() function! UpdateBackupFile() let dir = strftime("~/.backup/vim/%Y/%m/%d", localtime()) if !isdirectory(dir) let retval = system("mkdir -p ".dir) let retval = system("chown 500:500 ".dir) endif exe "set backupdir=".dir unlet dir let time = strftime("%H_%M_%S", localtime()) exe "set backupext=.".time endfunction endif " mapping {{{1 map <C-E>n :tabnew<CR> map <C-E>o :tabe map <C-E>c :tabc map <C-E><Right> :tabn<CR> map <C-E><Left> :tabp<CR> nmap n nzz nmap N Nzz nmap * *zz nmap # #zz nmap g* g*zz nmap g# g#zz nmap j gj nmap k gk nmap <ESC><ESC> :nohl<CR><ESC> nmap \gc :cc<CR> nmap \gp :cp<CR> nmap \gP :cfirst<CR> nmap \gn :cn<CR> nmap \gN :clast<CR> map \mm :set aw \| make \| set noaw<CR> map \mn :set aw \| make clean \| make \| set noaw<CR> map <C-T><C-T> :tabnew \| Explore<CR> map <C-T><C-Y> :tabn<CR> map <C-T><C-R> :tabp<CR> map <C-T><C-G> :tabc<CR> map! <C-T><C-T> <ESC>:tabnew \| Explore<CR> map! <C-T><C-Y> <ESC>:tabn<CR> map! <C-T><C-R> <ESC>:tabp<CR> map! <C-T><C-G> <ESC>:tabc<CR> map <C-E><C-E> :Explore<CR> map! <C-E><C-E> <ESC>:Explore<CR> map <C-P> <C-N> if has( "clipboard" ) vmap \d "+d vmap \D "+D vmap \y "+y vmap \Y "+Y vmap \p "+p vmap \P "+P nmap \d "+d nmap \D "+D nmap \y "+y nmap \Y "+Y nmap \p "+p nmap \P "+P endif " Color関係 {{{1 hi Pmenu ctermbg=4 hi PmenuSel ctermbg=1 hi PMenuSbar ctermbg=4 highlight Comment ctermfg=6 highlight ZenkakuSpace cterm=underline match ZenkakuSpace / / " ファイル毎の設定 {{{1 if has( "autocmd" ) autocmd FileType ruby set ts=2 sw=2 sts=2 autocmd FileType actionscript :set dictionary=~/.vim/dict/actionscript3.dict autocmd FileType tex :set dictionary=~/.vim/dict/tex.dict autocmd FileType lecturememo :set dictionary=~/.vim/dict/tex.dict set complete+=k endif " errorformat関係 {{{1 if has( "autocmd" ) autocmd filetype haskell set errorformat= autocmd filetype haskell set errorformat+=%f:%l:%c:\ %m autocmd filetype haskell set errorformat+=%f:%l:%c: autocmd filetype prolog set errorformat= autocmd filetype prolog set errorformat+=ERROR:\ %f:%l:%c:\ %m endif set errorformat+=%D%*\\a[%*\\d]:\ ディレクトリ\ `%f'\ に入ります set errorformat+=%X%*\\a[%*\\d]:\ ディレクトリ\ `%f'\ から出ます " いろいろ {{{1 if has( "autocmd" ) autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal! g`\"" | \ endif endif if has( "autocmd" ) && exists( "+omnifunc" ) autocmd Filetype * \ if &omnifunc == "" | \ setlocal omnifunc=syntaxcomplete#Complete | \ endif endif " plugin設定 {{{1 " autodate {{{2 let autodate_format="%Y/%m/%d %H:%M:%S" " autocomplpop {{{2 let g:AutoComplPop_NotEnableAtStartup=1
まずはsetの類。
先頭にまとめて書いちゃってます。
default onなやつも書いちゃったりしてるので無駄多いかも。
set title set nocompatible set noinsertmode set ruler set wildmode=list:longest set wildmenu set showmatch set matchpairs+=<:> set matchtime=3 set hidden set nowrap set list set listchars=tab:\ \ ,trail:_,precedes:<,extends:> set laststatus=2 set cmdheight=1 set showmode set smartindent set autoindent set incsearch set hlsearch set wrapscan set encoding=utf-8 set backspace=indent,start,eol set fileformats=unix,dos,mac set laststatus=2 set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8p set showcmd set nrformats-=octal set tags=./tags,../tags,~/tags set viewdir=~/.backup/view set backupdir=~/.backup/vim set backup set foldmethod=marker set foldlevel=15 set completeopt+=longest if exists('&ambiwidth') set ambiwidth=single endif let g:netrw_liststyle=1
個人的お気に入りはwildmode,wildmenu,statusline,completeopt
statuslineは一番下にでるステート行。
他人のvimいじってると時々違和感...(д
wild系とcompleteoptはほとんど趣味。
bashになれすぎなせいかlongest*1じゃないとイヤ。
あと小ネタ系でいくならmatchpairsとかnrformatsかな?
matchpairsは%コマンドとかの挙動に'<','>'のペアを加える。
nrformatsは-=octalすることでC-AやらC-X*2の挙動を変える。
デフォだと0始まりは8進数と認識されてしまうのだが8進数とか普段使わないし。
友人らの間で以外に知られてなかったのがlistとlistchars。
タブやら行末の半角スペース、あとnowrapの時の左右の省略記号を変えられる。
行末の半角スペースは結構気になるのでアンダーバーを表示させてる。
setじゃないけど、g:netrw_liststyleは変えておくと便利かも。
:Exploreのデフォの表示を変える。
Explore画面でiを押す度に表示が変わるのだが、iを押すのもめんどい。
ということで最初から詳細表示に。
自動文字コード判別
set fileencoding=utf-8 set fileencodings=iso-2022-jp,utf-8,euc-jp,sjis if has('autocmd') function! AU_ReCheck_FENC() if &fileencoding =~# 'iso-2022-jp' && search("[^\x01-\x7e]", 'n') == 0 let &fileencoding=&encoding endif endfunction autocmd BufReadPost * call AU_ReCheck_FENC() endif
えっと、空ファイルを開いたような時とかはutf-8になるように。
そのくらいかな?
自動バックアップ
一押し設定。
というか、俺これなかったら死亡するわ。
プログラマ必見。は言い過ぎか。
でもかなりイイ。
if has( "autocmd" ) autocmd BufWritePre * call UpdateBackupFile() function! UpdateBackupFile() let dir = strftime("~/.backup/vim/%Y/%m/%d", localtime()) if !isdirectory(dir) let retval = system("mkdir -p ".dir) let retval = system("chown 500:500 ".dir) endif exe "set backupdir=".dir unlet dir let time = strftime("%H_%M_%S", localtime()) exe "set backupext=.".time endfunction endif
バッファが上書きされる直前にバックアップを取る。
というか、バックアップファイルの名前を変えて前のが上書きされないようにする。
途中chmod 500:500してるのはsudoとかで権限が変わってたりする時用。
もっとスマートな解決策が欲しいところ。
時々見かけるのはCursorHoldを使ってる.vimrc。
んー。BufWritePreでいい気がするのだが...。
ナニカ意味があるのかな?
あとmkdirは-pオプションを使うと便利。
さすがに秒までディレクトリ作るとくどいので、時分秒は拡張子にくっつけてみた。
良い感じ(//)
こんなん書いたらハードディスクの容量つぶれるYO
とかいう人がいそうだけど、ファイル消失の恐怖に比べれば安いもの。
ないと不安になる。
mapping
多分.vimrcの中で一番個性がでる部分。
map <C-E>n :tabnew<CR> map <C-E>o :tabe map <C-E>c :tabc map <C-E><Right> :tabn<CR> map <C-E><Left> :tabp<CR> nmap n nzz nmap N Nzz nmap * *zz nmap # #zz nmap g* g*zz nmap g# g#zz nmap j gj nmap k gk nmap <ESC><ESC> :nohl<CR><ESC> nmap \gc :cc<CR> nmap \gp :cp<CR> nmap \gP :cfirst<CR> nmap \gn :cn<CR> nmap \gN :clast<CR> map \mm :set aw \| make \| set noaw<CR> map \mn :set aw \| make clean \| make \| set noaw<CR> map <C-T><C-T> :tabnew \| Explore<CR> map <C-T><C-Y> :tabn<CR> map <C-T><C-R> :tabp<CR> map <C-T><C-G> :tabc<CR> map! <C-T><C-T> <ESC>:tabnew \| Explore<CR> map! <C-T><C-Y> <ESC>:tabn<CR> map! <C-T><C-R> <ESC>:tabp<CR> map! <C-T><C-G> <ESC>:tabc<CR> map <C-E><C-E> :Explore<CR> map! <C-E><C-E> <ESC>:Explore<CR> map <C-P> <C-N> if has( "clipboard" ) vmap \d "+d vmap \D "+D vmap \y "+y vmap \Y "+Y vmap \p "+p vmap \P "+P nmap \d "+d nmap \D "+D nmap \y "+y nmap \Y "+Y nmap \p "+p nmap \P "+P endif
普段使うのは\g系と\m系、
あとは書いただけで使わないなぁ。
\mは:make関係で、\g系がその後のエラー箇所めぐり用。
vim+makeの使いやすさは異常。
地味に便利。この地味さがまたよし。
clipboard関係はvimを+clipboardでコンパイルしておくと使える小技。
Linuxの(というかXの?)クリップボードへ/から、カット、ヤンク、プットができる。
set pasteもいいけど、"+pのほうがスマートだ。
ところでhas( "clipboard" )でいいのかな?
まぁ、動いてるからいいとしよう。
Color関係
色とか。見やすい色がいいのだけどどうも色は苦手(д
hi Pmenu ctermbg=4 hi PmenuSel ctermbg=1 hi PMenuSbar ctermbg=4 highlight Comment ctermfg=6 highlight ZenkakuSpace cterm=underline match ZenkakuSpace / /
上四つは普通に色変えてるだけ。
たしか補完リストとコメントの色。
なんで記法が微妙に違うか、っていうとコピペ元*3が違うからw
で、下のは個人的お気に入りその二。
プログラマの大敵、全角スペース。
その全角スペースをhighlightします。
とりあえずunderlineつけてるだけなんだけど、いっそ背景色を変えてしまった方がいいかも。
あ、いっちゃんしたの二個のスラッシュの間は、件の全角スペースです。
便利便利。
ファイル毎の設定
if has( "autocmd" ) autocmd FileType ruby set ts=2 sw=2 sts=2 autocmd FileType actionscript :set dictionary=~/.vim/dict/actionscript3.dict autocmd FileType tex :set dictionary=~/.vim/dict/tex.dict autocmd FileType lecturememo :set dictionary=~/.vim/dict/tex.dict set complete+=k endif
rubyのtab幅は2だろ!というid:viver氏の言葉によりtab幅2です。
あとactionscriptはなんか前書いた気がする。
tex.dictはたしかfindでみっけた.texファイルをひたすらsedして、バックスラッシュ始まりの言葉を拾ってきたカタマリ。
lecturememoはPCでノートテイクする用。
ま、あんま使ってないけど。
とりあえず自分が分かればいいので、授業で出てきた数式はなんちゃってtex記法でかいてる。
errorformat関係
vim+makeをよりよい環境にするためのもうワンステップ。
以外と認知度低めかも。errorformat。
if has( "autocmd" ) autocmd filetype haskell set errorformat= autocmd filetype haskell set errorformat+=%f:%l:%c:\ %m autocmd filetype haskell set errorformat+=%f:%l:%c: autocmd filetype prolog set errorformat= autocmd filetype prolog set errorformat+=ERROR:\ %f:%l:%c:\ %m endif set errorformat+=%D%*\\a[%*\\d]:\ ディレクトリ\ `%f'\ に入ります set errorformat+=%X%*\\a[%*\\d]:\ ディレクトリ\ `%f'\ から出ます
あんま試してなかったりするw
ghcのエラーメッセージは、形式がgccとずいぶん違うんで:makeすると、時々ご乱心する。
元のerrorformatだとコロンが入ってると問答無用でファイルと認識する。
ので、"Declared at: hoge.hs"なんていうとんでもないファイルを編集しようとしてまうのだ。
ということで、一旦errorformatを空にしてやって新たに定義を追加。
%E,%Cとか使って複数行エラーを拾ってもやってもいいのだが、エラーメッセージが長すぎて使いづらくなるので断念。
まぁ、いざとなれば:cwindowつかえばいいさ。
prologも同様。あんま使わないけど。
あと下の二行は日本語化されたgcc(というかmakeか?)でもちゃんとディレクトリ移動できりょうに追加してみた。
まぁ、これまたあまり使わないなぁ...。
いろいろ
もはや適当ッス
if has( "autocmd" ) autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal! g`\"" | \ endif endif if has( "autocmd" ) && exists( "+omnifunc" ) autocmd Filetype * \ if &omnifunc == "" | \ setlocal omnifunc=syntaxcomplete#Complete | \ endif endif
前者は前回終了したカーソル位置を復元するもの。
たしかmandrivaのvimは最初から有効だったような...。何でかいてあるんだろう。
後者は、えっと、なんだけ?
なんかomnicompまわりっぽいけど...。
いつ書いたんだ?これ?
分からない(苦笑
plugin設定
まぁ、あとはpluginの設定とか。
" autodate {{{2 let autodate_format="%Y/%m/%d %H:%M:%S" " autocomplpop {{{2 let g:AutoComplPop_NotEnableAtStartup=1
ということで、
ざっとこんな感じです。
まぁ、何かの参考になれば。