web-dev-qa-db-ja.com

Vimでスムーズなスクロールを行うための最良の方法は何ですか?

Vimの主なスクロールコマンドは次のとおりです。

  1. Ctrl-B そして Ctrl-F、 と同様 PageUp そして PageDown 全ページでスクロール
  2. Ctrl-U そして Ctrl-D デフォルトで半分のページをスクロールする
  3. Ctrl-Y そして Ctrl-E 1行スクロールする

前者の2つは視覚的なコンテキストを毎回失うため、後者にぶつかるという悪い癖をつけました(Ctrl-Y そして Ctrl-E)繰り返し。

現在、スムーズスクロールのファーストパーティサポートはないため、最も好ましくない回避策/プラグインは何ですか?

私はタスクに応じてVimとGVimの両方を使用しますが、両方に有効なハックが実際にない場合は個別にカスタマイズできます。マウススクロールホイールはGVimでうまく機能しますが、キーボードベースのソリューションを探しています。

69
Andrew Wagner

Update:私はこのコードをプッシュしました。:help write-pluginGithubリポジトリ

キーボードを使用する

これが私の.vimrc

function SmoothScroll(up)
    if a:up
        let scrollaction="^Y"
    else
        let scrollaction="^E"
    endif
    exec "normal " . scrollaction
    redraw
    let counter=1
    while counter<&scroll
        let counter+=1
        sleep 10m
        redraw
        exec "normal " . scrollaction
    endwhile
endfunction

nnoremap <C-U> :call SmoothScroll(1)<Enter>
nnoremap <C-D> :call SmoothScroll(0)<Enter>
inoremap <C-U> <Esc>:call SmoothScroll(1)<Enter>i
inoremap <C-D> <Esc>:call SmoothScroll(0)<Enter>i

特徴:

  • Vim scrollオプションのベースをスクロールします。
  • カスタマイズ可能なスクロール速度(sleepコマンドの時間引数を調整します。10ミリ秒を使用します)。 :ビデオのフレームレートを遅くするのと同じように、スムーズスクロールを遅くしすぎると、スムーズスクロールではなく、ぎくしゃくしたスクロールになります。しかし、あなたに最適なものは何でも。
  • 通常モードまたは挿入モードで動作します。

:コピーアンドペーストはすべて、^文字は制御文字を示します。コピー&ペーストは無効な結果を生成するため、これらは手動で入力する必要があります!

  • ^Y – CTRL-V それから CTRL-Y
  • ^E – CTRL-V それから CTRL-E

しかし <C-U>および<Enter>スタイルの構文は、文字通りそれらの文字として入力されます。 mapコマンドは、それらを制御文字にインテリジェントに変換します。

マウスを使用する

質問では、マウスでのスクロールはGVimでうまく機能するが、キーボードソリューションが望まれています。これは、アスカーが通常のターミナルVimで動作する場合、マウスのソリューションに興味があるかもしれないことを意味します。

私にとって、マウスサポートをオンにすると、マウスホイールをスムーズにスクロールできます。また、私にとって、スムーズスクロールは、編集中(挿入モード)ではなく、見回すとき(つまり、通常モード)に最も重要です。また、積極的に編集していない場合は、キーボードは常に削除されるため、これはうまく機能します。

この質問 に基づいて、一部の人々は、単にマウスをオンにするだけでなく、手動でセットアップする必要があるように思えます(私はset mouse=n):


僕の .vimrcには次の行があります

 set mouse=a
 map <ScrollWheelUp> <C-Y>
 map <ScrollWheelDown> <C-E>

33
Keith Pinson

Vimのtips.txtには簡単なリマップハックがあります。

Smooth scrolling                    *scroll-smooth*

If you like the scrolling to go a bit smoother, you can use these mappings:

    :map <C-U> <C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y>
    :map <C-D> <C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E>
9
Andrew Wagner

最近のプラグイン

似たようなものを投稿しました here ですが、基本的には terryma/vim-smooth-scroll と呼ばれる、スクロールに使用できる素晴らしいプラグインがあります。非常に素晴らしくスムーズなスクロールを提供します。


インストールはとても簡単です:

1 Vundle を使用しているので、これを。vimrc.bundlesに追加しました:

Bundle terryma/vim-smooth-scroll

2016年4月29日現在入手可能なVundleの最新バージョンでは、これを。vimrcに入れることができます。

Plugin 'terryma/vim-smooth-scroll'

2 ドキュメントに記載されているように、3つの引数を設定できます:distancedurationおよびspeed

私はこれを私の。vimrcファイルで使用しています:

noremap <silent> <c-b> :call smooth_scroll#up(&scroll*2, 10, 4)<CR>
noremap <silent> <c-f> :call smooth_scroll#down(&scroll*2, 10, 4)<CR>
6
Mick

恥知らずなプラグインですが、スクロールアニメーションの距離、速度、持続時間を簡単に調整できるプラグインをここで作成しました。 https://github.com/terryma/vim-smooth-scroll

4
terryma

これは完全にスムーズなスクロールではありませんが、ページをジャンプするときにコンテキストを失わないように処理する方法です。

so = 7に設定

'scrolloff' 'so'数値(デフォルトは0)グローバル
{Viにはない}
カーソルの上下に保持する最小画面行数。これにより、作業している場所の周囲のコンテキストが表示されます。非常に大きな値(999)に設定すると、カーソル行は常にウィンドウの中央になります(ファイルの先頭または末尾、または長い行が折り返される場合を除く)。水平スクロールについては、「sidescrolloff」を参照してください。注:「compatible」が設定されている場合、このオプションは0に設定されます。

3
DevinDawson

私は、キーボードリピートを非常に高速、約120文字/秒に設定し、遅延を小さくしています。次に、4jと4kにマッピングし、カーソルを上下に動かすjとkを使用してソースコードを上下にナビゲートします。しかし、ここに良い部分があり、これはWindowsではなくLinuxで機能します。何年もの間、X11のキーボード入力は、jを押したままにするとj文字を出力し始めるように動作します。しかし、その後jを押し続けてからctrlキーも押すと、Xキーはjキーを再度押すことなくc-j文字の出力を開始します。その後、ctrlキーを離してもjを押し続けると、X11は引き続きjを入力し続けます。そのため、jによりカーソルの動きがスムーズになり、下方向に滑らかになります。定期的にctrlを押すと、jを放すことなくブースト、衝撃を与えることができます。

また、Devinが行うことを行い、scrolloffsetを5に設定します。

最後に、ctrlとcap lockを交換します。 ctrlキーのデフォルトの位置は完全に遅らせられています(違反は意図されていません)。左手を回転させる必要があります。私はほとんどキャップロックを使用しないので、それらを交換します。それから、私の左のピンクの指は、ヨガの動きなしでctrlキーに到達できます。

これらのことは何年もの間私のために働いてきました。私はvimのみを使用し、gvimは使用しません。

3
Mike

プラグイン cskeeters/vim-smooth-scroll はスムーズなスクロールをサポートし、設定は不要です。 ztzz、およびzbによるスムーズなスクロールをサポートします。 terrymaのプラグイン のフォークです。一部のオープンプルリクエストが適用されています。

2
Chad Skeeters

このプラグイン 「accelerated-smooth-scroll」と呼ばれる(「スムーズなスクロールを加速するためのVimプラグイン(<C-D>/<C-U><C-F>/<C-B>) ")。たとえば、次の行を.vimrcに追加することにより、Vundleで使用できます。

Plugin 'yonchu/accelerated-smooth-scroll'

次に、Vimを再起動し、:PluginInstallコマンド、次にVimを再起動して、 <C-D> (Ctrl+D)および <C-O> (Ctrl+O)通常のコマンド。

悲しいことに、このプラグインは、私が望んでいたものの代わりにカーソルも移動します。 <C-E> そして <C-Y> コマンド。

0
silviubogan