Merge branch 'KaoriYa'
[MacVim/KaoriYa.git] / runtime / doc / usr_10.jax
blob42e1ddbb5a3bddb7299f1ee054272bf2ce12b9b6
1 *usr_10.txt*    For Vim バージョン 7.2.  Last change: 2006 Nov 05
3                      VIM USER MANUAL - by Bram Moolenaar
5                                  大規模な編集
8 四章では、小さな変更を加える方法について説明しました。この章では、同じ操作を再
9 実行する方法や、広範囲のテキストを変更する方法を説明します。ビジュアルモードで
10 は選択範囲にさまざまな処理を実行できます。外部プログラムを使えばとても複雑な処
11 理もできます。
13 |10.1|  操作の記録と再実行
14 |10.2|  置換
15 |10.3|  コマンドの範囲指定
16 |10.4|  global コマンド
17 |10.5|  矩形選択
18 |10.6|  ファイルの一部の保存と読み込み
19 |10.7|  テキストの整形
20 |10.8|  大文字/小文字の変換
21 |10.9|  外部プログラムを使う
23 次章: |usr_11.txt|  クラッシュからの復帰
24 前章: |usr_09.txt|  GUI を使う
25 目次: |usr_toc.txt|
27 ==============================================================================
28 *10.1*  操作の記録と再実行
30 "." コマンドを使えば直前の変更を繰り返せますが、複数のコマンドを組み合わせた、
31 もっと複雑な操作を繰り返すにはどうすればいいでしょうか。それには記録コマンドを
32 使います。次の手順で記録できます:
34 1. "q{register}" コマンドを実行する。指定したレジスタ {register} へのキー入力
35    の記録が開始されます。レジスタ名は a から z のいずれかです。
36 2. コマンドを入力して編集する。
37 3. q を押して記録を終了する  (レジスタの指定は必要ない)。
39 記録したマクロは "@{register}" コマンドで実行できます。
41 このコマンドの使い方を練習してみましょう。次のようなファイル名の一覧がありま
42 す:
44         stdio.h ~
45         fcntl.h ~
46         unistd.h ~
47         stdlib.h ~
49 これを次のように変更します:
51         #include "stdio.h" ~
52         #include "fcntl.h" ~
53         #include "unistd.h" ~
54         #include "stdlib.h" ~
56 まず、一行目の行頭に移動してください。そして次のコマンドを実行します。
58         qa                      レジスタ a へのマクロの記録を開始。
59         ^                       行頭に移動。
60         i#include "<Esc>        行頭に #include " を挿入。
61         $                       行末に移動。
62         a"<Esc>                 行末に引用符 (") を追加。
63         j                       次の行に移動。
64         q                       マクロの記録を終了。
66 さて、一回分の作業はこれで終りました。"@a" コマンドを使って変更を繰り返してみ
67 てください。
68 "@a" コマンドには繰り返し回数を指定できます。三回繰り返すには、次のようにしま
69 す: >
71         3@a
74 移動と実行
75 ----------
77 変更したい行がいろんな場所に分散している場合は、それぞれの場所に移動してから
78 "@a" コマンドを使います。一度でも再実行すると、次からは "@@" で同じマクロを再
79 実行できます。"@@" の方が少しだけ入力が簡単です。例えば、"@b" でレジスタ b を
80 実行すると、次に "@@" を実行したときはレジスタ b が使われます。
81 マクロの実行と "." にはいくつか違いがあります。まず第一に、"." は一つの変更し
82 か繰り返せません。上述の例のように、"@a" では複数の変更やカーソルの移動も繰り
83 返せます。第二に、"." は直前の変更しか繰り返せません。レジスタを実行する方法な
84 ら、他の変更を加えた後でも、"@a" を使って、記録されたコマンドを繰り返せます。
85 最後に、レジスタは 26 個あります。つまり、26 個のコマンド操作を記録しておける
86 のです。
89 レジスタを使う
90 --------------
92 記録に用いるレジスタはヤンクや削除で使っているのと同じものです。そのため、レジ
93 スタを操作して、記録されたコマンドと他のコマンドを合成することができます。
94 レジスタ n にいくつかのコマンドが記録されているとします。ところが、"@n" で実行
95 してみると、ミスがあることに気付きました。最初から記録をやり直すこともできます
96 が、また何か間違えてしまうかもしれません。代わりに、次のようなテクニックを使っ
97 てみましょう。
99         G                       ファイルの最後にジャンプ。
100         o<Esc>                  空行を作成。
101         "np                     レジスタ n の内容をプット。記録されたコマンド
102                                 がテキストとして表示されます。
103         {edits}                 間違っている部分を修正。普通にテキストを編集す
104                                 るのと同じです。
105         0                       行頭に移動。
106         "ny$                    修正したコマンドをレジスタ n にヤンク
107         dd                      不要になった最終行を削除
109 さて、"@n" で正しいコマンドが実行されるようになりました。(記録されたコマンドに
110 改行が含まれている場合は、上記の最後の二項目はその全内容が含まれるようにしてく
111 ださい)
114 レジスタに追記
115 --------------
117 これまで、レジスタ名には小文字を使ってきました。レジスタに追記するには大文字を
118 使います。
119 単語を変更するためのコマンドがレジスタ c に記録されているとします。これは正し
120 く動作するのですが、変更すべき次の単語を検索する処理を追加したくなりました。次
121 のようにすればできます: >
123         qC/word<Enter>q
125 レジスタ c に追記するために "qC" で記録を開始しています。レジスタ名を大文字で
126 書くと、同じレジスタに追記するという意味になるのです。
128 これは記録コマンドだけでなく、ヤンクや削除コマンドでも同じです。例えば、いくつ
129 かの行をレジスタ a に集めたいとします。最初の行を次のコマンドでヤンクしましょ
130 う: >
132         "aY
134 次の行に移動し、このように入力します: >
136         "AY
138 これを全ての行で実行します。レジスタ a にはヤンクした順にすべての行が保存され
139 ます。
141 ==============================================================================
142 *10.2*  置換                                                      *find-replace*
144 ":substitute" コマンドを使うと、指定した範囲内の文字列を置換できます。コマンド
145 の書式は次のとおりです: >
147         :[range]substitute/from/to/[flags]
149 このコマンドは [range] で指定された行範囲の中の文字列 "from" を文字列 "to" に
150 置換します。例えば、次のコマンドを実行すると、すべての行の "Professor" が
151 "Teacher" に置換されます: >
153         :%substitute/Professor/Teacher/
155         Note:
156         ":substitute" の綴りを完全に入力するような人はまずいません。普通は短縮
157         形の ":s" が使われます。以降ではこの短縮形を使います。
159 コマンドの前の "%" はファイル全体を意味する範囲指定です。範囲指定がない場合は、
160 現在行のみ置換されます。範囲指定については次の節で述べます |10.3|。
162 初期設定では、各行の最初に見つかったものだけが変更されます。例えば、上のコマン
163 ドを実行すると、次の行は:
165         Professor Smith criticized Professor Johnson today. ~
167 このように変更されます:
169         Teacher Smith criticized Professor Johnson today. ~
171 すべてを置換するには g (global) フラグを指定してください: >
173         :%s/Professor/Teacher/g
175 これを実行すると、先程の行は次のようになります。
177         Teacher Smith criticized Teacher Johnson today. ~
179 フラグは他にもあります。p (print=出力) フラグ を指定すると、最後に変更された
180 行が表示されます。c (confirm=確認) フラグを指定すると、一つ一つ確認しながら置
181 換できます。次のようにして使います: >
183         :%s/Professor/Teacher/c
185 "Professor" が現れる最初の場所が検索され、置換される予定のテキストが表示されま
186 す。そして、次のようなプロンプトが表示されます: >
188         Teacher に置換しますか? (y/n/a/q/l/^E/^Y)
190 ここでは次のいずれかの返答が必要です。
192         y               Yes;  置換する。
193         n               No;   置換せずにスキップ。
194         a               All;  置換する。以降すべて確認なしで置換する。
195         q               Quit; 置換を終了する。
196         l               Last; 置換をしてから終了する。
197         CTRL-E          画面を一行上にスクロールする。
198         CTRL-Y          画面を一行下にスクロールする。
201 置換コマンドの "from" の部分は実際にはパターン (正規表現) です。これは検索コマ
202 ンドで使うのと同じものです。例えば、次のコマンドでは、行頭に現れる "the" のみ
203 が置換されます: >
205         :s/^the/these/
207 "from" や "to" にスラッシュ (/) を含めるには、バックスラッシュ (\) を前置する
208 必要がありますが、スラッシュの代わりに他の文字を使えばその必要はありません。例
209 えばプラス (+) など: >
211         :s+one/two+one or two+
213 ==============================================================================
214 *10.3*  コマンドの範囲指定
216 ":substitute" などの : コマンドは、実行する範囲を指定できます。これを範囲指定
217 (range) と呼びます。
218 範囲指定の基本形式は {number},{number} です。例: >
220         :1,5s/this/that/g
222 1 行目から 5 行目まで置換コマンドが実行されます。5 行目も範囲に入ります。範囲
223 指定はコマンドの前に指定してください。
225 特定の一行だけ指定するには、数字を一つだけ指定します: >
227         :54s/President/Fool/
229 一部のコマンドは範囲指定を省略するとファイル全体を処理します。そのようなコマン
230 ドで現在行だけを処理するには "." を使います。例えば、":write" コマンドの範囲指
231 定を省略するとファイル全体が保存されますが、現在行だけを保存するには、次のよう
232 にします: >
234         :.write otherfile
236 一行目の行番号は 1 です。最終行は "$" で指定できます。例えば、現在行から最終行
237 までの範囲で置換をするには、次のようにします: >
239         :.,$s/yes/no/
241 先程使った "%" は "1,$"、つまり一行目から最終行までと同じことです。
244 パターンを使った範囲指定
245 ------------------------
247 例えば、本のどこかの章を編集していて、その章で使われている "grey" を全て
248 "gray" に置換したいとします。ただし、その章だけを置換、つまり次章は変更したく
249 ありません。章は行頭が "Chapter" で始まる行で区切られています。次のコマンドで
250 それができます: >
252         :?^Chapter?,/^Chapter/s=grey=gray=g
254 パターン検索が二回使われています。最初の "?^Chapter?" では現在行から上に向かっ
255 て検索しています。この ?pattern? という範囲の書き方は後方検索をするために使い
256 ます。同様に、"/^Chapter/" で前方検索を行い、次章の先頭を検索しています。
257 上の例では、説明をわかりやすくするために、置換コマンドの区切りに "=" を使って
258 います。スラッシュでも他の文字でも動作に違いはありません。
261 加算と減算
262 ----------
264 実は上のコマンドには少しだけ間違いがあります。次章のタイトルに "grey" が含まれ
265 ていると、それも置換されてしまいます。それが期待どおりの動作ならいいのですが、
266 そうでなければ? その場合はオフセットを指定すればよいのです。
267 パターンを検索し、その一行上の行を使うには、次のようにします: >
269         /Chapter/-1
271 数字は 1 でなくても構いません。ヒットした行の 2 行下を指定するなら、次のように
272 します: >
274         /Chapter/+2
276 オフセットは他の範囲指定にも使えます。例えば: >
278         :.+3,$-5
280 これは、現在行の 3 行下から、最終行の 5 行上までの範囲を指定しています。
283 マークを使う
284 ------------
286 行番号を直接指定する代わりに、マークを使うこともできます。
287 マークの使い方は三章で説明しました。例えば、範囲指定したい領域の先頭を "mt" で
288 マークし、領域の末尾を "mb" でマークします。すると、マークを使って次のように範
289 囲指定をすることができます (マークのある行は範囲に含まれます): >
291         :'t,'b
294 ビジュアルモードと範囲指定
295 --------------------------
297 ビジュアルモードでテキストを選択し、":" を押してコマンドラインモードに入ると、
298 次のような表示になります: >
300         :'<,'>
302 この状態でコマンドを入力すると、そのコマンドはビジュアル選択した範囲に対して適
303 用されます。
305         Note:
306         行の一部だけビジュアルモードで選択した場合や、CTRL-V で矩形選択した場
307         合でも、コマンドは行全体に適用されます。これは将来、変更されるかも知れ
308         ません。
310 実は、'< と '> はマークです。ビジュアル選択の始点と終点を示しています。このマー
311 クは、次にビジュアル選択するまで同じ場所を指しています。そのため、 "'<" コマン
312 ドでその場所にジャンプすることもできます。マークと他の範囲指定方法を組み合わせ
313 ることもできます: >
315         :'>,$
317 これは、選択範囲の終点からファイルの末尾までを範囲指定しています。
320 行数指定
321 --------
323 変更したい行数が分かっているなら、その数を入力してから ":" を押してください。
324 例えば、"5:" と入力すると、次のような表示になります: >
326         :.,.+4
328 続けて、使いたいコマンドを入力してください。これは、"." (現在行) から ".+4" (4
329 行下) が範囲指定されています。つまり範囲は 5 行ということです。
331 ==============================================================================
332 *10.4*  global コマンド
334 ":global" コマンドは Vim の中でも最も強力な機能の一つです。パターンにヒットす
335 る行を検索し、その行で、任意のコマンドを実行できます。コマンドの書式は次のとお
336 りです: >
338         :[range]global/{pattern}/{command}
340 ":substitute" コマンドに似ていますが、文字列が置換されるのではなく、{command}
341 コマンドが実行されます。
343         Note:
344         ":global" で実行できるのは ":" で始まるコマンドだけです。ノーマルモー
345         ドコマンドはそのままでは使えません。|:normal|コマンドを使ってください。
347 例えば、C++ スタイルのコメント内の "foobar" を "barfoo" に置換したいとします。
348 コメントは "//" で開始されています。次のコマンドを使いましょう: >
350         :g+//+s/foobar/barfoo/g
352 最初の ":g" は ":global" の短縮形です。":substitute" を ":s" と縮めるのと同じ
353 です。次に "+" 記号で囲まれたパターンがあります。今回はスラッシュを含んだパター
354 ンを検索するので、セパレータに "+" を使っています。その後に、"foobar" を
355 "barfoo" に置換するコマンドが続きます。
356 範囲指定を省略した場合、global コマンドはファイル全体に適用されます。そのため、
357 上の例では範囲指定をしていません。この点は、":substitute" が、範囲指定を省略す
358 ると現在行だけ処理するのと異なっています。
359 このコマンドは完璧ではありません。"//" が行の途中にあった場合もヒットしてしま
360 うので、行頭から "//" までの文字も置換されてしまいます。
362 ":substitute" と同じく、どんなパターンでも使えます。もっと複雑なパターンを覚え
363 たら使ってみてください。
365 ==============================================================================
366 *10.5*  矩形選択
368 CTRL-V を使うと、テキストの矩形部分を選択することができます。ここでは、矩形選
369 択でのみ使える特殊なコマンドを説明します。
371 矩形選択では、"$" コマンドに特殊な意味があります。"$" で移動した直後は、選択範
372 囲のすべての行で、選択範囲が行末まで拡張されます。現在行より長い行も行末まで選
373 択されます。この選択効果は、左右の移動をすると失われてしまいます。つまり、"j"
374 なら効果は残りますが、"h" では元に戻ってしまいます。
377 テキストの挿入
378 --------------
380 "I{string}<Esc>" コマンドを使うと、各行の、矩形選択した左側に {string} を挿入
381 できます。例えば、CTRL-V を押して矩形選択を開始し、カーソルを動かして選択範囲
382 を設定します。次に I を押して挿入モードに入り、テキストを挿入します。このとき、
383 挿入したテキストは最初の行にだけ表示されます。
384 <Esc> を押して挿入モードを抜けると、テキストが魔法のように選択範囲の残りの行に
385 挿入されます。例:
387         include one ~
388         include two ~
389         include three ~
390         include four ~
392 カーソルを "one" の "o" に移動し CTRL-V を押します。"3j" で、"four" まで移動し
393 ます。これで 4 行が矩形選択されました。そして、次のコマンドを入力します: >
395         Imain.<Esc>
397 結果は次のようになります:
399         include main.one ~
400         include main.two ~
401         include main.three ~
402         include main.four ~
404 選択範囲の途中に短い行があって、その行の文字が選択範囲に入ってなかった場合は、
405 その行には何も挿入されません。例えば、以下のテキストで、一行目と三行目の
406 "long" を矩形選択します。二行目は短いのでなにも選択されていません:
408         This is a long line ~
409         short ~
410         Any other long line ~
412                   ^^^^ 選択範囲
414 そして、"Ivery <Esc>" を入力すると、次のようになります:
416         This is a very long line ~
417         short ~
418         Any other very long line ~
420 短かい行には何も挿入されません。
422 改行を含むテキストを挿入した場合、"I" は通常の挿入コマンドと同じ動作をします。
423 つまり、最初の行にだけテキストが挿入されます。
425 "A" コマンドも同様の動作をします。ただし、テキストは右側に挿入されます。そし
426 て、短い行にもテキストが挿入されます。"I" と使い分ければ、短い行にテキストを挿
427 入するかどうかを選択することができます。
428 "A" には特別な場合が一つあります。矩形選択時に "$" を使って各行の行末まで選択
429 範囲を拡張した場合、"A"を使うと各行の行末にテキストが追加されます。
430 上と同じ例を使って、こんどは "$A XXX<Esc>" と入力すると、結果は次のようになり
431 ます:
433         This is a long line XXX ~
434         short XXX ~
435         Any other long line XXX ~
437 "$" を使わなければこの効果は出せません。Vim は "$" が使われたかどうかを記憶し
438 ています。カーソルを一番長い行の行末に移動し、見た目の選択範囲を同じにしても、
439 同じ結果にはなりません。
442 テキストの変更
443 --------------
445 矩形選択で "c" コマンドを使うと、選択範囲が削除され、挿入モードに入ります。入
446 力された文字列は選択されていた各行に挿入されます。
447 上と同じ例を使って、"long" を選択しているときに今度は "c_LONG_<Esc>" と入力す
448 ると、結果は次のようになります:
450         This is a _LONG_ line ~
451         short ~
452         Any other _LONG_ line ~
454 "I" コマンドの場合と同じく、短い行は無視されます。また、新しい文字列には改行は
455 入力できません。
457 "C" コマンドの場合は、ブロックの左端から行末までが削除されます。そして、挿入
458 モードに入り、文字列を入力できるようになります。その文字列は各行の行末に追加さ
459 れます。
460 また同じ例ですが、こんどは "Cnew text<Esc>" と入力すると、結果は次のようになり
461 ます。
463         This is a new text ~
464         short ~
465         Any other new text ~
467 注意すべきは、"long" という単語だけが選択されていても、これを実行すると、行末
468 まで全部消えてしまう点です。つまり、選択範囲の左端の位置だけが意味を持ちます。
469 繰り返しですが、文字が選択されていない短い行はここでも無視されます。
471 その他に、矩形選択内の文字列を変更するコマンドには次のようなものがあります。
473         ~       大文字/小文字切換え (a -> A and A -> a)
474         U       大文字化する        (a -> A and A -> A)
475         u       小文字化する        (a -> a and A -> a)
478 一つの文字で埋める
479 ------------------
481 選択範囲全体を一つの文字で埋めるには "r" コマンドを使います。またまた、上で用
482 いた例ですが、こんどは "long" を選択した上で "rx" と入力します:
484         This is a xxxx line ~
485         short ~
486         Any other xxxx line ~
489         Note:
490         行末を越えて矩形選択したい場合は、25 章の 'virtualedit' の説明を参照し
491         てください。
494 シフト
495 ------
497 ">" コマンドを使うと、選択されたテキストを右側にシフトできます。間は空白で埋め
498 られます。シフトの開始位置は矩形選択の左端です。
499 また同じ例を使って、今度は ">" を実行すると次のようになります:
501         This is a         long line ~
502         short ~
503         Any other         long line ~
505 シフトされる桁数は 'shiftwidth' オプションで設定します。これを 4 に変更するに
506 は次のようにします: >
508         :set shiftwidth=4
510 "<" コマンドを使うと、選択範囲の左側にある空白を一つのシフト分だけ削除できま
511 す。このコマンドは選択範囲の左側にある空白の量によって制限されます。つまり、空
512 白がシフト量より少ない場合は、可能な範囲だけ空白が削除されます。
515 行の結合
516 --------
518 "J" コマンドを使うと、選択範囲の行を一行に連結できます。つまり改行が削除されま
519 す。正確には、改行、行頭の空白、行末の空白、が一つの空白で置換されます
520 ('joinspaces' オプションで動作を変更できます)。
521 さて、また同じ例を使って、今度は "J" を実行します:
523         This is a long line short Any other long line ~
525 "J" コマンドは矩形選択以外でも使えます。"v" や "V" で選択した場合も全く同じ動
526 作をします。
528 空白を変更したくない場合は、"gJ" コマンドを使ってください。
530 ==============================================================================
531 *10.6* ファイルの一部の保存と読み込み
533 メールを書いているとき、他のファイルを取り込みたいことがあるかもしれません。そ
534 れには ":read {filename}" コマンドを使います。指定したファイルの内容が現在行の
535 下にプットされます。
536 次の文章でやってみましょう。
538         Hi John, ~
539         Here is the diff that fixes the bug: ~
540         Bye, Pierre. ~
542 カーソルを二行目に移動し、次のコマンドを入力します: >
544         :read patch
546 "patch" という名前のファイルが挿入され、次のようになります:
548         Hi John, ~
549         Here is the diff that fixes the bug: ~
550         2c2 ~
551         <       for (i = 0; i <= length; ++i) ~
552         --- ~
553         >       for (i = 0; i < length; ++i) ~
554         Bye, Pierre. ~
556 ":read" コマンドに範囲指定すると、指定されたファイルが範囲指定された行の下に
557 プットされます。例えば、":$r patch" なら、"patch" の内容がファイルの末尾に追加
558 されます。
559 ファイルの先頭に読み込むにはどうすればいいでしょうか。それには、行番号 0 を指
560 定します。そのような行は実際にはないので、他のコマンドに指定するとエラーになる
561 かもしれませんが、このコマンドでは指定できます: >
563         :0read patch
565 "patch" の内容がファイルの先頭にプットされます。
568 ファイルの一部だけ保存
569 ----------------------
571 ファイルの一部だけ保存するには、":write" コマンドを使います。範囲指定を省略す
572 るとファイル全体が保存されますが、範囲指定すると、指定した範囲の行だけが保存さ
573 れます: >
575         :.,$write tempo
577 このコマンドで、現在行から最終行までが "tempo" に保存されます。ファイルが既に
578 存在している場合はエラーメッセージが表示されるので、間違ってファイルを上書きす
579 る心配はありません。ファイルを上書きしたい場合は、! を付けてください: >
581         :.,$write! tempo
583 注意: ! は ":write" コマンドの直後に指定してください。間に空白を入れると、フィ
584 ルタコマンドになってしまいます。フィルタコマンドについては後で説明します。
587 ファイルに追記する
588 ------------------
590 この章の最初の節で、複数の行をレジスタに集める方法を説明しました。同じように、
591 複数の行をファイルに集めることができます。まず、次のコマンドで最初の行を保存し
592 てください: >
594         :.write collection
596 次に、二行目として保存したい行に移動し、次のように入力します: >
598         :.write >>collection
600 新規ファイルとして保存するのではなく、">>" を使って、ファイルの末尾に追記する
601 ことを指示しています。あとは必要なだけこの操作を繰り返してください。
603 ==============================================================================
604 *10.7*  テキストの整形
606 文章を入力しているとき、行が画面内に収まるように自動的に改行してくれたら便利で
607 すよね。そうするには、'textwidth' オプションを設定します: >
609         :set textwidth=72
611 vimrc ファイルの見本 (|vimrc_example.vim|) で、テキストファイルが開かれたとき
612 にこのオプションが設定されるようにしていたのを覚えているでしょうか。したがっ
613 て、vimrc ファイルの見本をそのまま使っているなら、オプションは既に設定されてい
614 ます。現在の 'textwidth' の設定を確認するには、次のようにします: >
616         :set textwidth
618 これで、行が 72 文字より長くなった行が改行されるようになりました。ただし、行の
619 途中からテキストを挿入したときや、単語削除をしたときは、行が 72 文字よりも長く
620 なったり短くなったりします。既存の文章が自動的に再整形されたりはしません。
621 現在の段落を整形するには、次のコマンドを使います: >
623         gqap
625 これは "gq" というオペレータで始まるコマンドです。次に "ap" というテキストオブ
626 ジェクトが指定されています。これは "a paragraph" (一つの段落) という意味です。
627 段落は、空行で区切られたテキストです。
629         Note:
630         空行 (改行文字だけの行) と空白行 (空白文字だけの行) は違います。段落の
631         区切りは「空行」だけです。見た目では気付きにくいので注意!
633 "ap" 以外のテキストオブジェクトや、移動コマンドも指定できます。段落が正しく分
634 割されているなら、次のコマンドでファイル全体を整形できます: >
636         gggqG
638 これは、"gg" で一行目に移動し、"gq" で整形オペレータを指定、"G" でファイル末尾
639 までジャンプしています。
641 段落の区切りが明確でない場合は、手動で行を選択して整形してください。整形したい
642 範囲の最初の行に移動し、"gqj" コマンドを使います。現在行と次の行が整形されま
643 す。現在行が短い場合は、次の行の単語が現在行に移動します。現在行が長い場合は、
644 現在行の単語が次の行に移動します。カーソルは次の行に移動しているので、"." でコ
645 マンドを再実行できます。あとは必要なだけ繰り返してください。
647 ==============================================================================
648 *10.8*  大文字/小文字の変換
650 "section header" という小文字のテキストがあります。これを、"section" だけ大文
651 字にするには、"gU" オペレータを使います。カーソルを先頭に移動して、コマンドを
652 実行してください: >
654                              gUw
655 <       section header      ---->      SECTION header
657 "gu" オペレータで小文字に変換できます: >
659                              guw
660 <       SECTION header      ---->      section header
662 "g~" を使うと、大文字と小文字を切り替えることができます。今説明したのは全てオ
663 ペレータなので、移動コマンドやテキストオブジェクトやビジュアルモードと組み合わ
664 せることができます。
665 オペレータを行に適用するには、オペレータを二回繰り返してください。例えば、"d"
666 は削除オペレータなので、"dd" で一行削除になります。同じように、"gugu" で行全体
667 が小文字になります。もっと短く、"guu" でも構いません。"gUgU" は "gUU"、"g~g~"
668 は "g~~" と短縮できます。例: >
670                                 g~~
671 <       Some GIRLS have Fun    ---->   sOME girls HAVE fUN ~
673 ==============================================================================
674 *10.9*  外部プログラムを使う
676 Vim には強力なコマンドがたくさんあるので何でもできますが、外部プログラムを使っ
677 た方がもっとキレイで高速に処理できる場合もあります。
678 "!{motion}{program}" コマンドを使うと、ファイルの一部を、外部プログラムでフィ
679 ルタすることができます。つまり、{program} で指定したプログラムが実行され、
680 {motion} で指定した範囲のテキストがプログラムに入力され、指定された範囲のテキ
681 ストがプログラムの出力で置き換えられます。
682 UNIX のフィルタに馴染のない方にはわかりにくいと思うので、例を交えて説明します。
683 sort コマンドはファイルの中身をソート (並べ替え) するコマンドです。次のコマン
684 ドを実行すると、ソートされていない input.txt の中身が整列され、output.txt に保
685 存されます。(この例は UNIX でも Microsoft Windows でも動作します) >
687         sort <input.txt >output.txt
689 さて、同じことを Vim でやってみましょう。1 行目から 5 行目までをソートしてみま
690 す。カーソルを一行目に移動して、次のコマンドを実行します: >
692         !5G
694 "!" はフィルタを実行するためのコマンドです。次に、移動コマンドを実行し、フィル
695 タに渡す範囲を指定しています。"5G" は 5 行目に移動するコマンドなので、1 行目
696 (現在行) から 5 行目までがフィルタの範囲として指定されます。
697 カーソルが画面の一番下に移動し、! プロンプトが表示されるので、フィルタプログラ
698 ムの名前を入力してください。この場合なら "sort" ですね。したがって、コマンドは
699 全部で次のようになります。 >
701         !5Gsort<Enter>
703 コマンドを実行すると、最初の五行が sort プログラムで処理され、元のテキストが、
704 プログラムの出力で置き換えられます。
706         line 55                       line 11
707         line 33                       line 22
708         line 11         -->           line 33
709         line 22                       line 44
710         line 44                       line 55
711         last line                     last line
713 "!!" コマンドを使うと、現在行をフィルタできます。Unix では "date" コマンドで現
714 在の日時を出力できるので、"!!date<Enter>" で現在行を "date" の出力で置き換える
715 ことができます。これはファイルに日付を挿入するのに便利です。
718 うまく動作しない場合
719 --------------------
721 シェルを起動し、テキストを入力し、出力を取り込むためには、シェルが正しく実行で
722 きるように設定されている必要があります。フィルタ処理に問題がある場合は、以下の
723 オプションを確認してください。
725         'shell'         外部プログラムを実行するために使われるプログラムの指定
726         'shellcmdflag'  シェルにコマンドを渡すための引数指定
727         'shellquote'    コマンドを囲むためのクオート文字
728         'shellxquote'   コマンドとリダイレクトを囲むためのクオート文字
729         'shelltype'     シェルの種類 (Amiga専用)
730         'shellslash'    ファイル名のバックスラッシュをスラッシュにする
731                         (MS-Windows 系専用)
732         'shellredir'    コマンドの出力をファイルに保存するために指定する文字列
734 Unix では、設定する必要はほとんどありません。なぜなら、おそらく sh 系か csh 系
735 のシェルが使われているからです。Vim は 'shell' に "csh" という文字列が含まれて
736 いるかどうかでシェルの種類を判断し、関連したオプションを自動的に設定します。
737 しかし、MS-Windows ではいろんなシェルがあるので、フィルタを動作させるためには、
738 オプションを設定する必要があるかもしれません。詳しくはオプションのヘルプを参照
739 してください。
742 コマンドの出力を読み込む
743 ------------------------
745 カレントディレクトリの内容を読み込むには、次のようにします。
747 Unix系: >
748         :read !ls
749 MS-Windows系: >
750         :read !dir
752 "ls" や "dir" コマンドの出力が取り込まれ、カーソルの下に挿入されます。これは
753 ファイルの読み込みに似ていますが、"!" を使ってコマンドを指定している点が違いま
754 す。
755 コマンドに引数を指定することもできます。出力をプットする場所を指定することもで
756 きます:
758         :0read !date -u
760 これはファイルの先頭に現在の日付と時間を UTC 形式で挿入します ("-u" 引数が使え
761 る date コマンドが必要ですよ。当たり前ですが...)。Note: "!!date" が現在行を置
762 き換えるのに対して、":read !date" は行を挿入するという点が違います。
765 コマンドにテキストを入力する
766 ----------------------------
768 Unix の "wc" コマンドは単語を数えることができます。編集中のファイル内の単語を
769 数えるには、次のようにします: >
771         :write !wc
773 これは上述の write コマンドと似ていますが、"!" を使って外部プログラムを指定し
774 ている点が違います。テキストがコマンドの標準入力に渡され、次のような結果が表示
775 されます:
777        4      47     249 ~
779 "wc" コマンドは冗長なメッセージを出力しません。この出力は、行数が 4、単語数が
780 47、文字数が 249 であることを示しています。
782 次のような間違いに気をつけてください: >
784         :write! wc
786 これはカレントディレクトリの "wc" というファイルに強制上書きするコマンドです。
787 空白は重要ですよ!
790 画面の再描画
791 ------------
793 外部プログラムがエラーを起こした場合、画面がめちゃくちゃになってしまうことがあ
794 ります。Vim は必要だと思われる最小限の領域だけを再描画しますが、他のプログラム
795 の出力内容を完全に把握することはできません。次のコマンドで画面を再描画できま
796 す: >
798         CTRL-L
800 ==============================================================================
802 次章: |usr_11.txt|  クラッシュからの復帰
804 Copyright: see |manual-copyright|  vim:tw=78:ts=8:ft=help:norl: