Vimパーソナル雑記帳



updated 27 Jun. 2003

[Latest Addenda]
030627: Gnome2/gtk2の上ではフォントをUnicodeベースで扱っているため、一部の文字については“2バイト文字(いわゆる全角文字)”を明示的に指定してやらないと、文字表示(gtk2側のフォント選択)が乱れることがあります。それを防ぐためには、.vimrcの中に次のようなオプションを書いておきます:

set ambiwidth=double



  Vimエディタは、エディタのポルシェかフェラーリかと言われる。

  私はこの多機能&高機能なエディタを、まだスズキの軽なみにしか乗りこなしていないが、とにかくいろんなことができるのには感心している。メーリングリストvim@vim.orgの先輩ユーザたちに教えてもらった、便利な使い方を、少しずつここで紹介していきたいと思う。

1. 英和辞書「英辞郎」を引く


  CD-R(1,200円)で提供されている英辞郎のファイルは、Shift-JISのプレーンテキストファイルなので、扱いやすい。これをLinux上で使うときには、EUCに変換する:

    qkc -eu Eijiro58.txt

英辞郎の各エントリは、黒い四角“■”で始まっている。たとえばこのように:

■aphotic {形}:暗闇の

だから、Vimを使って英辞郎を引くときには、次のような探索コマンドを入力すればよい。たとえば:

/^■conurbation

なお、/は探索コマンドであり、^は“行頭”を意味する正規表現だ。探索文字列は、すべて正規表現で入力しなければならない。わざわざインデクスファイルや検索プログラムを作らなくても、最近のパソコンはめちゃ速いから、こんな素朴な方法でも十分に使い物になる。
  しかし、辞書をを引くたびに、毎回々々、

/^■

を入力するのは、ちょっと面倒だ。スペースバーでもちょんと押せば、この3つの文字がコマンド入力欄に入力されるようにしたい。そのためには、Vimの「マップ機能」を使う。マップ機能は、あるキー入力を別のキー入力へとマップする機能だ。ここでは、「スペースバーを押す」という入力を、コマンド入力欄における「/^■」という3文字の入力へマップしたいのだ。そのためには、次のようにコマンドする:

:nmap <Space> /^■

あるいは、$HOME/.vimrcファイルの中に

nmap <Space> /^■

を書いておいてもよい。
  “コマンドモード時”のマップはnmapコマンドを使うが、“コマンド入力欄に入力している時”におけるマップはcmapコマンドを使う。たとえば:

:cmap <Space> \s

上は、スペースを打鍵すると\sの2文字(空白文字を意味する正規表現)が入力される。ただし、正規表現の一環としてスペース文字だけを入力したいのなら、こんなマッピングは不要で、単純にスペースバーを押せばよい:

/^■far away

わざわざ

/^■far\saway

でなくてもよい。

  探索マッチ文字列を強調表示し、またその強調表示がうるさいので消したいときのために、次の3行を.vimrcファイルに書いておくとよい(Ctrl + nで強調表示を消せるようになる):

set hlsearch
nmap <silent> <C-N> :noh<CR>
imap <silent> <C-N> <C-O>:noh<CR>

なお、nmapはコマンドモード時、imapは挿入モード時のマップを指定する。silentは、このコマンド実行時にコマンド文字列をいちいちコマンド欄に表示しないようにする。C-O(Ctrl+O)は、「挿入モード時に一瞬だけコマンドモードにする」という指定だ。

2. 削除した行を別ファイルへ書き出す


  行を削除するコマンドは、ddだ(dを続けて二度押す)。そうやってddで削除した行を、逐一、別ファイル(ファイル名がfoo.txtとしよう)に書き出すためには、やはりマップ機能を利用する:

:noremap dd :.write >> foo.txt<cr>dd

上は、行を削除するコマンドであるddを「現在行'.'をfoo.txtに追記書き出ししてから、本来のddの機能を実行する」という実行内容へマップしている。この最後のddにマップが再帰的に働くと困るので、再帰禁止を意味するnoremapを使っている。
  ちなみに私は、このマッピングを、語彙のインデクスファイル(何万語=何万行にもなる)から、書籍用の索引(せいぜい1000語前後)用の語彙を取り出すために利用している。
  Vimのマップ機能の概要は:

:help map
:h map

で知ることができる。

--end of page--