第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 のことを書くのは範囲が大きくて難しい
"