vim で Rails開発環境構築 for Linux

Rails開発を vim でやることに決めたものの、経験がないので歴史から学びました。
なお、環境は以下です。


OS

$ cat /etc/redhat-release
CentOS release 5 (Final)

Vim version 7.0.243


目次

  • vimってなに?
  • vimのインストール
    • 既存インストールの確認
    • 7.0.237のアンインストール
    • 7.0.243のインストール
  • その他vimRails開発でインストールしておいた方が便利なもの
    • vim-ruby のインストール
    • rails.vim のインストール
    • autocomplpop.vim のインストール
    • Project.vim のインストール
    • SuperTab.vim のインストール
    • refe.vim のインストール
  • .vimrcの設定(vimの設定ファイル)
  • vimの基本操作

vimってなに?

Vim
上記の wikipedia を見れば概要はわかります。


vimのインストール

既存インストールの確認

まず、既にインストールされているかどうか確認しましょう。

vim -v

$ rpm -qa | grep vim
vim-common-7.0.109-3.el5.3
vim-minimal-7.0.109-3.el5.3
vim-enhanced-7.0.109-3.el5.3

上記が表示され、vim version 7.0.237 がインストールされていることが分かりました。
インストール方法も知りたいので、7.0.237 をアンインストールして現在の7.0系最新である 7.0.243 をインストールしましょう。

7.0.237のアンインストール
$ sudo rpm -e vim-enhanced-7.0.109-3.el5.3
$ sudo rpm -e vim-common-7.0.109-3.el5.3
$ sudo rpm -e vim-minimal-7.0.109-3.el5.3
error: Failed dependencies:
        vim-minimal is needed by (installed) sudo-1.6.8p12-10.i386

vim-minimal は sudo が必要ということでアンインストールできなかった・・。が、vim は消えた。

$ vim --version
-bash: /usr/bin/vim: No such file or directory
7.0.243 のインストール
su - admin
cd ~/src
wget ftp://ftp.vim.org/pub/vim/unix/vim-7.0.tar.bz2
wget ftp://ftp.vim.org/pub/vim/extra/vim-7.0-extra.tar.gz
wget ftp://ftp.vim.org/pub/vim/extra/vim-7.0-lang.tar.gz
tar xjvf vim-7.0.tar.bz2
tar xzvf vim-7.0-extra.tar.gz
tar xzvf vim-7.0-lang.tar.gz
cd vim70
mkdir patches
cd patches
wget ftp://ftp.vim.org/pub/vim/patches/7.0/7.0.001-100.gz
wget ftp://ftp.vim.org/pub/vim/patches/7.0/7.0.101-200.gz
curl -O 'ftp://ftp.vim.org/pub/vim/patches/7.0/7.0.[201-243]'
gunzip 7.0.001-100.gz
gunzip 7.0.101-200.gz
cd ..
cat patches/7.0.* | patch -p0
./configure --enable-multibyte --enable-xim --enable-fontset --without-x --enable-rubyinterp --with-features=big
make
sudo paco -D make install

これで vim はインストールできました。


その他Rails開発で便利なもの

vim-ruby のインストール

ruby予約語がカラー表示される。

$sudo gem install vim-ruby
sudo vim-ruby-install.rb

確認

$ gem list | grep vim-ruby
vim-ruby (2007.05.07)
    Ruby configuration files for Vim.  Run 'vim-ruby-install.rb' to

これで、インストール完了。

rails.vim のインストール

vim での rails 開発にかかせません。 version 3.4 を入れました。

su - admin
cd ~/src
wget http://www.vim.org/scripts/download_script.php?src_id=10297
unzip rails.zip
cp -pr plugin doc autoload ~/.vim

rails.vimの使い方は下記のページに詳しく載っています。感謝です。
http://fg-180.katamayu.net/archives/2006/09/02/125150
rails.vim まとめ - 2nd life

  • ※環境によっては、rails.zip が download_script.php?src_id=10297 というファイル名でダウンロードされます。unzip download_script.php?src_id=10297 で解凍出きます。
autocomplpop.vim のインストール

2文字入力した時点で候補を自動的に表示してくれるプラグイン。version 1.6 を入れました。
version 1.6.1 以上は vim for 7.1 です。

su - admin
cd ~/src
wget http://www.vim.org/scripts/download_script.php?src_id=9335
cp autocomplpop.vim ~/.vim/plugin/
  • ※環境によっては、autocomplpop.vim が download_script.php?src_id=9335 というファイル名でダウンロードされます。mv download_script.php?src_id=9335 autocomplpop.vim として名前を変更してください。
Project.vim のインストール

version 1.4.1 を入れました。

su - admin
cd ~/src
wget http://www.vim.org/scripts/download_script.php?src_id=6273
tar zxvf project-1.4.1.tar.gz
cp plugin/project.vim ~/.vim/plugin/
cp doc/project.txt ~/.vim/doc/

参考
http://d.hatena.ne.jp/Riverman/20090217/1234884855

プロジェクトのディレクトリツリーを表示してくれるプラグイン
rails.vimが導入済であれば、「:Rproject」で現在開いているRailsプロジェクトをツリーに追加してくれる。

  • ※環境によっては、autocomplpop.vim が download_script.php?src_id=6273 というファイル名でダウンロードされます。tar zxvf download_script.php?src_id=6273 で解凍できます。
SuperTab.vim のインストール

version 0.4 を入れました。

su - admin
cd ~/src
wget http://www.vim.org/scripts/download_script.php?src_id=5699
cp supertab.vim ~/.vim/plugin/

参考
http://d.hatena.ne.jp/Riverman/20090217/1234884855

Tabキーで単語を補完してくれる様になるプラグイン

  • ※環境によっては、supertab.vim が download_script.php?src_id=5699 というファイル名でダウンロードされます。mv download_script.php?src_id=5699 supertab.vim として名前を変更してください。
refe.vim のインストール

vimRubyリファレンスを引けるようにする。詳しくはhttp://rails2u.com/projects/refe.vim/をご覧ください。

まず ReFe をインストールします。

gem install refe

つぎに、refe.vim をインストールします。

wget http://rails2u.com/projects/refe.vim/refe.vba
vim -c 'so %' refe.vba

これで、~/.vim/ に配置されるのですが、私の場合ファイル名が

~/.vim/plugin/prefe.vim\    \[\[\[1
~/.vim/doc/refe.txt\       \[\[\[1

となっていたので、以下のように修正しました。

mv ~/.vim/plugin/refe.vim\    \[\[\[1 ~/.vim/refe.vim
mv ~/.vim/doc/refe.txt\       \[\[\[1 ~/.vim/refe.txt

さらにリファレンスをインクリメンタルサーチする為に lookupfile.vim(v 1.4) と genutils.vim(v 2.4) をインストールします。

wget http://www.vim.org/scripts/download_script.php?src_id=6124
unzip lookupfile-1.4.zip 
cp plugin/lookupfile.vim ~/.vim/plugin/
cp doc/lookupfile.txt ~/.vim/doc/
cp autoload/lookupfile.vim ~/.vim/autoload/

wget http://www.vim.org/scripts/download_script.php?src_id=7231
unzip genutils-2.4.zip 
cp plugin/genutils.vim ~/.vim/plugin/
cp autoload/genutils.vim ~/.vim/autoload/
  • ※最初、lookupfile.vim の1.8を入れたらvim7.1からの対応とのことでしたので1.4をインストールしました。
  • ※環境によっては、lookupfile-1.4.zip が download_script.php?src_id=6124 というファイル名でダウンロードされます。unzip download_script.php?src_id=6124 で解凍出きます。

これで、:Refe で vim から Rubyのリファレンスが見れるようになります。


参考URL
http://rails2u.com/projects/refe.vim/
http://www.ruby-lang.org/ja/man/html/ReFe.html
http://www.vim.org/scripts/script.php?script_id=1581
http://d.hatena.ne.jp/guyon/20071030
http://www.vim.org/scripts/script.php?script_id=197


.vimrcの設定(vimの設定ファイル)

vimvim-rubyrails.vimautocomplpop.vim をインストールして ~/.vimrc を次のように設定しました。文字コードUTF-8、改行コードは LF で保存しました。
http://www15.ocn.ne.jp/~tusr/vim/options_help.html
help - Vim日本語ドキュメント
http://www.crimson-snow.net/tips/unix/vim.html

上記に非常に詳しく解説されています。


.vimrcはgithubにもあります。

" 文字コードの設定
" fileencodingsの設定ではencodingの値を一番最後に記述する
" デフォルトの文字コード
set encoding=euc-jp
set termencoding=euc-jp
set fileencoding=euc-jp
" ファイルを開く際のエンコーディングの候補を指定
set fileencodings=ucs-bom,euc-jp,cp932,iso-2022-jp
set fileencodings+=,ucs-2le,ucs-2,utf-8

" 検索文字をハイライト
set hlsearch 
" 大文字小文字無視
set ignorecase
" 大文字ではじめたら大文字小文字無視しない
set smartcase

" <status line>
" 常にステータスラインを表示
set laststatus=2
set statusline=%<%F\ %r%h%w%y%{'['.(&fenc!=''?&fenc:&enc).'\|'.&ff.']'}\ \ %l/%L\ (%P)%m%=%{strftime(\"%Y/%m/%d\ %H:%M\")} 

" ファイル内の <Tab> が対応する空白の数。
set tabstop=2

" 自動インデントの各段階に使われる空白の数。
set shiftwidth=2

" Insertモードで: <Tab> を挿入するのに、適切な数の空白を使う。(タブをスペースに展開する)
set expandtab
" 新しい行を開始したときに、新しい行のインデントを現在行と同じ量にする。
set autoindent
" compatible の機能をオフにします。compatible のオプションを有効にすると、Vimの便利な機能が使えなくなる。 初期値:オン
set nocompatible
" 強調表示(色付け)のON/OFF設定。
syntax on
" 行数表示
set nu
" バッファを切替えてもundoの効力を失わない
set hidden
" コマンドライン補完を拡張モードにする
set wildmenu
set wildmode=list:longest,full

" ファイル形式の検出を有効化
filetype on
" ファイル形式別インデントのロードを有効化
filetype indent on
" ファイル形式別プラグインのロードを有効化
filetype plugin on

" rails.vim 参考 http://fg-180.katamayu.net/archives/2006/09/02/125150
"" ロードされる特徴のレベルの一般的なコントロール 4 は(すべての普通の特徴を有効にする。推奨)
let g:rails_level=4

"" 新しいRailsアプリケーションが作られたときロードするファイル。
let g:rails_default_file="app/controllers/application.rb"
"" 新しいアプリケーションで使うデータベース。
let g:rails_default_database="mysql"

" rubycomplete.vim
"" FileType settings
autocmd FileType ruby,eruby set omnifunc=rubycomplete#Complete
autocmd FileType ruby,eruby let g:rubycomplete_buffer_loading = 1
autocmd FileType ruby,eruby let g:rubycomplete_rails = 1
autocmd FileType ruby,eruby let g:rubycomplete_classes_in_global = 1
autocmd FileType html set filetype=xhtml
autocmd Filetype html set omnifunc=htmlcomplete#CompleteTags
autocmd Filetype css set omnifunc=csscomplete#CompleteCSS
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS

" autocomplpop.vim
let g:AutoComplPop_CompleteOption = '.,w,b,k'
let g:AutoComplPop_IgnoreCaseOption = 1
autocmd FileType * let g:AutoComplPop_CompleteOption = '.,w,b,u,t,i'
autocmd FileType perl let g:AutoComplPop_CompleteOption = '.,w,b,u,t,k~/.vim/dict/perl.dict'
autocmd FileType ruby let g:AutoComplPop_CompleteOption = '.,w,b,u,t,i,k~/.vim/dict/ruby.dict'
autocmd FileType html let g:AutoComplPop_CompleteOption = '.,w,b,u,t,i,k~/.vim/dict/javascript.dict'
autocmd FileType javascript let g:AutoComplPop_CompleteOption = '.,w,b,u,t,i,k~/.vim/dict/javascript.dict'
autocmd FileType erlang let g:AutoComplPop_CompleteOption = '.,w,b,u,t,i,k~/.vim/dict/erlang.dict'

"<TAB>で補完(autocomplpop.vim)
" {{{ Autocompletion using the TAB key
" This function determines, wether we are on the start of the line text (then
" tab indents) or
" if we want to try autocompletion
function! InsertTabWrapper()
 let col = col('.') - 1
 if !col || getline('.')[col - 1] !~ '\k'
 return "\<TAB>"
 else
 if pumvisible()
 return "\<C-N>"
 else
 return "\<C-N>\<C-P>"
 end
 endif
endfunction
" " Remap the tab key to select action with InsertTabWrapper
inoremap <tab> <c-r>=InsertTabWrapper()<cr>
" " }}} Autocompletion using the TAB key
 
" ポップアップの配色
hi Pmenu guibg=#666666
hi PmenuSel guibg=#8cd0d3 guifg=#666666
hi PmenuSbar guibg=#333333

"カーソル行の強調表示
set cursorline

" matchit の設定
:source $VIMRUNTIME/macros/matchit.vim

vimの基本操作

vim の基本操作を学びましょう。

チュートリアル

まず、(日本語で)チュートリアルを読みましょう。

$ export LANG="en_US.UTF-8"
$ vimtutor ja

j k h l で移動することや ノーマルモードへ移動することや :q! で終了することなどなど・・・基本が書いてあります。
チュートリアル自体が vim で開いていますので、 j や k などで移動してみると良いと思います。


vim7 だと text-object も便利です。http://d.hatena.ne.jp/kajisuke/20090624/1245798471

まとめ

少し触ってみましたが、補完、移動など非常に便利な機能満載ですね。vim & Rails で開発してみようと思います。
便利なプラグインなどありましたら教えてください><

Thanks

takeshy - matchit を教えていただきました。ありがとうございます!