vi/vim をEmacs風に使ってみる

Yahoo!ブックマークに登録

「vi」は、UNIX/Linux ユーザなら一度は聞く「emacs(mule)」に並ぶ主要なエディタです。またviエディタを基にして機能を拡張したものが、vim(vi improved)エディタです。

vimのプラグインと「.vimrc」に記述する方法を紹介します。

Vimacs -- viでEmacsをエミュレート

Vimacs(Vim-Improved eMACS)とは、Emacsのキーバインドが使えるようになるVimのプラグインです。

ただし「入力(挿入)モード」の時だけ有効になるので、それ以外ではVimのキーバインドがそのまま使えます。

インストール&起動方法

Download Vimacs から「Unix」「Windows」を選んでダウンロードします。

解凍後、INSTALLの通りに進めてください。(Windowsの場合は、"C:\Program Files\vim\vimfiles\plugin"に".vim"をコピーします。)

Unix/Linuxの場合は、インストールが完了したら gvim、vm、gvm等でVimacsを起動できます。

インストール中にgvim、vm、gvm等のシンボリックリンクを作成しています。

vimに関しては、今まで通り「vimコマンド」で起動します。

「.vimrc」を利用する

Vi/Vimの設定は、全て「.vimrc」というテキストファイルに記述します。
「.vimrc」はVimのインストールフォルダに作成しても動作しますが、一般的には「$HOME」以下におきます。

モード

代表的なモードを紹介します。

ノーマルモード (n) 起動直後のモードです。テキストの編集を行うモードです。
挿入モード (i) 文字を入力するモードです。ノーマルモードから「 i 」や「 a 」などで移行します。
コマンドラインモード (c)コマンドを実行するモードです。ノーマルモードから 「 : 」で移行します。
ビジュアルモード (v) 領域を選択するモードです。選択タイプでさらに文字単位選択、行単位選択、矩形選択

マップコマンドとモードの対応表

代表的なマップコマンドとモードの対応を紹介します。

コマンドノーマルモード挿入モードコマンドラインモードビジュアルモー
map/noremap - -
nmap/nnoremap- -
imap/inoremap- -
cmap/cnoremap- -
vmap/vnoremap- - -
map!/noremap!- -

キーマッピングのオプション

マップ系コマンドの最初の引数にいくつかオプションを渡すことができます。

<silent>コマンドラインへの出力を抑制します。キーマッピングからコマンドを実行する場合などに指定します。(ちらつき対策)
<unique>すでにマッピングが存在する場合、エラーにします。通常は上書きされます。
<buffer>バッファローカルなキーマッピングを定義します。
<expr> マップ先の文字列を Vim の式とみなして、評価した結果の文字列をマップ先とします。
<leader>デフォルトでは「\」
<space> 空白文字
<cr> リターン
<esc> エスケープ
<bar> 「|」 パイプ記号
<backspace>バックスペース

vimをEmacs風に設定した「.vimrc」

.vimrc」を置いておきます。
基本的には「入力(挿入)モード」で動くように作成しています。

"----------------------------------------------------
" Emacs風関係
"----------------------------------------------------
" コマンド入力中断
imap <silent> <C-g> <ESC><ESC><ESC><CR>i

" 画面分割
imap <silent> <C-x>1 <ESC>:only<CR>i
imap <silent> <C-x>2 <ESC>:sp<CR>i
imap <silent> <C-x>3 <ESC>:vsp<CR>i
imap <silent> <C-x>o <ESC><C-w>w<CR>i
imap <silent> <C-x>p <ESC><C-w>p<CR>i

" 消去、編集
imap <C-k> <ESC>d$i
imap <C-y> <ESC>pi
imap <C-d> <ESC>xi

" 移動
imap <C-a>  <Home>
imap <C-e>  <End>
imap <C-b>  <Left>
imap <C-f>  <Right>
imap <C-n>  <Down>
imap <C-p>  <UP>
"imap <ESC>< <ESC>ggi
"imap <ESC>> <ESC>Gi

" ファイル
imap <C-c><C-c>  <ESC>:qa<CR>
imap <C-x><C-c>  <ESC>:qa!<CR>
imap <C-w><C-w>  <ESC>:w<CR>
imap <C-x><C-w>  <ESC>:w!<CR>
imap <C-x><C-f>  <ESC>:e 

" エラーリカバリ
" imap <C-/> <ESC>ui

" その他
map  <C-x><C-e>  :Explore<CR>

Valid XHTML 1.1! Valid CSS! 初版更新日 2010/10/03   最新更新日 2010/10/03