春なのでemacsからvimに乗り換えてみました

春です。
何か新しいことがしたくなるこの季節。
ついにemacsからvimに乗り換えてみました。
というわけで、ここ一週間ほどゲームもtwitterもろくにせず、ひたすら.vimrcをカスタマイズしまくっていました。
正しくはカスタマイズすべくググりまくっていたんですけど‥‥。
その甲斐あってかなり満足するものが出来たので、思い切って晒してみます。
まず最初に私がインストールしたvimですが、いくつか試して最終的に以下のCocoa版に落ち着きました。
PrivatePortfile/Vim72 - MacPortsWiki-JP
最初はMacVimなどを使っていたのですが、他のはiminsert=0が使えませんでした。
それでは、.vimrcをぺたりんこ。
.vimrcにあるウィンドウ周りの設定が効いていなかったので.gvimrcに移動しました。
あと、vcscommandプラグインを使い始めたのでruntimepathに追加しました。
- "-------------------------------------------------------------------------------
- set nocompatible " vimですよ
- "-------------------------------------------------------------------------------
- " ステータスライン
- set laststatus=2 " 常にステータスラインを表示
- set statusline=%<%F\ %r%h%w%y%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%4v(ASCII=%03.3b,HEX=%02.2B)\ %l/%L(%P)%m
- "-------------------------------------------------------------------------------
- " 基本設定
- let mapleader = "," " キーマップリーダー
- set scrolloff=5 " スクロール時の余白確保
- set textwidth=0 " 一行に長い文章を書いていても自動折り返しをしない
- set nobackup " バックアップ取らない
- set autoread " 他で書き換えられたら自動で読み直す
- set noswapfile " スワップファイル作らない
- set hidden " 編集中でも他のファイルを開けるようにする
- set backspace=indent,eol,start " バックスペースでなんでも消せるように
- set formatoptions=lmoq " テキスト整形オプション,マルチバイト系を追加
- set vb t_vb= " ビープをならさない
- set browsedir=buffer " Exploreの初期ディレクトリ
- set whichwrap=b,s,h,l,<,>,[,] " カーソルを行頭、行末で止まらないようにする
- set showcmd " コマンドをステータス行に表示
- filetype indent off " ファイルタイプによるインデント
- filetype plugin off " ファイルタイプごとのプラグイン
- "-------------------------------------------------------------------------------
- " 表示
- set showmatch " 括弧の対応をハイライト
- set showcmd " 入力中のコマンドを表示
- set number " 行番号表示
- set list " 不可視文字表示
- set listchars=tab:>.,trail:_,extends:>,precedes:<" 不可視文字の表示形式
- set display=uhex " 印字不可能文字を16進数で表示
- " 全角スペースをハイライト
- if has("syntax")
- syntax on
- function! ActivateInvisibleIndicator()
- syntax match InvisibleJISX0208Space " " display containedin=ALL
- highlight InvisibleJISX0208Space term=underline ctermbg=Cyan guibg=Cyan
- " syntax match InvisibleTrailedSpace "[ \t]\+$" display containedin=ALL
- " highlight InvisibleTrailedSpace term=underline ctermbg=Red guibg=Red
- " syntax match InvisibleTab "\t" display containedin=ALL
- " highlight InvisibleTab term=underline ctermbg=Cyan guibg=Cyan
- endf
- augroup invisible
- autocmd! invisible
- autocmd BufNew,BufRead * call ActivateInvisibleIndicator()
- augroup END
- endif
- " カレントウィンドウにのみ罫線を引く
- augroup cch
- autocmd! cch
- autocmd WinLeave * set nocursorline
- autocmd WinEnter,BufRead * set cursorline
- augroup END
- "-------------------------------------------------------------------------------
- " インデント
- set autoindent
- set smartindent
- set cindent
- " softtabstopはTabキー押し下げ時の挿入される空白の量,0の場合はtabstopと同じ,BSにも影響する
- set tabstop=4 shiftwidth=4 softtabstop=0
- set noexpandtab " タブをスペースに展開しない
- "-------------------------------------------------------------------------------
- " 補完・履歴
- set wildmenu " コマンド補完を強化
- set wildchar=<tab> " コマンド補完を開始するキー
- set wildmode=list:full " リスト表示,最長マッチ
- set history=1000 " コマンド・検索パターンの履歴数
- set complete+=k " 補完に辞書ファイル追加
- "-------------------------------------------------------------------------------
- " 検索設定
- set wrapscan " 最後まで検索したら先頭へ戻る
- set ignorecase " 大文字小文字無視
- set smartcase " 大文字ではじめたら大文字小文字無視しない
- set incsearch " インクリメンタルサーチ
- set hlsearch " 検索文字をハイライト
- "選択した文字列を検索
- vnoremap <silent> // y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR>
- "選択した文字列を置換
- vnoremap /r "xy:%s/<C-R>=escape(@x, '\\/.*$^~[]')<CR>//gc<Left><Left><Left>
- "-------------------------------------------------------------------------------
- " エンコーディング関連
- " 改行文字
- set ffs=unix,dos,mac
- " デフォルトエンコーディング
- set encoding=utf-8
- if has('win32') && has('kaoriya')
- set ambiwidth=auto
- else
- set ambiwidth=double
- endif
- if has('iconv')
- let s:enc_euc = 'euc-jp'
- let s:enc_jis = 'iso-2022-jp'
- if iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb"
- let s:enc_euc = 'euc-jisx0213,euc-jp'
- let s:enc_jis = 'iso-2022-jp-3'
- endif
- set fileencodings&
- let &fileencodings = &fileencodings.','.s:enc_jis.',cp932,'.s:enc_euc
- unlet s:enc_euc
- unlet s:enc_jis
- endif
- if has('win32unix')
- set termencoding=cp932
- elseif !has('macunix')
- set termencoding=euc-jp
- endif
- "-------------------------------------------------------------------------------
- " キーバインド関係
- " 行単位で移動(1行が長い場合に便利)
- nnoremap j gj
- nnoremap k gk
- " バッファ周り
- nmap <silent> <C-l> :bnext<CR>
- nmap <silent> <C-h> :bprevious<CR>
- nmap <silent> ,l :BufExplorer<CR>
- " 検索などで飛んだらそこを真ん中に
- nmap n nzz
- nmap N Nzz
- nmap * *zz
- nmap # #zz
- nmap g* g*zz
- nmap g# g#zz
- nmap G Gzz
- "usキーボードで使いやすく
- nmap ; :
- "-------------------------------------------------------------------------------
- " プラグインごとの設定
- " migemo.vim
- if has('migemo')
- set migemo
- set migemodict=/opt/local/share/migemo/utf-8/migemo-dict
- endif
- " YankRing.vim
- nmap ,y :YRShow<CR>
- " qfixhowm.vim
- set runtimepath+=~/.vim/plugin/qfixapp
- let QFixHowm_Key = ','
- let howm_dir = '~/Documents/howm-vim/'
- let howm_filename = '%Y/%m/%Y-%m-%d-%H%M%S.howm'
- let howm_keywordfile = '~/Documents/howm-vim/.howm-keys'
- let howm_fileencoding = 'utf-8'
- let howm_fileformat = 'unix'
- let mygrepprg = 'grep'
- let MyGrep_ShellEncoding = 'utf-8'
- let QFixHowm_RecentDays = 10
- let QFixHowm_SaveTime = 2
- let QFixHowm_RecentMode = 2
- let QFixHowm_Replace_Title_Pattern = '^=\s*\(\[[:a-zA-Z0-9 ]*\]\s*\)\=$'
- let QFixHowm_Replace_Title_Len = 64
- let QFixHowm_MruFile = '~/Documents/howm-vim/.howm-mru'
- let QFixHowm_MruFileMax = 20
- let QFixHowm_ShowTodoOnMenu = 1
- let QFixHowm_ShowSchedule = 10
- let QFixHowm_ShowScheduleTodo = 10
- let QFix_CloseOnJump = 1
- let QFix_Height = 25
- let QFix_SearchPathEnable = 1
- let QFix_SearchPath = '~/Documents/howm-vim/'
- "if has('mac')
- " let MyOpenURI_cmd = "call system('/usr/bin/browser %s &')"
- "endif
- " vcscommand.vim
- set runtimepath+=~/.vim/plugin/vcscommand
- "-------------------------------------------------------------------------------
- " ユーティリティ
- " 現在開いているファイルのある場所に常にcdする
- au BufEnter * exec ":lcd " . expand("%:p:h")
次に.gvimrc。完全にOSX用です。
タブを便利に使えないか、いろいろと試行中です。
- "-------------------------------------------------------------------------------
- " デザイン
- colorscheme desert " カラースキーム
- set guifont=Osaka-Mono:h14 " フォント
- set antialias " アンチエイリアシング
- set transparency=230 " 半透明
- set guioptions-=T " ツールバー削除
- highlight CursorLine ctermbg=black guibg=gray10 " カーソル行の色
- " 挿入モード・検索モードでのデフォルトのIME状態設定
- set iminsert=0 imsearch=0
- "日本語入力中のカーソルの色
- "highlight Cursor guifg=NONE guibg=Green
- highlight CursorIM guifg=NONE guibg=Red
- " メニューを英語に戻す
- source $VIMRUNTIME/delmenu.vim
- set langmenu=none
- source $VIMRUNTIME/menu.vim
- " 様々な箇所を英語に戻す
- lang en_gb
- "-------------------------------------------------------------------------------
- " ウィンドウ
- set sessionoptions+=resize " 行・列を設定する
- set lines=48 " 行数
- set columns=160 " 横幅
- set cmdheight=1 " コマンドラインの高さ
- set previewheight=5 " プレビューウィンドウの高さ
- set splitbelow " 横分割したら新しいウィンドウは下に
- set splitright " 縦分割したら新しいウィンドウは右に
- "-------------------------------------------------------------------------------
- " タブを使う
- "nnoremap <C-h> gT
- "nnoremap <C-l> gt
- "nnoremap <Leader>1 1gt
- "nnoremap <Leader>2 2gt
- "nnoremap <Leader>3 3gt
- "nnoremap <Leader>4 4gt
- "nnoremap <Leader>5 5gt
- "nnoremap <Leader>6 6gt
- "nnoremap <Leader>7 7gt
- "nnoremap <Leader>8 8gt
- "nnoremap <Leader>9 9gt
入れてるプラグインは以下の通り。
- Align
- migemo
- qfixhowm
- changed
- grep
- mru
- surround
- project
- yankring
- incbufswitch
- commentout
- bufexplorer
- vcscommand
Alignとsurroundとcommentoutはマジで最強というか、無いと死にます。
使い始めて4日で死ぬとか大げさかもしれませんが、マジで死にます。超便利。
emacsからの移行で一番悩んだのがhowmなんですが、QFixHowmのおかげで完全移行出来ました。
QFixHowm - vim用howmプラグイン ?(fudist)?
ただ3点ほど悩んだことがあって、一つ目はメニューページの文字化けです。
こちらはvimrcで日本語のエンコード判定処理をちゃんとしたものを入れたら直りました。
二つ目はautocmdを使って開いているファイルの場所を常にcdするようにしているのですが、その設定との相性の悪さです。
QFixHowmはファイルを開くときに絶対パス指定していないので、適当にcdをされるとファイルが開けなくなるようです。
仕方ないのでmyqfix.vim925行目あたりを以下のようにしました。
- if g:QFix_FileOpenMode == 0
- CloseQFixWin
- " 絶対パスにする
- exec 'edit ' . expand(g:howm_dir) . a:fname
- silent! wincmd o
- OpenQFixWin
- silent! wincmd p
三つ目はminibufexpl.vimとの相性の悪さです。
いずれもウィンドウを分割して情報表示するので、一緒に使うとウィンドウがめちゃくちゃになります。
結局minibufexpl.vimを使うのをやめ、bufexplorer.vimの方にしました。
結果的にこちらの方が性に合っているようで、かえって良かったです。
〜
emacsからの乗り換えは完全に「なんとなく」ってだけなんですが、CTRLキー押しまくりで左の小指が痛くなることが無くなったのが思いの外大きな収穫でした。
こんなことならもっと早く乗り換えておくべきだったかな?
最後になりましたが、あちこちで.vimrcを晒してくださった方々、プラグインを公開してくださった方々、vim本体やパッチを公開してくださった方々、そして私がvimに触れるきっかけとなったVimperatorの作者とその界隈の方々、本当にありがとうございます。
そしてこれからもよろしくお願いいたします!


匿名 21:58:52 on 2009/4/8 水曜日 パーマリンク | ログインして返信する
はじめまして、QFixHowmの作者です。
ご使用ありがとうございます。
最新版で autocmd でディレクトリ移動している際の挙動に関しては、改善されたと思いますので試してみていただけないでしょうか。
また当方ではMacOSXでの動作確認は出来ないもので、少しお伺いしたいこともあります。
もし気が向いたらメール等でご連絡ください。
コメント欄を汚すつもりはないので、お読みになりましたらこのコメントは削除してください。
春なのでemacsからvimに乗り換えてみました - ふぃふmemo | 次なるもの 1:00:00 on 2009/4/9 木曜日 パーマリンク | ログインして返信する
[...] 、ひたすら.vimrcをカスタマイズしまくっていました。 正しくはカスタマイズ すべくググりまくっていたんですけど‥‥。その甲斐あってかなり結構満足する ものが… original article [...]
links for 2009-04-08 « 個人的な雑記 7:01:36 on 2009/4/9 木曜日 パーマリンク | ログインして返信する
[...] 春なのでemacsからvimに乗り換えてみました – ふぃふmemo (tags: editor vim) [...]
ozaki 22:53:38 on 2009/4/9 木曜日 パーマリンク | ログインして返信する
やっぱりvimだよなw
goryugo » 春なのでemacsとvimと二股かけてみました 16:15:01 on 2010/3/19 金曜日 パーマリンク | ログインして返信する
[...] http://fifnel.com/2009/04/07/2300/ [...]