1 *usr_03.txt* For Vim バージョン 7.2. Last change: 2006 Jun 21
3 VIM USER MANUAL - by Bram Moolenaar
8 文の入力したり削除したりするには、カーソルを目的の場所に動かさなくてはなりませ
9 ん。Vim にはカーソル移動のためのコマンドがたくさんあります。本章では、その中で
10 も重要なコマンドの使い方を述べます。コマンドの一覧は |Q_lr| を参照してくださ
24 次章: |usr_04.txt| 簡単な編集
25 前章: |usr_02.txt| 初めての Vim
28 ==============================================================================
31 カーソルを 1 単語先に進めるには、"w"コマンドを使います。他の Vim コマンドもそ
32 うですが、複数の単語を一気に進めるために数値 (カウンタ) による回数指定ができま
33 す。例えば、"3w"では 3 単語進みます。図で示すと次のようになります。
35 This is a line with example text ~
36 --->-->->----------------->
39 "w" で次の単語の先頭に移動します。既にカーソルが単語の先頭にある場合は、その次
41 逆に "b" コマンドで直前の単語の先頭に戻ります。
43 This is a line with example text ~
44 <----<--<-<---------<---
47 "e" コマンドで次の単語の末尾に移動します。"ge" で直前の単語の末尾に移動します。
49 This is a line with example text ~
53 カーソルが行末の単語にある場合、"w" コマンドは次の行の最初の単語に進みます。こ
54 れを使うと "l" よりもずっと速く文章の中を動けます。"b" は "w" の逆方向に同じ
57 単語は"."や"-"、")"といったアルファベット以外の文字で区切られます。Vimが何を単
58 語とみなすかは、'iskeyword'オプションの設定で変更できます。
59 空白を区切りとした単語(WORD)を移動することもできます。これは普段意識する単語
60 (word)とは若干違うため、大文字を使っています。WORD単位で動くコマンドは全部大
65 This is-a line, with special/separated/words (and some more). ~
66 <----- <----- --------------------> ----->
69 小文字と大文字のコマンドを両方使うと、文章中をより素早く動けるようになります。
71 ==============================================================================
74 "$"コマンドでカーソルを行末に移動します。キーボードに<End>キーがあれば、それも
77 "^"コマンドでカーソルを行頭から最初の非空白文字に移動します。"0"(数字のゼロ)コ
78 マンドは行頭に移動します。<Home>キーも同じです。図で示しましょう。
82 .....This is a line with example text ~
83 <----------------- --------------->
86 ("....." は空白文字があることを示します)
88 "$"コマンドでも他の移動コマンドのようにカウンタの指定ができます。行末への移動
89 を何度やっても意味がありませんので、"$"コマンドでのカウンタは他の行の行末への
90 移動の意味になります。例えば、"1$"は"$"と同じで現在行の行末への移動ですが、
91 "2$"は次の行末への移動、"3$"は 2 行下の行末への移動、となります。
92 "0"コマンドは回数指定できません。これは、"0"自身が回数指定の一部になってしまう
93 からです。"^"に回数指定をした場合は単に無視されます。
95 ==============================================================================
98 特に便利な移動コマンドはいくつかありますが、一文字検索コマンドもその一つです。
99 コマンド "fx" はその行にある文字 x を前方検索します。(f は Find の意味です)。
100 例えば、次の文の先頭にカーソルがあり、 human の h に移動したいとします。"fh"コ
101 マンドを実行すると、'h'の上にカーソルが進みます。
103 To err is human. To really foul up you need a computer. ~
104 ---------->--------------->
107 続いて、"fy"コマンドで really の y まで移動できます。
108 これもカウンタ指定ができます。例えば次の文の foul の l に進むには "3fl" です。
110 To err is human. To really foul up you need a computer. ~
111 --------------------->
116 To err is human. To really foul up you need a computer. ~
117 <---------------------
120 "tx"コマンドは"fx"コマンドに似た動きをしますが、検索した文字の上ではなく、その
124 To err is human. To really foul up you need a computer. ~
125 <------------ ------------->
128 この 4 つのコマンドは ";" コマンドで繰り返せます。反対方向に繰り返すには ","
129 コマンドです。このコマンドは、カーソルが他の行に移動することはありません。文が
132 検索をしようとして、コマンドを打ち間違うこともあるでしょう。例えば、逆方向検索
133 のつもりで("F"と打つべきところを)"f"と打ってしまったとしましょう。コマンドの実
134 行を取り止めるには<Esc>を押します。"f<Esc>"は<Esc>を探すのではなく、コマンドを
135 キャンセルします。Note:<Esc>は検索に限らず、ほとんどのコマンドをキャンセルする
138 ==============================================================================
141 プログラムを書いていると、入れ子になった () を書くことがよくあります。そのよう
142 な場合には、"%" コマンドがとても便利です。このコマンドを使うと対応するカッコに
143 移動できます。カーソルが "(" の上なら対応する ")" に、")" の上なら対応する "("
148 if (a == (b * c) / d) ~
152 このコマンドは [] や {} のペアでも機能します。(これは'matchpairs'オプションで
155 カーソルがカッコの上にない場合、"%"はまず前方検索をしてカッコを探します。上記
156 の例文で行頭にカーソルがあった場合、"%" は前方検索をして "(" を見つけ、それか
157 ら、対応するカッコ ")" に移動します。
159 if (a == (b * c) / d) ~
160 ---+---------------->
163 ==============================================================================
166 CやC++のプログラマであれば、次のようなパターンのエラーメッセージはおなじみで
169 prog.c:33: j undeclared (first use in this function) ~
171 何か33行目に修正しないといけない点がありそうです。では、どうやって33行目に移動
172 しましょうか?"9999k"などとしてファイルの先頭まで移動してから、"32j"で32行下に
173 移動するやり方もあります。確かに目的は達しますが、あまりいい方法とは思えませ
174 ん。そこで"G"というコマンドを使います。このコマンドにカウンタを指定すると、そ
175 の行にジャンプできます。例えば、"33G"とすれば、33行目にジャンプできます。(実は
176 コンパイラのエラーリストを使ってもっと簡単に移動する方法もあります。
177 |usr_30.txt| の":make"コマンドをご覧ください。)
178 カウンタを指定しなかった場合はファイルの最終行にジャンプします。ファイルの先頭
179 にジャンプするには"gg"を使います。"1G"でも同じですが、ちょっと打ちにくいですか
182 | first line of a file ^
183 | text text text text |
184 | text text text text | gg
185 7G | text text text text |
186 | text text text text
187 | text text text text
188 V text text text text |
189 text text text text | G
190 text text text text |
191 last line of a file V
193 特定行に移動するもう一つの方法はカウンタ付きの"%"コマンドです。例えば、"50%"
194 でファイルの真ん中に移動できます。"90%"ならファイルのほぼ最後(90%の場所) に移
197 以上述べたのは、画面上に見えているかどうかに関係なくファイルの特定行に移動した
198 い場合のコマンドでした。では画面上に見えている行に移動したい場合はどうしましょ
199 うか?そういう時に使える 3 つのコマンドを下図に示します。
201 +---------------------------+
202 H --> | text sample text |
206 M --> | text sample text |
210 L --> | text sample text |
211 +---------------------------+
213 ("H"はHome、"M"はMiddle、"L"はLastの意味です)
215 ==============================================================================
218 ファイル中の現在の場所を知るには、次の 3 つの方法があります。
220 1. CTRL-Gコマンド。次のようなメッセージが表示されます。('ruler'オプション
223 "usr_03.txt" line 233 of 650 --35%-- col 45-52 ~
225 編集中のファイル名、カーソルのある行番号、全体の行数、ファイル全体を
226 通してのパーセント、カーソル桁位置、を表示します。
227 場合によっては、カーソル桁位置が 2 つに分けて表示されます。例えば、
228 "col 2-9" の場合、カーソルは 2 文字目にあります。2 文字のうち、1 文字がタ
229 ブ文字で、8 文字分で表示されているため、画面上では 9 桁目にある、というこ
232 2. 'number'オプションを設定する。行頭に行番号が表示されるようになります: >
240 'number'は論理値オプションなので、オプション名の先頭に"no"をつければオフに
241 できます。論理値オプションにはオンかオフの 2 つの状態しかありません。
242 Vimには多数のオプションがあります。論理値オプションの他に、数値オプション
243 と文字列オプションがあります。それらのオプションの設定方法はそのうち説明し
246 3. 'ruler'オプションを設定する。現在のカーソル位置が、Vimウィンドウの右下隅に
251 'ruler' は表示に場所を取らないので、画面を広く使えます。
253 ==============================================================================
256 CTRL-U コマンドで画面の半分だけ下にスクロールします。窓を通してテキストを見て
257 いて、その窓を高さの半分だけ上に動かす、と考えてください。窓が上に動き、さっき
258 より上の位置のテキストが表示されます。どっちが上でどっちが下かわかりにくいかと
259 思いますが、気にすることはありません。みんな同じように悩むことですから。
260 CTRL-Dコマンドは窓を半分だけ下げます。つまりテキストが画面の半分だけスクロール
267 +---------------+ | some text |
268 | some text | CTRL-U --> | |
270 | 123456 | +----------------+
272 | | +----------------+
273 | example | CTRL-D --> | 7890 |
274 +---------------+ | |
281 1 行だけスクロールするにはCTRL-E(スクロールアップ)とCTRL-Y(スクロールダウン)
282 を使います。(MS-Windows互換のキーマップをお使いの場合、CTRL-Yはスクロールでは
285 1 画面分スクロールするにはCTRL-Fを使います(2行は重複します)。逆方向へのスク
286 ロールはCTRL-Bコマンドを使います。CTRL-FはForward、CTRL-BはBackward、ですから
289 "j" で何行も下に移動して、カーソルが画面の最下段にあるとします。カーソル前後の
290 行を表示したい場合は "zz" コマンドを使います。
292 +------------------+ +------------------+
293 | some text | | some text |
294 | some text | | some text |
295 | some text | | some text |
296 | some text | zz --> | line with cursor |
297 | some text | | some text |
298 | some text | | some text |
299 | line with cursor | | some text |
300 +------------------+ +------------------+
302 "zt" コマンドでカーソル行を画面の 1 行目として表示できます。"zb" コマンドなら
303 画面の最下段です。これ以外にもいくつかスクロールコマンドがあります。|Q_sc|を参
304 照してください。カーソル近辺の数行を常に表示させたい場合は、'scrolloff'オプショ
307 ==============================================================================
310 文字列を検索するには"/string"コマンドを使います。例えば、"include"という単語
311 を探したいのであれば、次のように使います。 >
315 "/"を押すと、コマンドラインモードのときのように、カーソルがVimウィンドウの最下
316 段に移動します。そこで検索したい単語を入力します。入力した文字を訂正するには、
317 バックスペースキー (左矢印 または <BS>) を使います。必要に応じて<Left>や
318 <Right>の矢印キーを使ってください。
319 <Enter>を押すとコマンドが実行されます。
322 文字のうち、 .*[]^%/\?~$ には特別な意味があります。検索時にこれらを
323 使う場合はその文字の直前に \ を置いてください。これは後(|03.9|の
326 同じ文字列をもう一度探したい場合には"n"コマンドを使います。今のカーソル位置
327 の後ろにある#includeを探すには次のコマンドを使います。 >
331 次に"n"を数回押すと、順々に #include にジャンプします。移動したい場所が何個目
332 かわかっているなら、カウンタも使えます。例えば、"3n"なら 3 つ目の #include を
333 探します。"/" にはカウンタを指定できません。
335 "?"コマンドは"/"と同じですが、逆方向に検索します。 >
339 "N"コマンドは直前の検索とは反対の方向に検索を繰り返します。"/"の後で"N"を使う
340 と後方検索になり、"?"の後で"N"を使うと前方検索になります。
346 普通は探したい文字列の大文字/小文字を正確に指定しなければなりません。大文字と
347 小文字を区別したくないのであれば、'ignorecase'オプションを設定します。 >
351 これで、"word"を検索すると、"Word"も"WORD"もヒットします。大文字/小文字を区
352 別するように戻すのは次のコマンドです。 >
360 次のような3つの検索を行ったとします。 >
366 さて、"/" だけを入力し、まだ <Enter> を押さないでください。<Up>(上矢印キー)
367 を押すと、コマンド行に /three と表示されます。ここで <Enter> を押すと、
368 "three"が検索されます。<Enter>を押さずに<Up>を押すとコマンド行には"/two"と表示
369 されます。さらに<Up>を押すと"/one"となります。
370 同じように<Down>キーを使って逆方向に検索ヒストリを移動できます。
372 以前に使ったパターンを覚えていて、それをまた使いたい場合には、そのパターンの先
373 頭文字を入力してから <Up> を押してください。上の例で言えば、"/o<Up>"と入力する
374 と、コマンドラインに"/one"と表示されます。
376 ":"で始まるコマンドにもヒストリがあります。以前のコマンドを呼び出して、再実行
377 できます。検索用ヒストリと":"コマンドヒストリは分かれています。
383 "TheLongFunctionName" という単語が文章中にあり、次に現れる場所を探したいと
384 します。もちろん、"/TheLongFunctionName"として検索もできますが、たくさんの打鍵
385 が必要です。それに、打ち間違えてしまうとうまく検索できません。
386 もっと簡単な方法があります。探したい単語の上にカーソルを置いて、"*"コマンドを
387 使うのです。カーソル位置の単語が抜き出され、それが検索文字列として使われます。
388 "#"コマンドは同じことを逆方向に実行します。このコマンドもカウンタが指定でき
389 ます。例えば、"3*"はカーソル位置の単語が 3 回目に現われる場所を探します。
393 ------------------------
395 "/the"と検索を行うと、"there"などもヒットします。"the"で終わる単語だけを探
400 "\>"というのは特別なマーカで、単語がここで終わっている時だけヒットします。
401 同じように"\<"は単語がここで始まっている時にだけヒットします。つまり、"the"
402 という単語だけを探したい場合は、次のようにします。 >
406 これだと、"there"とか"soothe"にはヒットしません。なお、"*"と"#"コマンドは
407 上の「単語の先頭」と「単語の末尾」マーカを使って、完全に一致する単語だけを
408 探します。(単語の一部として検索したい時は"g*"と"g#"コマンドを使います)
414 プログラムの編集中に、"nr"という変数を見つけ、その変数がどこで使われているか
415 を知りたいとします。"nr"の上にカーソルを移動して、"*"と"n"コマンドで片っ端
416 から探すのもいいですが、他にも方法があります。次のコマンドを入力してください。 >
420 "nr"を検索すると、ヒットした全てのパターンが強調表示されます。これなら余計なコ
421 マンド入力が必要ないので、変数の使用箇所を確認したいときには便利です。
422 このオプションは次のコマンドでオフにできます。 >
426 さて上のやり方では、検索を行うたびに、いちいちオプションの切替えが必要になりま
427 す。単に強調表示を止めるだけなら、次のコマンドを使ってください。 >
431 これならオプションはオフになりません。強調表示だけを取り消せます。次に検索コマ
432 ンドを実行すると、ふたたび強調表示されます。"n"や"N"を使ったときも同様です。
438 検索の挙動を変更するオプションがいくつかあります。重要なのは次のものです: >
442 これはいわゆるインクリメンタルサーチです。検索したい文字を入力している間にも
443 ヒットする文字列を探して画面に表示してくれます。これはヒットするパターンがある
444 かどうかのチェックに使えます。<Enter>を押すと実際にその場所にカーソルがジャン
449 ファイルの末尾まで進んだら(後方検索の場合はファイルの先頭まで戻ったら)検索を停
450 止します。'wrapscan'オプションの初期設定はオンです。オンの場合は、ファイルの末
451 尾まで進んだら先頭に戻って検索を続けます。
457 これまでに出てきたオプションを毎回設定したい場合は、スタートアップファイルにそ
459 |not-compatible|の説明のとおりにファイルを編集するか、次のコマンドを入力して、
460 ファイルがどこにあるか確認してください。 >
464 ファイルを編集するには、例えば次のようにします。 >
468 そして、オプションを設定するためにVim上で実行したのと同じコマンドを書き加えま
473 "G" でファイルの末尾まで移動し、"o" で新しい行を挿入して ":set" コマンドを書く
474 ための空行を作っています。挿入モードの終了は<Esc>です。そして、ファイルを保存
479 次にVimを起動すると、'hlsearch'オプションが最初からオンになっています。
481 ==============================================================================
484 Vimでは、検索に正規表現(regular expressions)を使います。
485 正規表現というのは検索パターンを指定するための、極めてパワフルでシンプルな方法
486 です。残念ながら、これの実力を発揮させるには少々苦労していただくことになりま
487 す。というのも、正規表現はちょっとばかりトリッキーなんです。
488 ここでは本当に基本的なものだけを述べます。パターン検索とコマンドについては
489 27章|usr_27.txt|でもっと詳しく説明します。完全な説明は|pattern|にあります。
495 "^"は行頭を示します。英語(ASCII)キーボードでは 6 のキーに、日本語(JIS)キーボー
496 ドでは 0 のキーの 2 つ右側に刻印してあります。
497 例えば、"include"というパターンは 行のどこかに include という単語を含んでいれ
498 ば、ヒットします。一方、"^include" は行頭にある include にだけマッチします。
499 "$"は同様に行末にヒットします。ですから、パターン"was$" は、行末が was で終
502 下の例では、"the"にマッチする箇所を"xxx"で示しています。
504 the solder holding one of the chips melted and the ~
507 "/the$"の場合は次のようになります。
509 the solder holding one of the chips melted and the ~
514 the solder holding one of the chips melted and the ~
517 "/^the$"という指定もできます。この指定だと、"the"という単語だけの行にヒット
518 します。なお空白文字も意味を持ちます。ですから、"the "のように行末に空白文
519 字を含んでいた場合は、"/the$"のパターンではヒットしません。
525 "." はあらゆる文字にヒットします。例えば、"c.m"は最初が"c"で始まり、2 文字目は
526 何でも良くて、3 文字目が"m"であるパターンにヒットします。例を示します。
528 We use a computer that became the cummin winter. ~
535 例えば"."という文字自体を探す時は、上で述べたような特殊な意味を"\"文字を
537 "ter."というパターンで検索をすると、次の"xxx"の箇所でヒットします。
539 We use a computer that became the cummin winter. ~
542 これを"ter\."で検索すると、上図の 2 つ目だけがヒットします。
544 ==============================================================================
547 "G"コマンドでジャンプすると、その直前のカーソル位置が記録されます。これをマー
548 クと呼びます。元の場所に戻るには、次のコマンドを使います。 >
552 この ` は backtick とか open single-quote と呼ばれる(日本では「バッククオート」
554 このコマンドを 2 回実行すると、元の場所に戻ります。これは ` コマンドもジャンプ
555 コマンドなので、実行前の場所が記録されるためです。
557 通常、現在行以外にカーソルが動くようなコマンドを実行した場合、それをジャンプ
558 と呼びます。"/"や"n"もジャンプの一種です(ジャンプ先がどれだけ離れているかは
559 関係ありません)。逆に、文字検索である"fx"や"tx"、単語移動である"w"や"e"は
561 "j"や"k"はカウンタを指定すればカーソルをはるか彼方に移動できますが、これも
564 ``コマンドは 2 個所の間を交互にジャンプします。CTRL-Oコマンドはより古いマーク
565 (O は Older の意味です)にジャンプします。CTRL-Iはより新しいマーク("I"キーは
566 "O"キーのすぐ左隣りです)にジャンプします。次のコマンドを例にしましょう。 >
572 まず33行目にジャンプします。次に"The"で始まる行を探します。ここでCTRL-Oを使う
573 と、33行目に戻ります。もう一度CTRL-Oを使うと、最初の場所に戻ります。そして、
574 CTRL-Iを使うと33行目にジャンプし、さらにCTRL-Iを使うと行頭が"The"で始まる行に
578 33G | example text | CTRL-O | CTRL-I
582 /^The | example text | CTRL-O | CTRL-I
589 ":jumps"コマンドで今までにジャンプした場所の一覧を表示できます。最後に使ったエ
596 文章中にマークを付けることができます。"ma"コマンドで現在のカーソル位置をマーク
597 a に記録します。文章には 26 個 (aからzまで) のマークを付けられます。マークは
598 Vim が記録している位置情報です。画面に何かが表示されるわけではありません。
599 マークへの移動は `{mark} コマンドを使います。{mark}はマーク文字のことです。
600 マーク a に移動するには次のようにします。
604 '{mark}(アポストロフィ + マーク名)コマンドで{mark}を設定してある行の行頭に移動
605 できます。`{mark}の場合は{mark}を設定した桁位置に移動します。
607 マーク機能はファイル中の関連している 2 箇所で作業をする場合に便利です。例えば、
608 ファイルの最後の方を編集している時に、ファイルの最初の方の内容を確認する必要が
610 まずファイルの最初の方に移動して、マーク s (startのつもり) を付けます。 >
614 次に編集したい場所に移動して、マーク e (endのつもり) を付けます。 >
618 これで自由に行き来ができます。ファイルの先頭に移動したい時は、次のコマンドで
623 ここで、 '' を使って戻ることもできますし、 'e を使って末尾のマークまでジャン
625 先頭にマーク s を、末尾にマーク e を使いましたが、その名前に特別な意味はありま
628 次のコマンドは設定してあるマークの一覧を表示します。 >
632 この一覧には次のような特殊なマークも表示されます。
635 " 直前にファイルを編集した時のカーソル位置
639 ==============================================================================
641 次章: |usr_04.txt| 簡単な編集
643 Copyright: see |manual-copyright| vim:tw=78:ts=8:ft=help:norl: