vim
プラグイン
~/.vim/plugin
に入れるだけ
- rails.vim - Rails用のプラグイン
- svncommand.vim - SVNを操作する
- closetag.vim - HTML/XMLタグを閉じる
- quickrun.vim - その場で実行する
- unite.vim - ファイルを簡単に開くなど
- tagbar.vim - コードのアウトラインを作成し、見出しジャンプ
vbaやvmbのプラグインはファイルは開いて
:so %
でインストールできる
プラグイン管理
プラグインを個別にインストールせずに、vundle.vim や neobundle.vim を使って管理するのが今時なやり方。
$ mkdir .vim $ cd .vim $ git init $ git submodule add git://github.com/gmarik/vundle.git $ git submodule init $ git submodule update
さらに ~/.vim/vimrc というファイルを作り、ln -s .vim/vimrc .vimrc のようにして使えば vimrc もgit管理下に置けるので良いかも
vimrc
Mac の vim のデフォルト設定は非常に寂しいので色々設定してやる。ホームディレクトリに.vimrc
を作って以下の記述
" ライン番号を表示 set number " タブ幅制御 set tabstop=4 set softtabstop=4 set shiftwidth=4 " タブをスペースで入力(タブを入力する時はCtrl-v tab) set expandtab=on " 単語途中で折り返しせず、ホワイトスペースで折り返しする set linebreak " 折り返し表示しない set nowrap " ステータス行の表示 set laststatus=2 " シンタックスハイライト syntax on " ファイルタイプ別の設定 filetype on filetype indent on filetype plugin on " 検索結果をハイライト set hlsearch " インラインモードでCtrl Spaceを押したらノーマルモードに戻る imap <C-space> <ESC> " ノーマルモードでCtrl a、Ctrl eで行頭、行末へ移動 "nmap <C-a> 0 "nmap <C-e> $ " 行頭、行末への移動をシェルと同じに map <C-a> <Home> map <C-e> <End> " CJK記号の幅を調整 set ambiwidth=double
色々設定があるので試して自分好みに改良してみるがよろし。以下の設定は環境によって最初から有効になってる場合もある
" 一番下まで検索したら最初の検索結果に戻る set wrapscan " インサートモード時にバックスペースで空行を削除できる set backspace=2
インデント制御
<html> <dl> <dt>autoindent</dt> <dd>改行したときにインデントを前の行と同じにする。</dd> <dt>smartindent</dt> <dd>C言語風のインデントを自動的に行うが、C言語系の場合はcindentを使うのが良い。CSSの編集に相性が良い</dd> <dt>cindent</dt> <dd>smartindentより高度なC言語風のインデントを自動的に行う。C言語はもちろんJava等のC風シンタックスの言語に有効。</dd> </dl> </html>
ただし各言語用のindent定義が最初から入っているので上の設定は不要
filetype on filetype plugin on filetype indent on
としておく
ファイルタイプ別の設定
例えばvimrcでインデントがスペース4つ分のタブに設定されているが、rubyファイルを編集する時はインデント幅を2スペースにし、タブではなくスペースを使いたいというならば、~/.vimrc
に以下を追記
filetype on filetype plugin on
~/.vim/ftplugin/ruby.vim
というファイルを作成し、
setlocal expandtab setlocal shiftwidth=2 setlocal tabstop=2 setlocal softtabstop=2
setではなくsetlocalを使うこと。setでは.vimrcの設定を完全に上書きし、rubyファイルと同時に他の種類のファイルを開くとそちらにも影響してしまう。
コマンドいろいろ
ノーマルモード
移動 0 行頭へ ^ 行頭へ(空白無視) $ 行の末尾へ
j 一行下へ k 一行上へ h 右へ l 左へ gg ファイルの最初の行へ G ファイルの最後の行へ H 画面最初の行へ L 画面の最後の行へ Ctrl-d 半画面下へ Ctrl-f 1画面下へ Ctrl-u 半画面上へ Ctrl-b 半画面上へ w 次の語までカーソルを移動(W: 空白までを語として扱う) e 次の語の末尾までカーソルを移動(E:同上) b 前の語までカーソル移動(B:同上)
分割画面の移動は
Ctrl-w p 画面間の移動 Ctrl-w k 上の画面に移動 Ctrl-w j 下の画面に移動 Ctrl-w l 右の画面に移動 Ctrl-w h 左の画面に移動
サイズ調整は
Ctrl-w + 選択中の画面を一行分大きくする Ctrl-w - 選択中の画面を一行分小さくする Ctrl-w = 画面のサイズを同じにする
行内で指定文字まで移動(;で次へ、,で前へ)
f文字
範囲指定削除(d:カットのみ、c:カットしてインサートモードに、f:指定文字までカット、t:指定文字の前までカット)
df指定文字 cf指定文字 dt指定文字 ct指定文字
繰り返し
.
カーソルの下の文字列をパスとみなしてファイルを開く
gf
戻る場合は
Ctrl-o
分割して開く
Ctrl-w f
タブで開く
Ctrl-w gf
タブ移動は…
gt gT
カーソル下の単語を検索
*
次を検索
;
前回のビジュアルモード選択を再度行う
gv
大文字小文字切り替え
~
ビジュアルモード
ノーマルモードからビジュアルモードへ移行
v 文字選択モード V 行選択モード gv 再選択 Ctrl-v 矩形選択 > 右シフト < 左シフト ~ 大文字小文字切り替え J 連結 d 削除してノーマルモードに c 削除してインサートモードに y ヤンク = インデント整形
w カーソル位置から右に単語区切りまで選択 iw カーソルの下の単語を選択 aw カーソルの下の単語を選択 b カーソル位置から左に単語区切りまで選択 W vwと同じだが、記号も選択する B vbと同じだが、記号も選択する is 文を選択 as 文を選択 ip パラグラフを選択 ap パラグラフを選択 ib ()内を選択 ab ()を選択 iB {}内を選択 aB {}を選択 it ()内を選択 at ()を選択
※ iとaの違い、iは後ろの空白を含まない、wは後ろの空白を含む。カッコ選択の場合はカッコを含むかどうか
w等の選択方法は、ノーマルモードで削除やヤンクと組み合わせられる
d 削除 c 削除してインサートモードへ y ヤンク
例
diw 単語の削除 yw カーソル位置から右単語区切りまでヤンク
コマンドモード
今開いているエディタに指定のファイルの中身をコピー
:read filename
分割オープン
:split filename :vsplit filename
空のページを分割で開く
:new :vnew
全部閉じる
:qa
自分以外閉じる
:on
一時的にシェルへ(exitでviに戻る)
:shell :sh
コマンド実行
:!cmd
文字コードを指定して再読み込み
:e ++enc=utf8
ファイルタイプを指定(シンタックス指定)
:set filetype=html
タブ・スペースの変換
:retab
ここみれ http://tonetsutomu.com/tone/linux/Reference/Vi/ViReference1.htm
RSpecを実行する
rspec.vimというファイルを作って ~/.vim/plugin/ に設置
function RunRspec () :!rspec -cfs % endfunction function RunRspecLine () exe '!rspec -cfs -l ' . line('.') . ' %' endfunction au BufRead,BufNewFile *_spec.rb :command! Rspec :call RunRspec() au BufRead,BufNewFile *_spec.rb :command! Rspecl :call RunRspecLine() function RunSpec () :!spec -cfs % endfunction function RunSpecLine () exe '!spec -cfs -l ' . line('.') . ' %' endfunction au BufRead,BufNewFile *_spec.rb :command! Spec :call RunSpec() au BufRead,BufNewFile *_spec.rb :command! Specl :call RunSpecLine()
:Rspecで今開いているRSpecファイルを全体を、:Rspeclで現在カーソルのある行を含むテストケースをRSpec2で実行する。RSpec1を実行したい場合は、:Spec、:Specl