第6回Vimスクリプト入門みたいの(キーマッピング)
随分、間隔が空いちゃった。これが17日分。
" usr_40.txt 新しいコマンドを作るから " 「40.1 キーマッピング」より " " 前回までに関数の呼び出しや定義ができるようになった。 " だが、毎回 :call f1() などとするのは面倒だし、 " タイプミスなども発生しやすい。そこでキーマッピングを " 利用する。 " " まず、サンプルを入力してみる。 map <F2> GoDate: <Esc>:read !date /T<CR>kJ " date が使われているが windows 環境では上手く動かないので /T を付けた。 " Gで最後の行に移動して、o で新しい行を追加して挿入モードに移行、 " Date: と入力したあとコマンドモードに移行、read コマンドで date /T " の結果を読みこんで k で一行上に移動したあと J で行を結合する。 " とまぁ、書いたとおりに動作してるぽい。 " " <F2> <Esc> <CR> といった <> 表記は色々な場面で使用される。 " cpoptions に < が含まれていない場合に使用できる。 " < 自体を表現する場合は <lt> とするといい。 <F2> を表現するなら、 " <lt>F2> とするといい。\ でもできるが、これも cpoptions の B に " 依存するので、<lt> の方がおすすめ。< を普通に書いてもその後に " キーが続かない場合は問題なく解釈するらしいが、<lt>が安全みたい。 " 参考 " :h map-special-chars " :h <> " :h keycodes " " で、気になったのは <special> を付けたほうがいいんじゃないか、 " ってこと<Esc> や <CR> は cpoptions に < が含まれていると使用 " できないはず。そこで <special> オプションを付けて <> 表記を使うか、 " <C-V><Esc> で入力できる ^[ や <C-V><C-M> で入力できる ^M を使うかの " どちらかにすべき。ただ、後者の記法だとVIM以外で見たときにわかりにく " くなるので、自分は <special> を付けて <> の表記を使うことにしたい。 " " 他のオプションには " <buffer> " <silent> " <special> " <script> " <expr> " <unique> " があるらしいけど、 " 今使いそうなのは、さっきも書いた<special>、 " あとは<buffer>、<silent>、<script> かな。 " " しばらくは map と noremap だけを使おうと思う。 " imap だとか vmap だとかは それぞれのモードごとのものらしい。 " " <> 表記の話でも参考にあげた map-special-chars に書かれている " <Leader> や <SID> や <Plug> これは使うかもしれない。 " :h {key}^D で使われているかの確認ができることも覚えておくといいかも。 " " 最後に前回書いた関数 F4 を呼びだすマッピングのサンプルでも書いておく " function! F4() let s = visualmode() . " : " let s = s . "'< (" . line("'<") . ',' . col("'<") . ") " . " : " let s = s . "'> (" . line("'>") . ',' . col("'>") . ") " return s endfunction map <special> . <Esc>:echo F4()<CR> " 今回のまとめ " map のことを書くのは範囲が大きくて難しい "