81

The main scrolling commands in Vim are:

  1. Ctrl-B and Ctrl-F, as well as PageUp and PageDown scroll by full page
  2. Ctrl-U and Ctrl-D scroll half a page by default
  3. Ctrl-Y and Ctrl-E scroll one line

I lose visual context every time for the former two, so I have developed the bad habit of hitting the latter (Ctrl-Y and Ctrl-E) repetitively.

Since there is currently no first party support for smooth scrolling, what are the least objectionable workarounds/plugins?

I use both Vim and GVim depending on the task, and am happy to customize them separately if there is no one really good hack that works for both. The mouse scroll wheel works nicely in GVim, but I'm looking for keyboard based solutions.

4

12 に答える 12

39

更新: のガイドラインに従って多少リファクタリングされたこのコードを: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

特徴:

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

^: コピー アンド ペーストを行うすべてのユーザーは、この文字が制御文字を示していることを覚えておいてください。コピーして貼り付けると無効な結果が生成されるため、手動で入力する必要があります。

  • ^YCTRL-VそれからCTRL-Y
  • ^ECTRL-VそれからCTRL-E

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

マウスの使用

質問では、マウスによるスクロールは GVim でうまく機能すると述べていますが、キーボード ソリューションが必要です。これは、通常の端末 Vim で動作する場合、質問者がマウス ソリューションに興味がある可能性があることを意味します。

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

ただし、この質問に基づいて、単にマウスをオンにするだけでなく、手動でセットアップを行う必要がある人もいるようです (私は を使用しますset mouse=n)。


.vimrcの次の行があります

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

于 2012-08-30T17:04:49.117 に答える
11

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>
于 2010-10-31T19:16:38.087 に答える
4

私がしていることは、キーボードのリピートを非常に速く、約 120 文字/秒に設定し、遅延を小さく設定することです。次に、4j と 4k にマッピングします。j と k を使用してソース コードを上下にナビゲートします。これにより、カーソルが上下にすばやく、非常にスムーズに移動します。しかし、ここに良い点があります。これは、Windows ではなく Linux で機能します。何年もの間、X11 のキーボード入力は、j を押し続けると、明らかに j 文字を出し始めるように機能します。しかし、j を押したまま ctrl キーを押すと、j キーをもう一度押さなくても、X11 は cj 文字を出力し始めます。次に、ctrl キーを離して j を押し続けると、X11 は j を再び入力し続けます。したがって、j を指定すると、カーソルがスムーズに下方向に動き始めます。また、j を放さずに定期的に Ctrl キーを押して、カーソルを後押しすることもできます。

また、Devin と同じように、scrolloffset を 5 に設定します。

最後に、ctrl と cap lock を入れ替えます。ctrl キーのデフォルトの位置は完全に遅くなっています (攻撃を意図したものではありません)。左手を回す必要があります。私はキャップスロックをほとんど使用しないので、交換します。次に、私の左のピンクの指は、ヨガの動きをしなくても ctrl キーに到達できます。

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

于 2010-12-01T03:27:49.923 に答える
3

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

そう=7に設定

'scrolloff' 'so' number (default 0) global
{not in Vi}
Minimal number of screen lines to keep above and below the cursor. This will make some context visible around where you are working. If you set it to a very large value (999) the cursor line will always be in the middle of the window (except at the start or end of the file or when long lines wrap). For scrolling horizontally see 'sidescrolloff'. NOTE: This option is set to 0 when 'compatible' is set.

于 2010-11-01T02:38:14.997 に答える