画面の4分の1(25%)を上下にスクロールする


14

ページ全体をスクロールするのは混乱を招きすぎ、半ページは多すぎると感じることがよくありますが、1/4ページはちょうどいいです。私は現在、矢印キーを押したままにするだけです。

ページの25%を簡単に上下にスクロールするにはどうすればよいですか?


1
この回答の
取り消し線

回答:


19

たぶんctrldctrluあなたが探しているものかもしれません。デフォルトでは、画面の半分を移動します。

から:h CTRL-D

ウィンドウをバッファ内で下にスクロールします。行数は「スクロール」オプションから取得されます(デフォルト:画面の半分)。

[count]が指定されている場合、最初に 'scroll'オ​​プションを[count]に設定します。

これは、ウィンドウ内で最初にスクロールするときにXXctrld、XXがウィンドウ内の行数の25%である場合に実行できることを意味します。scrollXX値に設定するctrldと、ctrluを使用して画面の25%を移動できます。

また、それ:h scrollingはあなたにとって興味深いかもしれません。


編集

そして、ここに追加する関数といくつかのマッピングを持つ別のソリューションがあります.vimrc

function! ScrollQuarter(move)
    let height=winheight(0)

    if a:move == 'up'
        let key="\<C-Y>"
    else
        let key="\<C-E>"
    endif

    execute 'normal! ' . height/4 . key
endfunction

nnoremap <silent> <up> :call ScrollQuarter('up')<CR>
nnoremap <silent> <down> :call ScrollQuarter('down')<CR>

この関数は現在のウィンドウの高さを取得し、それに応じてそのパラメーターに応じて画面を高さの4分の1だけ上下にスクロールします。

マッピングは関数を呼び出します。最初の関数は上に移動し、2番目の関数は下に移動します。

もちろん、あなたが変更することができます<up>し、<down>あなたがあなたの矢印キーのデフォルトの動作を維持したい場合は、いくつかの他のキーへ。


2
それは使用する方が理にかなってありますように思えctrl-Eおよびctrl-Yマッピングで、)ので。その後、1/2ページと1/4ページの両方のスクロール用の個別のショートカットがあります。b)。ctrl-U/ の動作ctrl-Dは一貫しており、以前にマッピングを使用したことがあるかどうかに依存しません。
リッチ

あなたの重要なメモがわかりません。手動で入力するとはどういう意味ですか?現在、これを使用すると、ページを移動する代わりに行が削除されます。
ルイ・ホン

@LouisHong let key="^U"二重引用符で囲まれた部分がのキーコードを表すための行を参照してくださいctrl+u。したがって、vimで関数をコピーした場合は、最初の二重引用符ヒットci"にカーソルを置き、引用符の内容を変更ctrl+vしてctrl+uから、同じ行に続けてヒットしlet key="^D"ます。
statox

@リッチ:うん、それは良い点です。矢印キーを使用したのは、OPが彼が使用したと言ったことですが、あなたのポイントが関連しているからです。
statox

@statoxあなたは私を誤解しました!(明確ではありませんでした)。のlet key="^Y"代わりに使用するつもりでしたlet key="^U"。同じ動作を作成しますが、'scroll'設定には影響しません。
リッチ

3

ctrleおよびctrlyを使用して、1行ずつ上下にページを移動できます。

次に、+ /-25%を移動する場合は、使用できます20ctrle。これにより、20行下に移動します。

あなたに似た良い説明された質問もあります:https ://stackoverflow.com/questions/3458689/how-to-move-screen-without-moving-cursor-in-vim


3

statoxアプローチを変えて、ラインラップ上でより一貫したスクロールを実現しました。クォーターステップが必要な場合は、0.618を0.25などに戻します。

function! ScrollGolden(move)
    let height=winheight(0)
    if a:move == 'up'
        let prep='L'
        " let key="^Y"
        let key='gk'
        let post='zb'
    elseif a:move == 'down'
        let prep='H'
        " let key="^E"
        let key='gj'
        let post='zt'
    endif
    execute 'normal! ' . prep . float2nr(round(height*0.618)) . key . post
endfunction
nnoremap <silent> <BS>    :call ScrollGolden('up')<CR>
nnoremap <silent> <Space> :call ScrollGolden('down')<CR>

0

正確な25%ではなく、適切な一般的な回答が必要な場合は、25で除算することでページ上の通常の行数を考慮し、システムマッピングを設定できます。たとえば、画面上に通常約100行ある場合、その25%は25行なので、資本JおよびKのようなものにキーマッピングを設定して、25行をすばやく上下に移動できます。

noremap J 25j
noremap K 25k

ファイル全体のクォーターマークにジャンプする場合は、通常モードで次のように入力します。

25%

1
ソリューションには2つの欠点があると思います。noremap J 25j25をハードコードするため、たとえば100行のウィンドウを水平に分割すると、マッピングは実際に新しいウィンドウの50%をナビゲートします。あなたの目のオプションについて:25%、私は100行を持っているバッファと、私は25%の前方タイピングを移動する場合:私はそれが存在を知っていませんでしたが、私のテストから、最初の行に基づいた位置にカーソルを置くと思われる:25%私をもたらしますカーソルがどこにあっても25行目。また、この機能を説明するヘルプトピックをドキュメントで見つけることができませんか?
statox

1
私はでヘルプトピックを見つけました:h N%:-)
statox
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.