Next: , Previous: , Up: 目次   [Index]


カーソルの移動

*usr_03.txt*	For Vim バージョン 8.1.  Last change: 2017 Jul 21

		     VIM USER MANUAL - by Bram Moolenaar

			     カーソルの移動

文を入力したり削除したりするには、カーソルを目的の場所に動かさなくてはなりません。Vim にはカーソル移動のためのコマンドがたくさんあります。本章では、その中でも重要なコマンドの使ひ方を述べます。コマンドの一覽は |Q_lr| を參照してください。

|03.1|單語ごとの移動
|03.2|行頭、行末への移動
|03.3|文字への移動
|03.4|カッコの對應
|03.5|特定の行への移動
|03.6|現在の場所を表示
|03.7|スクロール
|03.8|簡單な檢索
|03.9|簡單なパターン檢索
|03.10|マークの使用

單語ごとの移動

カーソルを 1 單語先に進めるには、"w" コマンドを使ひます。他の Vim コマンドもさうですが、複數の單語を一氣に進めるために數値 (カウンタ) による回數指定ができます。例へば、"3w" では 3 單語進みます。圖で示すと次のやうになります。

This is a line with example text
  --->-->->----------------->
   w  w  w    3w

"w" で次の單語の先頭に移動します。既にカーソルが單語の先頭にある場合は、その次の單語の先頭に移動します。逆に "b" コマンドで直前の單語の先頭に戾ります。

This is a line with example text
<----<--<-<---------<---
   b   b b    2b      b

"e" コマンドで次の單語の末尾に移動します。"ge" で直前の單語の末尾に移動します。

This is a line with example text
   <-   <--- ----->   ---->
   ge    ge     e       e

カーソルが行末の單語にある場合、"w" コマンドは次の行の最初の單語に進みます。これを使ふと "l" よりもずつと速く文章の中を動けます。"b" は "w" の逆方向に同じルールで動きます。

單語は ‘.’ や ‘-’、‘)’ といつたアルファベット以外の文字で區切られます。Vim が何を單語とみなすかは、’iskeyword’ オプションの設定で變更できます。ヘルプで直接試したい場合は正しく動作させる爲に以下の樣に ’iskeyword’ をリセットする必要があります:

:set iskeyword&

空白を區切りとした單語 (WORD) を移動することもできます。これは普段意識する單語 (word) とは若干違ふため、大文字を使つてゐます。WORD 單位で動くコマンドは全部大文字です。圖で示すと次の通りです。

       ge      b          w                             e
       <-     <-         --->                          --->
This is-a line, with special/separated/words (and some more).
   <----- <-----         -------------------->         ----->
     gE      B                   W                       E

小文字と大文字のコマンドを兩方使ふと、文章中をより素早く動けるやうになります。

行頭、行末への移動

"$" コマンドでカーソルを行末に移動します。キーボードに <End> キーがあれば、それも同じ意味で使へます。

"^" コマンドでカーソルを行頭から最初の非空白文字に移動します。"0" (數字のゼロ) コマンドは行頭に移動します。<Home> キーも同じです。圖で示しませう。

          ^
     <------------
.....This is a line with example text
<-----------------   --------------->
        0                  $

("....." は空白文字があることを示します)

"$" コマンドでも他の移動コマンドのやうにカウンタの指定ができます。行末への移動を何度やつても意味がありませんので、"$" コマンドでのカウンタは他の行の行末への移動の意味になります。例へば、"1$" は "$" と同じで現在行の行末への移動ですが、"2$" は次の行末への移動、"3$" は 2 行下の行末への移動、となります。

"0" コマンドは回數指定できません。これは、"0" 自身が回數指定の一部になつてしまふからです。"^" に回數指定をした場合は單に無視されます。

文字への移動

特に便利な移動コマンドはいくつかありますが、一文字檢索コマンドもその 1 つです。コマンド "fx" はその行にある文字 ‘x’ を前方檢索します。(Hint: f は Find の意味です)。

例へば、次の文の先頭にカーソルがあり、 ‘human’ の ‘h’ に移動したいとします。"fh" コマンドを實行すると、‘h’ の上にカーソルが進みます。

To err is human.  To really foul up you need a computer.
---------->--------------->
    fh           fy

續いて、"fy" コマンドで ‘really’ の ‘y’ まで移動できます。これもカウンタ指定ができます。例へば次の文の ‘foul’ の ‘l’ に進むには "3fl" です。

To err is human.  To really foul up you need a computer.
          --------------------->
                   3fl

"F" コマンドで左向きに檢索できます。

To err is human.  To really foul up you need a computer.
          <---------------------
                    Fh

"tx" コマンドは "fx" コマンドに似た動きをしますが、檢索した文字の上ではなく、その直前で止まります。(Hint: t は To の意味です) このコマンドの逆方向版は "Tx" です。

To err is human.  To really foul up you need a computer.
           <------------  ------------->
                Th      tn

この 4 つのコマンドは ";" コマンドで繰り返せます。反對方向に繰り返すには "," コマンドです。このコマンドは、カーソルが他の行に移動することはありません。文が次行に續いてゐても移動しません。

檢索をしようとして、コマンドを打ち閒違ふこともあるでせう。例へば、逆方向檢索のつもりで ("F" と打つべきところを) "f" と打つてしまつたとしませう。コマンドの實行を取り止めるには <Esc> を押します。"f<Esc>" は <Esc> を探すのではなく、コマンドをキャンセルします。

Note:
<Esc> は檢索に限らず、ほとんどのコマンドをキャンセルするのに使へます。

カッコの對應

プログラムを書いてゐると、入れ子になつた ‘()’ を書くことがよくあります。そのやうな場合には、"%" コマンドがとても便利です。このコマンドを使ふと對應するカッコに移動できます。カーソルが ‘(’ の上なら對應する ‘)’ に、‘)’ の上なら對應する ‘(’ に移動できます。

            %
         <----->
if (a == (b * c) / d)
   <---------------->
            %

このコマンドは ‘[]’ や ‘{}’ のペアでも機能します。(これは ’matchpairs’ オプションで定義できます)

カーソルがカッコの上にない場合、"%" はまず前方檢索をしてカッコを探します。上記の例文で行頭にカーソルがあつた場合、"%" は前方檢索をして ‘(’ を見つけ、それから、對應するカッコ ‘)’ に移動します。

if (a == (b * c) / d)
---+---------------->
            %

特定の行への移動

C や C++ のプログラマであれば、次のやうなパターンのエラーメッセージはおなじみでせう。

prog.c:33: j   undeclared (first use in this function)

何か 33 行目に修正しないといけない點がありさうです。では、どうやつて 33 行目に移動しませうか? "9999k" などとしてファイルの先頭まで移動してから、"32j" で 32 行下に移動するやり方もあります。確かに目的は達しますが、あまりいい方法とは思へません。そこで "G" といふコマンドを使ひます。このコマンドにカウンタを指定すると、その行にジャンプできます。例へば、"33G" とすれば、33 行目にジャンプできます。(實はコンパイラのエラーリストを使つてもつと簡單に移動する方法もあります。|usr_30.txt| の ":make" コマンドをご覽ください。)

カウンタを指定しなかつた場合はファイルの最終行にジャンプします。ファイルの先頭にジャンプするには "gg" を使ひます。"1G" でも同じですが、ちよつと打ちにくいですから。

    |   first line of a file   ^
    |   text text text text    |
    |   text text text text    |  gg
7G  |   text text text text    |
    |   text text text text
    |   text text text text
    V   text text text text    |
        text text text text    |  G
        text text text text    |
        last line of a file    V

特定行に移動するもう 1 つの方法はカウンタ付きの "%" コマンドです。例へば、"50%" でファイルの眞ん中に移動できます。"90%" ならファイルのほぼ最後 (90% の場所) に移動します。

以上述べたのは、畫面上に見えてゐるかどうかに關係なくファイルの特定行に移動したい場合のコマンドでした。では畫面上に見えてゐる行に移動したい場合はどうしませうか?さういふ時に使へる 3 つのコマンドを下圖に示します。

        +---------------------------+
H -->   | text sample text          |
        | sample text               |
        | text sample text          |
        | sample text               |
M -->   | text sample text          |
        | sample text               |
        | text sample text          |
        | sample text               |
L -->   | text sample text          |
        +---------------------------+

(Hint: "H" は Home、"M" は Middle、"L" は Last の意味です)

現在の場所を表示

ファイル中の現在の場所を知るには、次の 3 つの方法があります。

  1. CTRL-G コマンド。次のやうなメッセージが表示されます。(’ruler’ オプションがオフの場合)
    "usr_03.txt" line 233 of 650 --35%-- col 45-52
    

    編輯中のファイル名、カーソルのある行番號、全體の行數、ファイル全體を通してのパーセント、カーソル桁位置、を表示します。場合によつては、カーソル桁位置が 2 つに分けて表示されます。

    例へば、‘col 2-9’ の場合、カーソルは 2 文字目にあります。2 文字のうち、1 文字がタブ文字で、8 文字分で表示されてゐるため、畫面上では 9 桁目にある、といふことです。

  2. number’ オプションを設定する。行頭に行番號が表示されるやうになります:
    :set number
    

    オプションをオフに戾すには:

    :set nonumber
    

    number’ は論理値オプションなので、オプション名の先頭に ‘no’ をつければオフにできます。論理値オプションにはオンかオフの 2 つの狀態しかありません。Vim には多數のオプションがあります。論理値オプションの他に、數値オプションと文字列オプションがあります。それらのオプションの設定方法はそのうち說明します。

  3. ruler’ オプションを設定する。現在のカーソル位置が、Vim ウィンドウの右下隅に表示されるやうになります:
    :set ruler
    

    ruler’ は表示に場所を取らないので、畫面を廣く使へます。

スクロール

"CTRL-U" コマンドで畫面の半分だけ下にスクロールします。窻を通してテキストを見てゐて、その窻を高さの半分だけ上に動かす、と考へてください。窻が上に動き、さっきより上の位置のテキストが表示されます。

どつちが上でどつちが下かわかりにくいかと思ひますが、氣にすることはありません。みんな同じやうに惱むことですから。"CTRL-D" コマンドは窻を半分だけ下げます。つまりテキストが畫面の半分だけ上にスクロールすることになります。

                               +----------------+
                               | some text      |
                               | some text      |
                               | some text      |
+---------------+              | some text      |
| some text     |  CTRL-U  --> |                |
|               |              | 123456         |
| 123456        |              +----------------+
| 7890          |
|               |              +----------------+
| example       |  CTRL-D -->  | 7890           |
+---------------+              |                |
                               | example        |
                               | example        |
                               | example        |
                               | example        |
                               +----------------+

1 行だけスクロールするには "CTRL-E" (スクロールアップ)と "CTRL-Y" (スクロールダウン) を使ひます。(MS-Windows 互換のキーマップをお使ひの場合、"CTRL-Y" はスクロールではなく、redo コマンドとなります)

1 畫面分スクロールするには "CTRL-F" を使ひます(2 行は重複します)。逆方向へのスクロールは "CTRL-B" コマンドを使ひます。"CTRL-F" は Forward、"CTRL-B" は Backward、ですから覺えやすいでせう。

"j" で何行も下に移動して、カーソルが畫面の最下段にあるとします。カーソル前後の行を表示したい場合は "zz" コマンドを使ひます。

+------------------+             +------------------+
| some text        |             | some text        |
| some text        |             | some text        |
| some text        |             | some text        |
| some text        |   zz  -->   | line with cursor |
| some text        |             | some text        |
| some text        |             | some text        |
| line with cursor |             | some text        |
+------------------+             +------------------+

"zt" コマンドでカーソル行を畫面の 1 行目として表示できます。"zb" コマンドなら畫面の最下段です。これ以外にもいくつかスクロールコマンドがあります。|Q_sc| を參照してください。カーソル近邊の數行を常に表示させたい場合は、’scrolloff’ オプションを使つてください。

簡單な檢索

文字列を檢索するには "/string" コマンドを使ひます。例へば、‘include’ といふ單語を探したいのであれば、次のやうに使ひます。

/include

/ を押すと、コマンドラインモードのときのやうに、カーソルが Vim ウィンドウの最下段に移動します。そこで檢索したい單語を入力します。入力した文字を訂正するには、バックスペースキー (左矢印 または <BS>) を使ひます。必要に應じて <Left><Right> の矢印キーを使つてください。<Enter> を押すとコマンドが實行されます。

Note:
文字のうち、‘.*[]^%/\?~$’ には特別な意味があります。檢索時にこれらを使ふ場合はその文字の直前に ‘\’ を置いてください。これは後 (|03.9| の最後)で述べます。

同じ文字列をもう一度探したい場合には "n" コマンドを使ひます。今のカーソル位置の後ろにある ‘#include’ を探すには次のコマンドを使ひます。

/#include

次に n を數回押すと、順々に ‘#include’ にジャンプします。移動したい場所が何個目かわかつてゐるなら、カウンタも使へます。例へば、"3n" なら 3 つ目の ‘#include’ を探します。"/" にはカウンタを指定できません。

"?" コマンドは "/" と同じですが、逆方向に檢索します。

?word

"N" コマンドは直前の檢索とは反對の方向に檢索を繰り返します。"/" の後で "N" を使ふと後方檢索になり、"?" の後で "N" を使ふと前方檢索になります。

大文字/小文字の無視

普通は探したい文字列の大文字/小文字を正確に指定しなければなりません。大文字と小文字を區別したくないのであれば、’ignorecase’ オプションを設定します。

:set ignorecase

これで、‘word’ を檢索すると、‘Word’ も ‘WORD’ もヒットします。大文字/小文字を區別するやうに戾すのは次のコマンドです。

:set noignorecase

ヒストリ(履歷)

次のやうな 3 つの檢索を行つたとします。

/one
/two
/three

さて、"/" だけを入力し、まだ <Enter> を押さないでください。<Up> (上矢印キー)を押すと、コマンド行に ‘/three’ と表示されます。ここで <Enter> を押すと、‘three’ が檢索されます。<Enter> を押さずに <Up> を押すとコマンド行には ‘/two’ と表示されます。さらに <Up> を押すと ‘/one’ となります。

同じやうに <Down> キーを使つて逆方向に檢索ヒストリを移動できます。

以前に使つたパターンを覺えてゐて、それをまた使ひたい場合には、そのパターンの先頭文字を入力してから <Up> を押してください。上の例で言へば、"/o<Up>" と入力すると、コマンドラインに ‘/one’ と表示されます。

":" で始まるコマンドにもヒストリがあります。以前のコマンドを呼び出して、再實行できます。檢索用ヒストリと ":" コマンドヒストリは分かれてゐます。

文章中の單語の檢索

TheLongFunctionName’ といふ單語が文章中にあり、次に現れる場所を探したいとします。もちろん、"/TheLongFunctionName" として檢索もできますが、たくさんの打鍵が必要です。それに、打ち閒違へてしまふとうまく檢索できません。

もつと簡單な方法があります。探したい單語の上にカーソルを置いて、"*" コマンドを使ふのです。カーソル位置の單語が拔き出され、それが檢索文字列として使はれます。

"#" コマンドは同じことを逆方向に實行します。このコマンドもカウンタが指定できます。例へば、"3*" はカーソル位置の單語が 3 囘目に現はれる場所を探します。

單語全體を一致させる檢索

"/the" と檢索を行ふと、‘there’ などもヒットします。‘the’ で終はる單語だけを探したい場合には次のやうにします。

/the\>

\>’ といふのは特別なマーカーで、單語がここで終はつてゐる時だけヒットします。同じやうに ‘\<’ は單語の始まりにだけヒットします。つまり、‘the’ といふ單語だけを探したい場合は、次のやうにします。

/\<the\>

これだと、‘there’ とか ‘soothe’ にはヒットしません。なほ、"*" と "#" コマンドは上の「單語の先頭」と「單語の末尾」マーカーを使つて、完全に一致する單語だけを探します。(單語の一部として檢索したい時は "g*" と "g#" コマンドを使ひます)

檢索結果の强調表示

プログラムの編輯中に、‘nr’ といふ變數を見つけ、その變數がどこで使はれてゐるかを知りたいとします。‘nr’ の上にカーソルを移動して、"*" と "n" コマンドで片つ端から探すのもいいですが、他にも方法があります。次のコマンドを入力してください。

:set hlsearch

nr’ を檢索すると、ヒットした全てのパターンが强調表示されます。これなら餘計なコマンド入力が必要ないので、變數の使用箇所を確認したいときには便利です。このオプションは次のコマンドでオフにできます。

:set nohlsearch

さて上のやり方では、檢索を行ふたびに、いちいちオプションの切替へが必要になります。單に强調表示を止めるだけなら、次のコマンドを使つてください。

:nohlsearch

これならオプションはオフになりません。强調表示だけを取り消せます。次に檢索コマンドを實行すると、再び强調表示されます。"n" や "N" を使つたときも同樣です。

檢索のチューニング

檢索の擧動を變更するオプションがいくつかあります。重要なのは次のものです:

:set incsearch

これはいはゆるインクリメンタルサーチです。檢索したい文字を入力してゐる閒にもヒットする文字列を探して畫面に表示してくれます。これはヒットするパターンがあるかどうかのチェックに使へます。<Enter> を押すと實際にその場所にカーソルがジャンプします。

:set nowrapscan

ファイルの末尾まで進んだら(後方檢索の場合はファイルの先頭まで戾つたら)檢索を停止します。’wrapscan’ オプションの初期設定はオンです。オンの場合は、ファイルの末尾まで進んだら先頭に戾つて檢索を續けます。

ところで...

これまでに出てきたオプションを每囘設定したい場合は、スタートアップファイルにそのコマンドを書いてください。|not-compatible| の說明のとほりにファイルを編輯するか、次のコマンドを入力して、ファイルがどこにあるか確認してください。

:scriptnames

ファイルを編輯するには、例へば次のやうにします。

:edit ~/.vimrc

そして、オプションを設定するために Vim 上で實行したのと同じコマンドを書き加へます。例へば、次のやうにします。

Go:set hlsearch<Esc>

"G" でファイルの末尾まで移動し、"o" で新しい行を插入して ":set" コマンドを書くための空行を作つてゐます。插入モードの終了は <Esc> です。そして、ファイルを保存しませう。

ZZ

次に Vim を起動すると、’hlsearch’ オプションが最初からオンになつてゐます。

簡單なパターン檢索

Vim では、檢索に正規表現 (regular expressions) を使ひます。正規表現といふのは檢索パターンを指定するための、極めてパワフルでシンプルな方法です。殘念ながら、これの實力を發揮させるには少々苦勞していただくことになります。

といふのも、正規表現はちよつとばかりトリッキーなんです。ここでは本當に基本的なものだけを述べます。パターン檢索とコマンドについては 27 章 |usr_27.txt| でもつと詳しく說明します。完全な說明は |pattern| にあります。

行頭と行末

^’ は行頭を示します。英語 (ASCII) キーボードでは 6 のキーに、日本語 (JIS) キーボードでは 0 のキーの 2 つ右側に刻印してあります。例へば、"include" といふパターンは 行のどこかに ‘include’ といふ單語を含んでゐれば、ヒットします。一方、"^include" は行頭にある ‘include’ にだけマッチします。

"‘$’" は同樣に行末にヒットします。ですから、パターン "was$" は、行末が ‘was’ で終はつてゐる場合だけヒットします。

下の例では、‘/the’ にマッチする箇所を ‘xxx’ で示してゐます。

the solder holding one of the chips melted and the
xxx                       xxx                  xxx

"/the$" の場合は次のやうになります。

the solder holding one of the chips melted and the
                                               xxx

"/^the" の場合はかうです。

the solder holding one of the chips melted and the
xxx

"/^the$" といふ指定もできます。この指定だと、‘the’ といふ單語だけの行にヒットします。なほ空白文字も意味を持ちます。ですから、‘the ’ のやうに行末に空白文字を含んでゐた場合は、"/the$" のパターンではヒットしません。

任意の 1 文字

"." はあらゆる文字にヒットします。例へば、"c.m" は最初が ‘c’ で始まり、2 文字目は何でも良くて、3 文字目が ‘m’ であるパターンにヒットします。例を示します。

We use a computer that became the cummin winter.
         xxx             xxx      xxx

特殊文字

例へば ‘.’ といふ文字自體を探す時は、上で述べたやうな特殊な意味を ‘\’ 文字を使つて無效にします。

"‘ter.’" といふパターンで檢索をすると、次の ‘xxx’ の箇所でヒットします。

We use a computer that became the cummin winter.
              xxxx                          xxxx

これを ‘ter\.’ で檢索すると、上圖の 2 つ目だけがヒットします。

マークの使用

"G" コマンドでジャンプすると、その直前のカーソル位置が記錄されます。これをマークと呼びます。元の場所に戾るには、次のコマンドを使ひます。

``

この ‘`’ は backtick とか open single-quote と呼ばれる (譯注: 日本では「バッククォート」が多いでせうか)ものです。このコマンドを 2 回實行すると、元の場所に戾ります。これは "`" コマンドもジャンプコマンドなので、實行前の場所が記錄されるためです。

通常、現在行以外にカーソルが動くやうなコマンドを實行した場合、それをジャンプと呼びます。"/" や "n" もジャンプの一種です(ジャンプ先がどれだけ離れてゐるかは關係ありません)。逆に、文字檢索である "fx" や "tx"、單語移動である "w" や "e" はジャンプではありません。

"j" や "k" はカウンタを指定すればカーソルをはるか彼方に移動できますが、これもジャンプ扱ひではありません。

"``" コマンドは 2 個所の閒を交互にジャンプします。CTRL-O コマンドはより古いマーク(Hint: O は Older の意味です)にジャンプします。CTRL-I はより新しいマーク(Hint: I キーは O キーのすぐ左隣りです)にジャンプします。次のコマンドを例にしませう。

33G
/^The
CTRL-O

まず 33 行目にジャンプします。次に ‘The’ で始まる行を探します。ここで CTRL-O を使ふと、33 行目に戾ります。もう一度 CTRL-O を使ふと、最初の場所に戾ります。そして、CTRL-I を使ふと 33 行目にジャンプし、さらに CTRL-I を使ふと行頭が ‘The’ で始まる行にジャンプします。

      |  example text   ^             |
 33G  |  example text   |  CTRL-O     | CTRL-I
      |  example text   |             |
      V  line 33 text   ^             V
      |  example text   |             |
/^The |  example text   |  CTRL-O     | CTRL-I
      V  There you are  |             V
         example text

Note:
CTRL-I<Tab> キーと同じです。

":jumps" コマンドで今までにジャンプした場所の一覽を表示できます。最後に使つたエントリには "‘>’" 記號がついてゐます。

名前付きマーク

文章中にマークを付けることができます。"ma" コマンドで現在のカーソル位置をマーク a に記錄します。文章には 26 個 (aからzまで) のマークを付けられます。マークは Vim が記錄してゐる位置情報です。畫面に何かが表示されるわけではありません。

マークへの移動は "`{mark}" コマンドを使ひます。‘{mark}’ はマーク文字のことです。マーク a に移動するには次のやうにします。

`a

"'{mark}" (アポストロフィ + マーク名)コマンドで ‘{mark}’ を設定してある行の行頭に移動できます。"`{mark}" の場合は ‘{mark}’ を設定した桁位置に移動します。

マーク機能はファイル中の關聯してゐる 2 箇所で作業をする場合に便利です。例へば、ファイルの最後の方を編輯してゐる時に、ファイルの最初の方の內容を確認する必要が生じた場合を考へてみませう。

まずファイルの最初の方に移動して、マーク s (startのつもり) を付けます。

ms

次に編輯したい場所に移動して、マーク e (endのつもり) を付けます。

me

これで自由に行き來ができます。ファイルの先頭に移動したい時は、次のコマンドでジャンプできます。

's

ここで、"''" を使つて戾ることもできますし、"'e" を使つて末尾のマークまでジャンプすることもできます。

先頭にマーク s を、末尾にマーク e を使ひましたが、その名前に特別な意味はありません。單に覺えやすいから使つただけです。

次のコマンドは設定してあるマークの一覽を表示します。

:marks

この一覽には次のやうな特殊なマークも表示されます。

ジャンプする直前のカーソル位置
"直前にファイルを編輯した時のカーソル位置
[直前の變更の開始位置
]直前の變更の終了位置

Next: , Previous: , Up: 目次   [Index]