よんちゅBlog

― このブログは自分用のメモや日々の問題などを共有するためのものです ―

20121005185841 お知らせ:  2013/07/17 ブログデザインをリニューアルしました。

accelerated-smooth-scroll という Vimプラグイン を作った (Vim Advent Calendar 2012, 167日目)

vim

Vim Advent Calendar 2012 の167日目の記事です。

前回(166日目)の記事は @deris0126 さんの Vimでパターン検索するなら知っておいたほうがいいこと - derisの日記 でした。

先日Chrome拡張 Vimmers follow status を作ったのをきっかけに Vimmersページ に登録して頂いたので、これは VAC にも参加せねばと思い、参加させて頂きました。

今回は、GW中に作った Vimプラグイン accelerated-smooth-scroll のご紹介です。
(調べた限りでは類似のプラグインはなかったみたいですが、もしあったらごめんさない。)

accelerated-smooth-scrollとは?

名前の通り、smooth scroll に加速機能をつけた vimプライン です。

C-d/C-u による半ページ移動、C-f/C-b による1ページ移動の動作を置き換え、スムーズな画面移動を行いつつ、連続スクロール時には段々加速していくというものです。

長らく vim-scripts/Smooth-Scroll というプラグインを使用していたのですが、早くスクロールしたいときに邪魔になることがしばしばあったので作りました。

追記: 2013/05/17
動画が欲しいという天の声を聞いて用意してみました。
動画だとちょっとカクついていますが参考にどうぞ。

インストール方法

NeoBundle 使用時は以下で、

NeoBundle 'yonchu/accelerated-smooth-scroll'
使い方

デフォルトで <C-d>/<C-u> と <C-f>/<C-b> キーを置き換えるので、特に設定もなく使用出来ます。

マッピングを変更したい場合は以下のように設定します。

" デフォルトマッピングを無効にする (必要なら)
let g:ac_smooth_scroll_no_default_key_mappings = 1

nmap <silent> <C-d> <Plug>(ac-smooth-scroll-c-d)
nmap <silent> <C-u> <Plug>(ac-smooth-scroll-c-u)
nmap <silent> <C-f> <Plug>(ac-smooth-scroll-c-f)
nmap <silent> <C-b> <Plug>(ac-smooth-scroll-c-b)

加速機能のみオフにしたい場合は以下のように設定します。

let g:ac_smooth_scroll_enable_accelerating = 0

smooth scroll の初速を変更したい場合は以下のように設定します。

" <C-d>/<C-u> 時のスリープ時間 (msec) : 小さくするとスクロールが早くなります。
" Default : 10
let g:ac_smooth_scroll_du_sleep_time_msec = 5

" <C-f>/<C-b> 時のスリープ時間 (msec) : 小さくするとスクロールが早くなります。
" Default : 10
let g:ac_smooth_scroll_fb_sleep_time_msec = 5

加速度を変更したい場合は、以下の関数を定義して下さい。
以下の関数はスクロールキーを押す度に呼ばれます。

" 以下はデフォルトの定義です。

" スクロールスキップ数を求める
"   key_count : 連続でキーを押した回数
"   wlcount : 移動する行数 (1ページ移動の場合は1ページの行数, 半ページ移動の場合は半ページ分の行数)
function! g:ac_smooth_scroll_calc_step(key_count, wlcount)
  if a:key_count > a:wlcount / 2
    return a:wlcount
  endif
  return a:key_count
endfunction

" スリープ時間を求める
"   key_count : 連続でキーを押した回数
"   sleep_time_msec : スリープ時間の初期値
"     (g:ac_smooth_scroll_du_sleep_time_msec or g:ac_smooth_scroll_fb_sleep_time_msec の値)
function! g:ac_smooth_scroll_calc_sleep_time_msec(key_count, sleep_time_msec)
  return  a:sleep_time_msec - (a:key_count - 1)
endfunction

よかったら使ってみて下さい。
あと、バグなどありましたら教えてください。

以上、
Vim Advent Calendar 2012 167日目の記事、 accelerated-smooth-scroll の紹介でした。

次回 168日目は、 cohama(@c0hama) さんです。