読者です 読者をやめる 読者になる 読者になる

pockestrap

Web Programmer's memo

:help する Vim の operator かいた <Vim Advent Calendar 2013>

この記事は Vim Advent Calendar 2013 176日目の記事です。

175日目は、 Vim Advent Calendar 2013 175日目: 横幅が統一ではない矩形をヤンクしたり削除したりするプラグインをつくった - C++でゲームプログラミング でした。


前置き的な

先日、vim plugin 読書会 にほんの少しだけ参加しました。
その時、v:register のヘルプを引きたかったのですが、 :h register を引いてしまって、Vimのユーザー登録を促されました
それというのも、下のようなキーマップを適用して、カーソル下の単語でhelpを引くようにしていたのですが、v:registerは一単語とみなされなかったからです。

nnoremap <F1> :<C-u>help <C-r><C-w><CR>

つくった

これではこのような状況でhelpが引きづらく不便だなーと思ったので、operator化してみました。
はじめてでしたが、operatorプラグインを参考にするとなんとなく作ることが出来ました。うれしい。

vim-operator-help · 56ff841 · pocke/dotfiles · GitHub

function! OperatorHelp(motion_wise)
  if line("'[") != line("']")
    return
  endif
  let start = col("'[") - 1
  let end   = col("']")
  let sel = strpart(getline('.'), start, end - start)
  execute "help " . sel
endfunction

call operator#user#define('help', 'OperatorHelp')

map <F1> <Plug>(operator-help)

コピペ力で頑張ったので、何やってるかよくわかんなかったりします。
'[']に、それぞれoperator対象範囲の先頭と末尾の位置情報があるのかな?

つかう

これを~/.vimrcに書いてやって、例えば<F1>wとか<F1>ibとか適当に選択して<F1>してやれば、思い通りの範囲で:helpすることができます。べんり。

もちろん、v:registerもhelpを引くことが出来ます。やったね。

さいごに

ちょっとVimわかった気がする、するだけかなぁ。

大した記事じゃなくてごめんなさい、明日は…どんな記事かなっ