garbagetown

個人の日記です

Rails on Vim (2)

ファビ夫設定のままの vim で遊んでいたら何点か困ったことが。

vim を起動すると何か怒られる

カラースキーマの設定か何かのために CSApprox.vim というプラグインが必要らしいのだが、これが入っていると gui モードでない通常の vim を起動した際に何だか知らんが警告が出て鬱陶しい。*1
知識の裏付け一切無しに勘と勢いで CSApprox.vim を消したら vim でも gvim でもうまく動いたので、もうこれでいいや、ということにした。

% rm ~/vimfiles/plugin/CSApprox.vim

gitbash から vi を呼ぶと何か怒られる

gitbash は自前の vim を持っていて、gitbash から vi か vim を叩くとこいつが呼ばれてしまう。
あちこちに vimrc を置いたりプラグインを置いたりしていると訳が分からなくなるので、gitbash の .bashrc に alias を切って自分でインストールした vim を呼ぶようにする。

% vi .bashrc
alias vi='/c/Program\ Files/Vim/vim72/vim'
alias vim='/c/Program\ Files/Vim/vim72/vim'

gitbash で commit すると何か怒られる

git commit の際に使用するエディタとしてやっぱり自前の vim を呼んでしまうので、自分でインストールした vim を呼ぶように設定。

% git config --global core.editor "'c:/Program Files/Vim/vim72/vim.exe'"
% git config -l
(snip)
core.editor='c:/Program Files/Vim/vim72/vim.exe'
(snip)

パスに空白を含む場合、ダブルクォーテーションとシングルクォーテーションで括らないと期待通りに設定されないので注意。イエスイエスのイエスマンでインストールしたツケがこんなところで来た。

日本語エンコードSJIS でヘコむ

rails 関連のファイルを開いたときにはエンコードutf-8 にする設定や、その他モロモロ日本語周りや外観、色などの設定を vimrc の末尾に追記。

(snip)
"+----------------------------------------------------------------------------------------+
" 外観設定
"+----------------------------------------------------------------------------------------+
"ウィンドウを最大化して起動
autocmd GUIEnter * simalt ~x
"入力モード時、ステータスラインのカラーを変更
augroup InsertHook
autocmd!
autocmd InsertEnter * highlight StatusLine guifg=#ccdc90 guibg=#2E4340
autocmd InsertLeave * highlight StatusLine guifg=#2E4340 guibg=#ccdc90 
"ステータスラインにファイルタイプ・文字コード・改行文字を表示
set statusline=%<[%n]%F%=\ %m%r%h%w%y%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}\ %l,%c\ %P 
"全角スペースを視覚化
highlight ZenkakuSpace guifg=#666666
match ZenkakuSpace / /
"末尾の半角スペースを視覚化
highlight WhiteSpaceEOL guibg=#666666
2match WhiteSpaceEOL /\S\@<=\s\+$/

"+----------------------------------------------------------------------------------------+
" オートコマンド設定
"+----------------------------------------------------------------------------------------+
"Rails関連ファイルで文字コードをUFT-8に設定
autocmd User Rails* setlocal fileencoding=utf-8

"+----------------------------------------------------------------------------------------+
" 基本設定
"+----------------------------------------------------------------------------------------+
"行番号を表示する
set number
"フォントを設定
set guifont=Osaka−等幅:h12:cSHIFTJIS
"IMEをオフ
set iminsert=0
set imsearch=0
"バックアップファイルを作らない
set nobackup
"スワップファイルを作らない
set noswapfile

"+----------------------------------------------------------------------------------------+
" Vimスクリプト設定
"+----------------------------------------------------------------------------------------+
"ディレクトリツリーの幅を設定(NERD_tree.vim)
let g:NERDTreeWinSize = 24 

"+----------------------------------------------------------------------------------------+
" 文字コードの自動認識(by:ずんWiki)
"+----------------------------------------------------------------------------------------+
" 文字コードの自動認識
if &encoding !=# 'utf-8'
  set encoding=japan
  set fileencoding=japan
endif
if has('iconv')
  let s:enc_euc = 'euc-jp'
  let s:enc_jis = 'iso-2022-jp'
  " iconvがeucJP-msに対応しているかをチェック
  if iconv("\x87\x64\x87\x6a", 'cp932', 'eucjp-ms') ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = 'eucjp-ms'
    let s:enc_jis = 'iso-2022-jp-3'
  " iconvがJISX0213に対応しているかをチェック
  elseif iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = 'euc-jisx0213'
    let s:enc_jis = 'iso-2022-jp-3'
  endif
  " fileencodingsを構築
  if &encoding ==# 'utf-8'
    let s:fileencodings_default = &fileencodings
    let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'
    let &fileencodings = &fileencodings .','. s:fileencodings_default
    unlet s:fileencodings_default
  else
    let &fileencodings = &fileencodings .','. s:enc_jis
    set fileencodings+=utf-8,ucs-2le,ucs-2
    if &encoding =~# '^\(euc-jp\|euc-jisx0213\|eucjp-ms\)$'
      set fileencodings+=cp932
      set fileencodings-=euc-jp
      set fileencodings-=euc-jisx0213
      set fileencodings-=eucjp-ms
      let &encoding = s:enc_euc
      let &fileencoding = s:enc_euc
    else
      let &fileencodings = &fileencodings .','. s:enc_euc
    endif
  endif
  " 定数を処分
  unlet s:enc_euc
  unlet s:enc_jis
endif
" 日本語を含まない場合は fileencoding に encoding を使うようにする
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
" 改行コードの自動認識
set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
  set ambiwidth=double
endif

vimrc はちょくちょく自分好みに更新していきそうなので、ファビ夫のリポジトリから 自分の github に fork して vimrc を編集してから push したら日本語のコミットコメントが盛大に化けて出来ない子みたいになってしまった。
まあいいや。

*1:ファビ夫の vimrc を見る限り、gui モードでない場合 CSApprox.vim はロードしない、とあるのだが。よく分かりません