various changes in vimrc

いろいろ理解したので vimrc をいじっていたらいろいろやりたいことが出てきてしまって調べつついじっていたら時間がかかってしまった。変更点まとめようにもけっこう長くなってしまったので分割 & 先に file を晒しておく。こうやって github に色々上げておくと楽ねー。

以下だらだら。

  • .gvimrc
    • Windowsgvim を使っていたので当然のようにすべての設定をこっちに書いていたんだけど、 andLinux 側でも使えるように .vimrc に全く同じ設定を書いたら autocmd で設定した command が二重に飛んでいることに気付いて理解する必要が出てきたという経緯で。
    • で、 :help gvimrc してみたら GUI 版で使える設定だけ書けとか .vimrc を読み込んだあとで読み込まれるとか書いてあるので見た目に関する設定以外はすべて .vimrc に移した。てか GUI 版限定の option って言われてもちゃんと調べないとわからないのでめんどいし、要は 2 回設定したらマズイものを取り除けばいいわけなのでここらへんはおおざっぱに。
    • ついでに guioptions ていう option が目に入ったので調べてみたら ( :help guioptions ) vimp と同じ挙動だとわかったので ( っていうかこれが元ネタなんだよな ) 設定してみた。 tab の描画だけは Windows native ぽく、他は右側の scroll bar のみ表示するように設定 ( :set guioptions=er ) 。
  • comment
    • comment も英語で書くようにした。ってかまぁ英語ぽい何かなんだけど。というのも character encoding を考えるよりも ascii character の範囲内で収めてしまった方が色々と楽なので。自分なりにスッと英語で書けないときは :help して最初の 1 行を書いとくとかで誤魔化してたりもする。
  • .vim or vimfiles
    • 起動時に読み込まれる個人設定は Windows だと %HOME%\vimfiles 、 Linux だと ~/.vim/ 以下が使われるんだけど 1 つの設定ファイルで済ませたいので以下のような code を最初に書いといて、 template file の読み込みなんかにはこの環境変数を使うと楽。てかすでに vim 側でこういう変数設定されてると思ったんだけど探しても見つからなかったので書いてみた。あと普通の変数 ( $ がつかないやつ ) だと autocmd での指定時に展開してくれないみたいなので環境変数で。たぶんかぶらないはず。
let $VIMPERSONAL = $HOME . "/.vim"
if has("win32")
     let $VIMPERSONAL = $HOME . "/vimfiles"
endif
  • short cut to omni completion
    • context に沿った補完をしてくれるらしい。最初 [x]html で DOCTYPE に応じて tag を補完してくれるようにならんかなと思って調べてたらこれが見つかったという経緯なんだけど起動が <C-x><C-o> で 2 stroke なのでよく見かける script ( なのにどこが出元かわからないという不思議 script ) を仕込んで楽に使えるようにしてみた。
    • 元ネタは一緒に key mapping もしちゃってるんだけど function 定義は plugin でやるべきかつ key mapping が分散すると混乱する、と思っているひとなので以下の script ( 限定 map じゃなくてもよくしたり comment 追加したりしてる ) を plugin として保存して、 .vimrc に inoremap <C-n> <C-r>=InsertTabWrapper()<CR> を追加してる感じ。 <Tab> に map すると manual formatting するときに補完が働いてしまってウザイので <C-n> に map 先を変更してる。
" wrapper function for keywords in 'complete' and omni completion
function! InsertTabWrapper()
    " select next item if completion window is exist
    if pumvisible()
        return "\<C-n>"
    endif

    " previous column of the cursor
    let col = col('.') - 1
    if !col || getline('.')[col - 1] !~ '\k\|<\|/'
        return ""
    elseif exists('&omnifunc') && &omnifunc == ''
        return "\<C-n>"
    else
        return "\<C-x>\<C-o>"
    endif
endfunction
  • :make
    • :make の便利さに気付いたので autocmd QuickFixCmdPost make cwindow を加えて error が起きたときに自動で QuickFix window を表示するようにした。
  • color
    • 個人で color scheme 書いてた ( ある程度気に入ったものの色をちょっと変えただけだけど ) んだけど andLinux 側で認識されんなーと思っていたら terminal ごとに指定しないといけないらしく、うちの場合は Windows gvim で使う gui / guibg / guifg と Linux vim で使う cterm / ctermbg / ctermfg を指定しないといけないみたい。
    • というわけで cterm* を gui* にあわせて指定してみたんだけど色制限がきつい。 Linux だと 8 色しか使えない ( :set t_Co? の数字が使える色数 ) ので dark 系の背景で使い勝手のいい Orange が使えなかったり黄色が茶色として表示されてしまったりとかなりきつい。一度ちゃんと見直さないとダメかも。