Up: 目次   [Index]


ウィンドウのスクロール

*scroll.txt*    For Vim バージョン 8.1.  Last change: 2019 May 13


		  VIMリファレンスマニュアル    by Bram Moolenaar

スクロール

これらのコマンドはウィンドウの內容を移動します。カーソルがウィンドウの外に移動しようとすると、カーソルはウィンドウに留まるやうに振舞ひます (’scrolloff’ のスクリーン行をカーソルの周圍に確保します)。

1 ページとはウィンドウの行數から 2 引いた行數と定義します。これらのコマンドを覺えるのは少し厄介かもしれません。ウィンドウをバッファのうち貴方が見てゐる一部分と捉へて、ウィンドウの動きをバッファ內での上下の移動に關聯付けてコマンドを覺えると良いでせう。

例へばバッファの中でウィンドウが上に動くと、ウィンドウのテキストはスクリーンの下の方へ移動していくことになります。

手始めにユーザーマニュアルの |03.7| を讀んでください。

1. 下方スクロール|scroll-down|
2. 上方スクロール|scroll-up|
3. カーソル相關スクロール|scroll-cursor|
4. 水平スクロール|scroll-horizontal|
5. 同期スクロール|scroll-binding|
6. マウスホイールスクロール|scroll-mouse-wheel|

1. 下方スクロール

以下のコマンドは編輯ウィンドウ (バッファ內の貴方が見てゐる一部分) を下に移動します (つまりテキストバッファのより下にある行を見ることができます):

CTRL-E

バッファの下へ [count] 行ウィンドウをスクロールします。

テキストはスクリーン上で上方に移動します。

覺え方: Extra lines {譯注: Extra=割增}

CTRL-D

ウィンドウをバッファ內で下にスクロールします。スクロールする行數は ’scroll’ オプションで指定されます (既定値: スクリーンの半分の行數)。

[count] が指定された場合、’scroll’ オプションに [count] が設定されてからスクロールします。カーソルもファイル內で同じ行數だけ下へ移動します (もしも可能なら; 行が折り返されてゐる場合やファイルの終端に達した時は違つてきます)。

カーソルがバッファの最終行にある時は何も起こらずにビープ音が鳴ります。’startofline’ オプションも參照してください。

<S-Down> または
<PageDown> または
CTRL-F

ウィンドウをバッファ內で [count] ページ前方 (下方) にスクロールします。’startofline’ オプションも參照してください。

ウィンドウが 1 つだけのときはオプション ’window’ の値が使はれます。

z+

[count] が無い時: 現在のウィンドウの最下行を最上行にして再描畫します。カーソルはその行の、最初の非空白文字に合はせられます。

[count] が有る時: ちやうど "z<CR>" と同じです。

2. 上方スクロール

以下のコマンドは編輯ウィンドウ (バッファ內の貴方が見てゐる一部分) を上に移動します (つまりテキストバッファのより上にある行を見ることができます):

CTRL-Y

バッファの上へ [count] 行ウィンドウをスクロールします。

テキストはスクリーン上で下方に移動します。

Note:
MS-Windows のキーバインディングを使つてゐるときは CTRL-Y は redo にマッピングされてゐることに注意してください。

CTRL-U

ウィンドウをバッファ內で上にスクロールします。スクロールする行數は ’scroll’ オプションで指定されます (既定値: スクリーンの半分の行數)。

[count] が指定された場合、’scroll’ オプションに [count] が設定されてからスクロールします。カーソルもファイル內で同じ行數だけ上へ移動します (もし可能なら; 行が折り返されてゐる場合やファイルの先頭に達した時は違つてきます)。カーソルがバッファの先頭行にある時は何も起こらずにビープ音が鳴ります。’startofline’ オプションも參照してください。

<S-Up> または
<PageUp> または
CTRL-B

ウィンドウをバッファ內で [count] ページ後方 (上方) にスクロールします。’startofline’ オプションも參照してください。

ウィンドウが 1 つだけのときはオプション ’window’ の値が使はれます。

z^

[count] が無い時: 現在のウィンドウの最上行を最下行にして再描畫します。カーソルはその行の、最初の非空白文字に合はせられます。

[count] が有る時: まず [count] 行がウィンドウの最下行になるやうにスクロールし、次にウィンドウの最上行になつた行を最下行にして再描畫します。カーソルはその行の最初の非空白文字に合はせられます。

3. カーソル相關スクロール

下記のコマンドはカーソルの位置は變へずに編輯ウィンドウ (バッファの見えてゐる一部)の位置を變へます。’scrolloff

Note:
オプションを設定してゐると、カーソルの上または下の周邊行が表示されることに注意してください。

z<CR>

[count] 行 (省略時はカーソルのある行) をウィンドウの最上行にして再描畫します。カーソルは行內の最初の非空白文字に置かれます。

zt

"z<CR>" と同じですが、カーソルは同じカラムに留めます。

z{height}<CR>

ウィンドウを高さ {height} 行に變更して再描畫します。スクリーンの更新が非常に遲い時に、高さを減らすと有效です。物理的なスクリーンの高さよりも高くすることはできません。

z.

[count] 行 (省略時はカーソルのある行) をウィンドウの中心にして再描畫します。カーソルは行內の最初の非空白文字に置かれます。

zz

"z." と同じですが、カーソルは同じカラムに留めます。

注意: caps-lock が有效になつてゐると、このコマンドは "ZZ" になり、バッファを書き出し終了してしまひます!

z-

[count] 行 (省略時はカーソルのある行) をウィンドウの最下行にして再描畫します。カーソルは行內の最初の非空白文字に置かれます。

zb

"z-" と同じですが、カーソルは同じカラムに留めます。

4. 水平スクロール

次の 4 つのコマンドはスクリーンに應じてカーソルが移動します。カーソルのある文字がスクリーンが動いたために消えると、カーソルはスクリーン上の一番近い文字に移動します。’sidescroll’ の値は使用されません。

z<Right> または
zl

スクリーンを [count] 文字右へ移動します。從つてテキストは [count] 文字左へスクロールします。これは ’wrap’ がオフの時にだけ働きます。

z<Left> または
zh

スクリーンを [count] 文字左へ移動します。從つてテキストは [count] 文字右へスクロールします。これは ’wrap’ がオフの時にだけ働きます。

zL

スクリーンの幅の半分右へスクロールします。從つてテキストはスクリーンの幅の半分左へスクロールします。これは ’wrap’ がオフの時にだけ働きます。

zH

スクリーンの幅の半分左へスクロールします。從つてテキストはスクリーンの幅の半分右へスクロールします。これは ’wrap’ がオフの時にだけ働きます。

次の 2 つのコマンドではテキスト上でカーソルは移動せず、スクリーンのテキストだけがスクロールします。

zs

カーソルのある位置がスクリーンの始まり (左側) に來るやうにテキストを水平にスクロールします。これは ’wrap’ がオフの時にだけ働きます。

ze

カーソルのある位置がスクリーンの終はり (右側) に來るやうにテキストを水平にスクロールします。これは ’wrap’ がオフの時にだけ働きます。

5. 同期スクロール

時折、2 つかそれ以上のウィンドウを結びつけて、1 つがスクロールしたら他のウィンドウもスクロールして欲しいと思ふことがあります。Vim ではウィンドウごとに ’scrollbind’ オプションを設定することでこのやうな振る舞ひをさせることが可能です。

scrollbind’ が設定されたあるウィンドウがスクロールした場合、他の ’scrollbind’ が設定されたウィンドウが可能なら同じ量だけスクロールします。’scrollbind’ の振る舞ひは ’scrollopt’ オプションによつて變更することができます。

スクロールバーを使つてゐるとき、マウスでスクロールバーを操作しても他のウィンドウはスクロールされません。これは少しの閒だけ同期スクロールを使はないでスクロールしたい時に使へます。

ウィンドウに ’diff’ オプションも設定されてゐるとき、同期スクロールは位置を正確に同期するために 2 つのバッファの差分を利用します。それ以外の場合は以下の方法が使はれます。

scrollbind’ された各々のウィンドウは "相對的なオフセット" --すなはち、現在のウィンドウの垂直スクロール位置とその他のウィンドウの垂直スクロール位置の閒の差分と考へることができます-- を追跡します。’scrollbind’ ウィンドウの 1 つがテキストの最初もしくは最後を超えてスクロールしようとすると、そのウィンドウはそれ以上スクロールはしませんが、どれだけ限界を超えて移動しようとしたかは記憶されます。そのウィンドウは同じ相對オフセットを維持するために、そのバッファの限界を超えてスクロールを要求されたかにかかはらず、この情報を保持し續けます。

しかしながら、そのバッファの限界を超えるやうな相對オフセットを持つウィンドウにカーソルフォーカスが與へられると、その他の ’scrollbind’ されたウィンドウは現在のウィンドウの有效な相對オフセットの位置にジャンプすることになります。この振る舞ひは ’scrollopt’ オプションから "jump" フラグを削除することで變へることができます。

:syncbind

すべての ’scrollbind’ ウィンドウが同じ相對オフセットを持つやうに强制します。すなはち ’scrollbind’ ウィンドウがそのバッファの先頭にスクロールされた時、その他の ’scrollbind’ ウィンドウもまたそれぞれのバッファの先頭に持つていかれます。

scrollbind’ フラグはウィンドウを垂直スクロールするキーボードコマンドを使ふ時に意味があり、またカーソルフォーカスを持つウィンドウの垂直スクロールバーを使ふときに意味があります。しかしながら、カーソルフォーカスを持たないウィンドウの垂直スクロールバーを使ふときには、’scrollbind’ は無視されます。これを ’scrollbind’ されたウィンドウの相對オフセットを修正する時に利用することができます。

6. マウスホイールスクロール

マウスにスクロールホイールがあるときは、GUI の Vim でそれを使ふことができます。どのやうに動作するかはシステムに依存します。ホイールは xterm でも動作します |xterm-mouse-wheel|。デフォルトでは垂直スクロールホイールのみサポートされてゐます。いくつかの GUI では水平スクロールホイールもサポートされてゐます。

Win32 GUI ではスクロールの動作はソースに埋め込まれてゐます。それはちやうど現在のウィンドウのスクロールバーをドラッグした時のやうに働きます。何行スクロールするかは貴方のマウスドライバに依存します。スクロールの動作が入力フォーカスの問題を引き起こすなら、|intellimouse-wheel-problems| を參照してください。

X11 GUI (Motif, Athena, GTK) ではホイールを回すと <ScrollWheelUp>, <ScrollWheelDown>, <ScrollWheelLeft>, <ScrollWheelRight> などのキー入力が發生します。例へば、スクロールホイールを上に回すと <ScrollWheelUp> キーが生成され、ウィンドウが上にスクロールします (つまりテキストが下に移動します)。これらのキーのデフォルトの動作は次の通りです:

<ScrollWheelUp>3 行上にスクロール
<S-ScrollWheelUp>1 畫面上にスクロール
<C-ScrollWheelUp>1 畫面上にスクロール
<ScrollWheelDown>3 行下にスクロール
<S-ScrollWheelDown>1 畫面下にスクロール
<C-ScrollWheelDown>1 畫面下にスクロール
<ScrollWheelLeft>6 列左にスクロール
<S-ScrollWheelLeft>1 畫面左にスクロール
<C-ScrollWheelLeft>1 畫面左にスクロール
<ScrollWheelRight>6 列右にスクロール
<S-ScrollWheelRight>1 畫面右にスクロール
<C-ScrollWheelRight>1 畫面右にスクロール

これはコマンドラインを編輯する以外の、全てのモードで動作するでせう。

Note:
水平スクロールは ’nowrap’ が設定されてゐるときのみ機能します。また、’guioptions’ の "h" フラグが設定されてゐない場合は、スクロールするとカーソル行が畫面外になつてしまふやうなときに、表示されてゐる範圍の一番長い行にカーソルが移動します (水平スクロールバーの動作に似た感じ)。

キーマッピングによりデフォルトの振る舞ひを變更することができます。例へば、ノーマルモードでホイールによるスクロールを 1 行にしたり半畫面にしたりできます:

map <MouseDown> <C-Y>
map <S-MouseDown> <C-U>
map <MouseUp> <C-E>
map <S-MouseUp> <C-D>

Alt や Ctrl といつた修飾も可能です。

これはもちろん、Vim がスクロールホイールのイベントを取得してゐる時にだけ働きます。この機能が働くかどうかは "xev" プログラムを使用すればチェックできます。

XFree86 を使つてゐるときには、/etc/XF86Config に貴方のマウスの正しいエントリがなければなりません。FreeBSDでは、このやうなエントリがロジテックのスクロールマウス用に必要です。

Protocol     "MouseMan"
Device       "/dev/psm0"
ZAxisMapping 4 5

詳しくは XFree86 のドキュメントを參照してください。

<MouseDown> と <MouseUp> は廢止されました。<MouseDown> の代はりに <ScrollWheelUp> を、<MouseUp> の代はりに <ScrollWheelDown> を使つてください。

新しい xterm でマウスホイールを使ふには、上で書かれてゐるやうに Xserver でスクロールホイールマウスが動作するやうにするだけで良い。

古い xterm でマウスホイールを使ふにはこうします:

  1. 上に書かれてゐるやうに、Xserver で使へるやうにします。
  2. xterm に變換を追加し、スクロールイベントを Vim へエスケープシーケンスとして渡すやうにします。
  3. Vim にマッピングを追加し、エスケープシーケンスを <ScrollWheelDown> もしくは <ScrollWheelUp> キーとして解釋できるやうにします。

次のやうな內容をあなたの ~/.Xdefaults (もしくは別名の貴方の X リソースファイル) に追加すれば變換することができます。

XTerm*VT100.Translations:     #override \n\
      s<Btn4Down>: string("0x9b") string("[64~") \n\
      s<Btn5Down>: string("0x9b") string("[65~") \n\
      <Btn4Down>: string("0x9b") string("[62~") \n\
      <Btn5Down>: string("0x9b") string("[63~") \n\
      <Btn4Up>: \n\
      <Btn5Up>:

以下のマッピングを vimrc ファイルに追加してください:

:map <M-Esc>[62~ <ScrollWheelUp>
:map! <M-Esc>[62~ <ScrollWheelUp>
:map <M-Esc>[63~ <ScrollWheelDown>
:map! <M-Esc>[63~ <ScrollWheelDown>
:map <M-Esc>[64~ <S-ScrollWheelUp>
:map! <M-Esc>[64~ <S-ScrollWheelUp>
:map <M-Esc>[65~ <S-ScrollWheelDown>
:map! <M-Esc>[65~ <S-ScrollWheelDown>

Up: 目次   [Index]