いろいろなスクロール方法

見たい場所をすばやく表示

概要

ここではファイル中の自分の見たい部分をすばやく表示させるための コマンドを紹介します

まずは超基本

まずは多くの人が日常的に使っていると思われるコマンド例を簡単に書きます
70G なら, ファイル中の70行目に移動します . :70 も全く同じですね
また, G はファイルの最終行に移動し , これは :$ と同じです

「現在いる行の 40行後ろ」に移動したければ 40j で行け ます. j k の数値指定も無意識に使えるようになりましょう

CTRL-F CTRL-B なら 画面単位(ページ)で前後に移動です
20CTRL-F のように数値を前につければ 20ページ分を一瞬にして移動できます

特定の範囲を表示だけさせるには

例えば :5print とすると,5行目の内容を画面の下の領域に一時的に表示 します. 普通は省略して :5p と書いて使っていると思います
範囲をつけて :1,6p ならば 1〜6行目を画面下に 一時的に表示 します
p の代わりに # 文字を使って :1,6# ならば, 行番号つき で表示 します
表示させる範囲は Exコマンドの範囲の書き方なら何でもOKです. たとえば :/abc/;+5# ならば, 次に文字"abc"が現れる行からその5行後ろまでを行番号つきで表示します

ただし範囲指定に検索を使っていてカーソルの位置がその位置に移動してしまう場合 がありますが,こういう時は,あわてずに

''

などと打てば 操作前にいた行にカーソルが戻ります

ファイル上の別の場所を(一時的ではなく)ずっと見ながら作業したい場合

CTRL-W s

と打てば,画面を 分割 して,ひとつのファイルを二つの窓から編集できます

マーク機能の利用

ファイル中のいろいろな場所をあちこち見たい場合には,マーク機能も便利です. 例えば

ma

と打つと,「現在カーソルのある場所」に a という名前をつけたことになり, その後 カーソルをどこに移動させても

`a

と打つだけで一瞬にして名前をつけて覚えておいた場所に戻れます
実際は

m(場所につける名前)

でマークをつけておいて

`(場所につけた名前)

でマーク位置に移動します. おまけに

'(場所につけた名前)

ならばマーク位置の行の先頭文字に移動するし, 範囲指定の時などにも マークしておいた位置を使って d`a つまり「カーソル位置からマーク"a"まで の領域を削除」とかいう風に使えるし :'a,'bd とすればこれは 「マーク"a"した行からマーク"b"した行までを削除」という意味のコマンドとなります

マークに使える名前は, アルファベット一文字 です. 普通は,英小文字でマークするので これだけでも26種類の場所に別々の名前をつけて使えます. さらに英 大文字でのマーク は 小文字での機能に加えて, ファイルを越えてジャンプ で戻って来ることもできます
でも,マーク位置が多くなると,いちいちどれがどこへのマークだったかを覚えてられませんよね

:marks

と打てば,マークした名前と行番号の対応表が表示されますが,行番号だけ 見せられてもイマイチ使えない気がします
そこで,普段自分でよく使うマーク文字を 自分なりに(心の中で)決めておく ことを お勧めします.例えば「何かの領域の開始は"start"という単語の頭文字"s"をいつも使うことにしよう」 とか…何種類かを自分なりに決めておくと かなり使いやすくなりますよ

大きな区切りでジャンプ

長い文章のファイルを編集している時は,大きな区切りごとにジャンプできると 便利ですよね. そこで,次のコマンドを知っていると移動の時に便利です. まず, { } というコマンドで, 何も文字の無い 空白行にジャンプ でき ます. 文章の大きな区切りでは 普通, 行を開けるので これは結構使えます

さらに [[ ]] というコマンドは, 行の 先頭文字 { または CTRL-L である行にジャンプします
行の先頭が { の行へのジャンプが出来るということは, C言語のプログラムの関数 の最初 に次々とジャンプできるということです. また, CTRL-L へのジャンプ というのは 改ページ文字 に行けるということです
ちなみに, ここで言う CTRL-L というのは,制御文字である 本物の CTRL-L のことです. "CTRL-L"をファイル中に書き込むには,挿入モード中で CTRL-V CTRL-L という操作をすれば入力できます. 後でジャンプできるようにわざと目印として 入れておく ためにも このことを知っておきましょう

大きな区切りでジャンプできるということは,大きな区切り単位でコマンドを 簡単に実行できるという意味でもあります

この大きな単位のジャンプコマンドも,通常の移動コマンドと同じようにコマンドの 範囲指定の手段として使えますので,例えば
{!}nkf -f40 ならば,カーソルのある 段落を幅40で整形処理 できます
ちなみに,最初の { は「段落の先頭に行ってから」という意味で入れてます
{>3} ならば,カーソルのある場所から三段落に,まとめてインデントを深くします
[[d]] ならば,大きな範囲を一度に削除できます

あるいは, [[ で,大きな区切りの先頭位置に行ってから !]] とすると, 大きなひと区切り全体を指定するような行範囲が書かれるので, この最後に自動的に 書かれた ! 文字をバックスペースで削除してから w !wc などとすれば 範囲内の「行数,単語数,文字数」を数えることができます

ついでに, [[ , ]] { , } とは,だいぶスケールが小さくなりますが
( ) というコマンドもあります. これは 文章 単位でカーソルを移動させます
具体的には"."(ピリオド)や"。"(まる)を文章の終わりだと認識して,その次の 前後の「文章の最初の文字」にカーソルを移動させます. たとえば y) ならば,「文章の終わりまでを」Yankしますし d5) ならば,カーソル以降の 五つの文章をまとめて削除できます. これで文章単位の移動やコマンドの使用も一発ですね

大きな範囲にコマンドを使うと, 予想とハズレた領域に適用されてしまいそうで恐い という人もいるかと思いますが,コマンドを実行してから u を押すだけで実行前の状態に 戻るので,恐がる必要は無いです. 失敗しながらも,しばらくやれば慣れてきて, どこまでに 適用されるかの判断もとっさにできてくるようになるものです

過去のカーソル位置は記録されている

もし, 大きな移動コマンドを間違って使ってしまって「あれ〜ここはどこ ?? もどりたいよ〜!!」などと混乱状態になってしまった場合, どうしましょうか ? あるいは大きな範囲や,ファイルを越えて何度もジャンプをするようになると 特定の場所を 行ったり来たりしたくなる 場合も多いと思います. また,「ちょっと見に行って 戻ってくる」ような使い方が気楽にできると便利ですよね

じつは,JVimは,過去にジャンプコマンドなどでカーソルが移動した位置は, 自動的に 記録して,後で利用することができます

:jumps

と打つと,カーソル位置の記録内容の一覧を見ることができます
これは,行番号程度の表示なので,見れてもあまり便利に使えそうな気がしませんが

CONT-O

を打つと.過去のカーソル位置に戻れます
どんどん CONT-O を押すごとに戻っていけます.逆は CONT-I です. 過去の場所に戻った後で,最新の場所に再び戻っていけます. とても便利だし簡単です

とても便利な"z"コマンド

文字 z で始まる一連のコマンドは通常は カーソルの行番号を変えずにカーソル行の画面表示位置を変える コマンドとして 使っていると思います. 具体的には…こんなコマンドたちです

z(Return) … カーソルのある行を画面の一番上の行となるような位置に スクロールさせる. 行内でのカーソル位置は行の先頭文字へと移動する

z. … カーソル行を画面の中央の行となるような位置に スクロールさせる. 行内でのカーソル位置は行の先頭文字へと移動する

z- … カーソル行を画面の一番下となるような位置にスクロール. 行内での カーソル位置は行の先頭文字へと移動する

zt … カーソル行を画面の一番上となるような位置にスクロール. 行内での カーソル位置は変化しない
ちなみに,"t"はTopの意味だと思います

zz … カーソル行を画面の中央となるような位置にスクロール. 行内での カーソル位置は変化しない

zb … カーソル行を画面の一番下となるような位置にスクロール. 行内での カーソル位置は変化しない
ちなみに,"b"はBottomの意味だと思います

これらのコマンドでは,カーソルのある行は変わらないので あれ〜,カーソルはどこかな ? と思ったらすかさず zz などと打てば, 画面中央行にカーソル行が来てくれて便利なのです

これらの先頭に数字をつけると行番号でのジャンプコマンドになります
例えば 20zt ならば ファイルの20行目が画面の一番上の行になるように ジャンプして表示されます. 行番号でジャンプするだけでなく, そのジャンプ先の 画面表示上の場所まで指定できるので,カーソルを見失いにくく,使い勝手が良い です

ついでに 'azt ならば マーク a の場所を画面の最上行になるように 表示ジャンプできます. といっても,ただ単に 'a で移動してから zt しているだけですが, この組み合わせは便利ですので無意識に使えるようになりたい ものです

不思議なスクロール感覚が味わえるコマンド

CTRL-Y CTRL-E カーソルの行番号位置を変えずに 画面表示上の位置を一行づつ移動 させます. 言葉で説明するより, 実際にやって見て 納得してみて下さい. もちろん数字をつけて 2CTRL-Y などとすれば 二行単位でも移動します

これとは逆に 1CTRL-U 1CTRL-D で, カーソルの 画面表示上の行位置を変えずにファイルの行を移動できます
コマンドの最初の数字 1 は,「1行単位でやってくれ」という指示なのですが この数字は CTRL-U CTRL-D を実行した時に 一度でも指定していれば その後, 数字を指定しなくても以前に使った数字が あるものとして動作します. しかも例えば 3CTRL-D というコマンドを一度打ってしまえば 起動してから初めて CTRL-U を打っても,"3"行単位でスクロールします. つまり

「CTRL-DとCTRL-Uは同じ設定数値を共有して使っていて」
「一度でも数字を指定して使ったことがあれば勝手に記録される」

わけです. ですから数値として "1"が設定されていれば ただ単に CTRL-U CTRL-D を押せば 一行単位でスクロールするコマンドとして使えます

このスクロール単位の数字は scroll オプションで設定することもできるので

set scroll=1

というような行を設定ファイルに書いておくこともできます
…というよりも, 数値つきで CONT-D コマンドなどを使うと勝手に"scroll" オプションに設定されます .ためしに

:set scroll?

などとして確認して納得してみて下さい

ちなみに,何も設定していない時の行数は 画面の表示できる量の半分です. ですから デフォルトの動作は「半ページ単位で移動」ということになりますね. 実際に 今まで「半ページ移動」の意味だけを知ってて使っていた人も多いかと思いますが, 行数の カスタマイズが簡単にできるという事実を知っていれば,また新しい使いこなしが できるかと思います


前項目, 「操作の記録と再生機能は超便利」へ

目次へ

次項目, 「インデントとタブ関連のコマンド」へ