Merge branch 'KaoriYa'
[MacVim/KaoriYa.git] / runtime / doc / repeat.jax
blob27fbfd9f724070a5076904174a64d7135684ac20
1 *repeat.txt*    For Vim バージョン 7.0.  Last change: 2006 Apr 30
4                 VIMリファレンスマニュアル    by Bram Moolenaar
7 繰り返しコマンド、Vimスクリプトとデバッグ          *repeating*
9 繰り返しについてはユーザーマニュアルの26章|usr_26.txt|に紹介があります。
11 1. 単発繰り返し               |single-repeat|
12 2. 多重繰り返し               |multi-repeat|
13 3. 複雑な繰り返し      |complex-repeat|
14 4. Vimスクリプトを使う  |using-scripts|
15 5. スクリプトのデバッグ   |debug-scripts|
16 6. プロファイリング     |profiling|
18 ==============================================================================
19 1. 単発繰り返し                                               *single-repeat*
21                                                         *.*
22 .                       最後の変更を繰り返す。変更の回数は[count]で指定した回
23                         数で置き換えられる。'cpoptions'に'y'フラグが含まれてる
24                         時には、ヤンクコマンドも繰り返す。コマンドラインコマン
25                         ドは繰り返さない。
27 単純な変更は"."コマンドで繰り返すことができる。回数を指定しなければ、最後の変
28 更の回数が使用される。回数を指定した場合、最後のそれと置き換えられる。最後に行
29 なわれた変更が番号付きレジスタの指定を含んでいた場合、レジスタ番号は増加され
30 る。これをどのように使うかの例は|redo-register|を参照。ビジュアル選択を使用し
31 たコマンドを繰り返す時は、同じ「サイズ」の範囲が使用されることに注意。
32 |visual-repeat|を参照。
34                                                         *@:*
35 @:                      最後のコマンドラインを[count]回繰り返す。
36                         {|+cmdline_hist|が無効にされていると使えない}
39 ==============================================================================
40 2. 多重繰り返し                                               *multi-repeat*
42                                         *:g* *:global* *E147* *E148*
43 :[range]g[lobal]/{pattern}/[cmd]
44                         [range]の範囲で{pattern}にマッチする行に対して、Exコマ
45                         ンド[cmd](省略した場合":p")を実行する。
47 :[range]g[lobal]!/{pattern}/[cmd]
48                         [range]の範囲で{pattern}にマッチしない行に対して、Exコ
49                         マンド[cmd](省略した場合":p")を実行する。
51                                                         *:v* *:vglobal*
52 :[range]v[global]/{pattern}/[cmd]
53                         Same as :g!.
55 globalコマンドの動作はまず第1に[range]の行をスキャンしマッチした行すべてに印を
56 つける(複数行にかかるパターンではマッチの最初の行だけが重要である)。
57 次のスキャンでマークされたすべての行の行番号が指定(前置)されて[cmd]が実行され
58 る。行が変更されたり削除された場合そのマークは消滅する。
59 省略した場合の[range]はバッファ全体(1,$)である。コマンドを中断するには"CTRL-C"
60 を使用する。ある行についてエラーメッセージが与えられると、そのラインに対するコ
61 マンドは中断されglobalコマンドはマッチした次の行の処理を続ける。
63 非Exコマンドを繰り返すには":normal"コマンドを使用すれば良い: >
64         :g/pat/normal {commands}
65 {commands}が完全なコマンドとして終了することを確認すること。そうでないとVimは
66 全部のマッチに1つ1つについて、コマンドの残りを期待して貴方の入力を待ち続けるだ
67 ろう。画面は更新されないので、いま何をしているのかわからないだろう。|:normal|
68 を参照。
70 undo/redoコマンドはglobalコマンドを一度にundo/redoする。以前の文脈マークだけが
71 一度設定される("''"でグローバルコマンド実行前にカーソルがあった場所に戻ること
72 が出来る)。
74 globalコマンドは最後に使用した検索パターンと、最後に使用した置換パターンの両方
75 を設定する(これはvi互換)。これにより全体に対して文字列置換を行なうのが簡単にな
76 る:
77         :g/pat/s//PAT/g
78 これは総ての"pat"を"PAT"に置き換える。同じことがこれでも可能:
79         :%s/pat/PAT/g
80 こっちのほうが2文字短い!
82 コマンドに ":visual" を使った場合は特別である。これはマッチする行へ移動してノー
83 マルモードに入り、|Q| を押して Ex モードへ戻るまでコマンドを実行することができ
84 る。これがマッチする各行に対して繰り返される。これを行っている間は ":global" を
85 使うことはできない。
86 (訳注: この段落、意味がわかりません)
88 ==============================================================================
89 3. 複雑な繰り返し                                      *complex-repeat*
91                                                         *q* *recording*
92 q{0-9a-zA-Z"}           タイプした文字をレジスタ{0-9a-zA-Z"}にレコーディングす
93                         る(大文字は追加する)。レジスタを実行中は'q'コマンドは
94                         無効になり、マッピングの中でも無効になる。{Vi: レコー
95                         ディングはない}
97 q                       レコーディングを終了する。(実装のメモ: レコーディング
98                         を終了する'q'は、それがマッピングの結果であってもレジ
99                         スタに記録されない) {Vi: レコーディングはない}
101                                                         *@*
102 @{0-9a-z".=*}           レジスタ{0-9a-z".=*}の内容を[count]回実行する。レジス
103                         タ'%'(現在のファイルの名前)と'#' (裏ファイルの名前)は
104                         使用できないことに留意。"@="を使用するとプロンプトが表
105                         示されコマンドの評価式の入力モードになる。入力すると評
106                         価の結果が実行される。|@:|も参照。{Vi: 名前付きレジス
107                         タのみ}
109                                                         *@@* *E748*
110 @@                      直前の@{0-9a-z":*}を[count]回繰り返す。
112 :[addr]*{0-9a-z".=}                                             *:@* *:star*
113 :[addr]@{0-9a-z".=*}    レジスタ{0-9a-z".=*}の内容をExコマンドとして実行する。
114                         まず最初にカーソルを[addr]行に設定する(省略した場合現
115                         在の行)。レジスタの最終行に<CR>が含まれない場合、
116                         'cpoptions'に'e'フラグが含まれていれば自動的に追加され
117                         る。
118                         ":*"コマンドは'cpoptions'に'*'フラグが含まれていた場合
119                         にだけ認識されることに留意。これは'nocompatible'が使用
120                         されている時にはデフォルトにはならない。
121                         ":@="には最後に評価された式が使用される。式の評価結果
122                         がExコマンドとして実行される。
123                         これらのコマンド内ではマッピングは行なわれない。
124                         {Vi: 幾つかのバージョンだけ} 将来: 指定された範囲の
125                         各々の行にたいしてレジスタの内容が実行されるだろう。
127                                                         *:@:*
128 :[addr]@:               最後のコマンドラインを繰り返す。まずカーソルを[addr]行
129                         に設定する(省略した場合現在の行)。 {Vi にはない}
131                                                         *:@@*
132 :[addr]@@               最後の:@{0-9a-z"}を繰り返す。まず最初にカーソルを
133                         [addr]行に設定する(省略した場合現在の行)。 {Vi: 幾つか
134                         のバージョンだけ}
136 ==============================================================================
137 4. Vimスクリプトを使う                                  *using-scripts*
139 Vimスクリプトの書き方はユーザーマニュアルの41章|usr_41.txt|を参照してくださ
140 い。
142                                         *:so* *:source* *load-vim-script*
143 :so[urce] {file}        Exコマンドを{file}から読込む。これは":"で始まるコマン
144                         ドを列挙したファイルです。
145                         (訳注:実際に":"を書く必要はない)
146                         自動コマンド |SourcePre| が発生する。
148 :so[urce]! {file}       Vimコマンドを{file}から読込む。ノーマルモードでファイ
149                         ルの内容をあなたがタイプしたのと同じように実行されま
150                         す。
151                         |:global|, |:argdo|, |:windo|, |:bufdo|で使ったとき、
152                         ループ中や他のコマンドが続けられたときは、コマンドの実
153                         行中は表示は更新されません。
154                         {Vi にはない}
156                                                         *:ru* *:runtime*
157 :ru[ntime][!] {file} ..
158                         'runtimepath'で示された各ディレクトリの{file}からEx
159                         コマンドを読み込みます。ファイルがなくてもエラーには
160                         なりません。例: >
161                                 :runtime syntax/c.vim
163 <                       {file}には空白で区切って複数のファイルを指定できます。
164                         指定された{file}は'runtimepath'の最初のディレクト
165                         リ、次に二番目のディレクトリ、と検索されます。{file}
166                         に空白を含めるにはバックスラッシュを使います(しかし
167                         ファイル名に空白を含めるのは望ましくありません。トラ
168                         ブルのもとです)。
170                         [!]を付けると見つかった全てのファイルを読み込みま
171                         す。付けなければ最初に見つかったファイルだけを読み込
172                         みます。
174                         {file}がワイルドカードを含んでいるとそれは展開されま
175                         す。例: >
176                                 :runtime! plugin/*.vim
177 <                       これはVimが起動時にプラグインファイルを読み込むのに
178                         使っているものです。次のは似ていますが: >
179                                 :runtime plugin/*.vim
180 <                       これは最初に見つかったファイルだけを読み込みます。
182                         'verbose'が1以上ならファイルが見つからないときにメッ
183                         セージが表示されます。
184                         'verbose'が2以上なら見つかった全てのファイルについて
185                         メッセージが表示されます。
186                         {Vi にはない}
188 :scripte[ncoding] [encoding]            *:scripte* *:scriptencoding* *E167*
189                         スクリプトで使われている文字コードを宣言します。
190                         それ以降の行は必要なら[encoding]から'encoding'オプ
191                         ションの文字コードに変換されます。例: >
192                                 scriptencoding iso-8859-5
193                                 scriptencoding cp932
195                         [encoding]が空のときは変換はされません。これは文字
196                         コードの変換を限定するために使います: >
197                                 scriptencoding euc-jp
198                                 ... 変換される ...
199                                 scriptencoding
200                                 ... 変換されない ...
202 <                       変換がシステムによって提供されない場合、エラーメッ
203                         セージは表示されず変換もされません。
205                         "ucs-2"や"ucs-4"を使わないでください。スクリプトをそ
206                         の文字コードで書くことはできません(NULバイトが含まれ
207                         てしまうため)。
208                         スクリプトの最初にutf-8のBOM(Byte Order Mark : バイ
209                         トオーダーマーク)があるとVimはそれを認識します。
210                         ":scriptencoding utf-8"と書く必要はありません。
212                         Vimが|+multi_byte|付きでコンパイルされていない場合、
213                         このコマンドは無視されます。
214                         {Vi にはない}
216                                                 *:scrip* *:scriptnames*
217 :scrip[tnames]          読み込まれているスクリプトを読み込まれた順番どおりに
218                         全て表示します。数字はスクリプトのID(識別子)|<SID>|
219                         に使われています。
220                         {Vi にはない} {|+eval|付きでコンパイルしないと使えな
221                         い}
223                                                 *:fini* *:finish* *E168*
224 :fini[sh]               スクリプトの読み込みを停止します。スクリプトファイル
225                         でのみ使えます。これはファイルの残りを読み込ませない
226                         ための手軽な方法です。|:try|を使った後で|:finally|を
227                         見つける前に使われると、まず":finally"と|:endtry|の
228                         間のコマンドが実行されます。この手続きは入れ子になっ
229                         ている全ての":try"に対して適用されます。入れ子の一番
230                         外側の":endtry"に達するとスクリプトを停止します。
231                         {Vi にはない}
233 総てのコマンドとコマンドシーケンスは、名前付きレジスタに格納することで繰り返し
234 実行することができる。レジスタにコマンドを格納する方法は2つある:
235 - 記録コマンド"q"を使用する。実際にコマンドをタイプし、実行しながらそれをレジ
236   スタに格納する。今、何が起こっているかを確認できるので簡単である。間違いをし
237   たならば、レジスタの内容をいったんファイルへ書き出("p"ut)して、コマンドシー
238   ケンスを編集して、それからそれを削除して再びレジスタに格納することができる。
239   レジスタに追加することで継続してレコーディングすることができる(大文字を使用
240   する)。
241 - コマンドシーケンスを削除かヤンクしてレジスタに入れる。
243 良く使うコマンドは':map'コマンドでファンクションキーに割当てることができる:
245 別の方法としてコマンドをファイルに記述しておき、それを':source!'コマンドで読込
246 んで実行するという方法もある。長いコマンドシーケンスにとっては便利である。ファ
247 ンクションキーに複雑なコマンドを割当てるために':map'コマンドと組み合わせること
248 ができる。
250 ':source'コマンドはファイルから一行ずつExコマンドを読込む。キーボード入力が必
251 要になった場合にはタイプする必要が生じる。':source!'コマンドはスクリプトファイ
252 ルから一字一句読込む。各々のキャラクタはユーザがタイプしたものとして解釈され
253 る。
255 例: ":!ls"コマンドを実行したとすると|hit-enter|プロンプトが表示される。"!ls"
256 を含むファイルを':source'したならば、自分で<Enter>をタイプする必要がある
257 だろう。しかし':!ls'を含んだファイルを':source!'したならば、<CR>が見つかるまで
258 そのファイルから続く文字が読込まれる。":!ls"がファイルの最終行でない限り、<CR>
259 を自分でタイプする必要はないだろう
261 スクリプトファイルの中で':source[!]'コマンドを使うことも可能なので、階層関係の
262 あるスクリプトファイルを作ることもできる。':source'コマンドは同時に開くことの
263 できるファイル数(だいたい15)と同じだけネスト(入れ子に)することができる。
264 ':source!'コマンドは15段までネストすることができる。
266 読込まれるファイルの中ではファイル名が必要なところに、"<sfile>"という文字列(
267 文字 通りであってスペシャルキーではない)を使うことができる。この文字列は読込ま
268 れた ファイルのファイル名に置き換えられる。例えば、".vimrc"ファイルと同じ場所
269 に"other.vimrc"というファイルがあれば、".vimrc"から次のコマンドでそれを読込む
270 ことができる: >
271         :source <sfile>:h/other.vimrc
273 スクリプトファイル内では端末依存のキーコードは端末非依存の2文字のコードで表現
274 される。これは異なる種類の端末でも同じ方法で依存キーコードを使用できることを意
275 味する。最初のキーコードの文字は0x80つまり128で、画面では"~@"と表される。2つ目
276 のキャラクタは|key-notation|の表にて見ることができる。これらのコードはどれも
277 CTRL-Vに続けて3つの10進コードを叩くことで入力できる。これはtermcapコード<t_xx>
278 に対しては使用できない。これらはマッピングの中だけで使うことができる。
280                                                 *:source_crnl* *W15*
281 MS-DOS, Win32 and OS/2: ":source"で読込まれるファイルは通常、行末に<CR><NL>を
282 持っている。これらは常に働く。もしも行末に<NL>を持つファイルを使っているならば
283 (例えばUNIXで作られたファイル)、'fileformats'が空でかつ先頭行が<CR>で終わって
284 なければ正しく認識される。しかしこれは先頭行が":map <F1> :help^M"(^Mは<CR>)み
285 たいな内容だった場合には失敗する。ファイルの先頭行が<CR>で終わっていてその1行
286 限りの時、先頭行から<CR>が失われてしまうのでエラーメッセージが出るだろう。
288 Mac Classic: ":source"で読み込まれるファイルは通常、行末に<CR>を持っている。
289 これらは常に機能する。もしも行末に<NL>を持つファイルを使っているならば(例えば
290 UNIXで作られたファイル)、'fileformats'が空でかつ先頭行が<CR>で終わってなければ
291 正しく認識される。先頭行に<CR>を持ち<NL>で改行しているファイルを使用しないよう
292 に気を付けてください。
294 その他のシステムでは、Vimは取込まれた(":source"ed)ファイルの行末は<NL>であるこ
295 とを期待する。これは常に働く。もしも行末が<CR><NL>であるファイル(例えばMS-DOS
296 で作られたファイル)を使っているならば、総ての行が末尾に<CR>を持っていることに
297 なる。これは幾つかのコマンドにとって問題となるだろう(例、マッピング)。自動的に
298 行末記号を検出する機構はない。なぜなら<CR>で終了するマッピングの定義をファイル
299 の先頭に書くことは一般的で、自動検出用の仕組みを作るのが難しいからである。
301                                                         *line-continuation*
302 読込まれた(":source"d")Exコマンドスクリプトのファイル内の長い行は、行継続記号
303 "\"(backslash)を次行の先頭に挿入することで分割できる。バックスラッシュの前に空
304 白を挿入することも可能で、これらは無視される。
306 例: 次の記述は >
307         :set comments=sr:/*,mb:*,el:*/,
308                      \://,
309                      \b:#,
310                      \:%,
311                      \n:>,
312                      \fb:-
314 次の1行と同じ意味として解釈される: >
315         :set comments=sr:/*,mb:*,el:*/,://,b:#,:%,n:>,fb:-
317 バックスラッシュの前に先行する空白文字は全部無視される。しかしながらバックス
318 ラッシュのある行の1つ前の行末には、自由に空白文字を挿入することはできない; 付
319 加的な空白文字が許されるかどうかは、コマンドが分割される位置に依存する。
321 ":append"と":insert"コマンドには1つ問題がある: >
322    :1append
323    \asdf
324    .
325 バックスラッシュは行継続シンボルに見えるが、コマンドの結果はこのようになる: >
326    :1appendasdf
327    .
328 これを避けるには、'cpoptions'に'C'フラグを追加することだ: >
329    :set cpo+=C
330    :function Foo()
331    :1append
332    \asdf
333    :.
334    :set cpo-=C
336 Note 関数の中でその手のコマンドを実行するには、関数定義の際に'C'フラグを追加す
337 る必要があり、それが実行される際にではない。
338    :set cpo+=C
339    :function Foo()
340    :1append
341    \asdf
342    .
343    :endfunction
344    :set cpo-=C
346 解説:
347         多くのプログラムは行継続を、継続する行の末尾にバックスラッシュを置くこ
348         とで表現する。その方法をVimで採用してしまうと、Viとの互換性に重大な欠
349         陥ができてしまう。たとえばこのようなViのマッピングを考えるとわかりやす
350         い: >
351                 :map xx  asdf\
352 <       従って一般的ではないが行頭のバックスラッシュを採用している。
354 ==============================================================================
355 5. スクリプトのデバッグ                                   *debug-scripts*
357 スクリプトの動作を知るためのコードを追加することができるのは当り前として、
358 Vimはデバッグモードを提供しています。これはスクリプトファイルやユーザーファン
359 クションをステップ実行することやブレークポイントを仕掛けることを可能にします。
361 NOTE: デバッグモードは未完成です。デバッグはVimの動作に副作用をあたえます。全
362 てをデバッグするのには使えません。例えば画面がデバッグメッセージで散乱するとき
363 など。
364 {Vi にはデバッグモードはない}
366 デバッグモードの代わりに'verbose'オプションが使えます。大きな値を設定するとV
367 imの動作についてより詳細なメッセージを得られます。
370 デバッグモードを開始する                                    *debug-mode*
372 デバッグモードを開始するにはこれらの方法のうちどれかを使います:
373 1. Vimを|-D|引数付きで起動する: >
374         vim -D file.txt
375 <  最初にvimrcを読み込むところからデバッグを開始します。これはVimの起動時に何
376    が起こっているのかを調査するのに便利です。副作用としてVimは初期化が完了する
377    前に安全のためターミナルモードを切替えます。
378    (WindowsやMacintoshの)GUI専用バージョンではGUIウインドウを開くとすぐにデバ
379    ッグが開始します。これを早めるにはvimrcファイルに":gui"と書いてください。
380                                                                 *:debug*
381 2. ":debug"を前に付けてコマンドを実行します。そのコマンドを実行する間だけデバ
382    ッグできます。特定のスクリプトファイルやユーザー関数をデバッグするのに便利
383    です。オートコマンドから呼び出されるスクリプトや関数にも便利です。
384    例: >
385         :debug edit test.txt.gz
387 3. ブレークポイントをソースファイルやユーザーファンクションに設定します。コ
388    マンドラインから次のようにできます: >
389         vim -c "breakadd file */explorer.vim"
390 <  これはVimを起動して"explorer.vim"の最初の行を読み込むところで停止します。
391    デバッグモード中でもブレークポイントを設定できます。
393 デバッグモード中に実行されるコマンドはそれが実行される前に表示されます。コメン
394 トや空の行、実行されない行はとばされます。行が"|"を使って二つのコマンドを含ん
395 でいた場合には分けて表示されます。
398 デバッグモード
399 --------------
401 デバッグモードに入ると、通常のExコマンドが使えます。例えば、変数の値を見るに
402 は: >
403         echo idx
404 ユーザーファンクション内では、これはローカル変数の"idx"を表示します。"g:"を頭
405 に付けるとグローバル変数の値を表示します: >
406         echo g:idx
407 全てのコマンドは実行中の関数やスクリプトの文脈として実行されます。オプションを
408 設定することもできます。例えば何が起こっているのかを表示するために'verbose'を
409 設定することができます。興味のある部分を実行する前に次のようにするといいでしょ
410 う: >
411         :set verbose=20
413 スクリーンの更新を必要とするコマンドは避けるべきです。なぜならデバッグモードを
414 抜けるまでその作用に気付き難いからです。例えば: >
415         :help
416 これはとても不便です。
418 デバッグモードのためのコマンドラインヒストリが別に用意されています。
420 関数の行番号はその関数の始まりから数えます。見ている行の番号を数えるのに苦労す
421 る場合はその関数の書かれたファイルを別のVimで開き、その関数の始まりを探しだし
422 、"99j"を実行してください。"99"は実際の行番号に合わせて変えてください。
424 さらに、以下のコマンドが使えます:
425                                                         *>cont*
426         cont            次のブレークポイントまで実行します。
427                                                         *>quit*
428         quit            異常停止します。これはCTRL-Cを使うことに似ていますが、
429                         全てを停止するわけではありません。次のブレークポイント
430                         で停止します。
431                                                         *>next*
432         next            コマンドを実行しそれが終わるとデバッグモードに戻りま
433                         す。ユーザー関数やソースファイルの呼び出し時には呼び
434                         出し元の次の行に進みます。
435                                                         *>step*
436         step            コマンドを実行しそれが終わるとデバッグモードに戻りま
437                         す。ユーザー関数やソースファイルの呼び出し時には呼び
438                         出し先の行に進みます。
439                                                         *>interrupt*
440         interrupt       CTRL-Cを使うことに似ていますが、次のコマンドを実行する
441                         ためにデバッグモードに戻る場所が">quit"と違います。例
442                         外割り込みについて|:finally|や|:catch|をテストするのに
443                         便利です。
444                                                         *>finish*
445         finish          実行中のスクリプトやユーザー関数を終了し呼び出し元で
446                         デバッグモードに戻ります。
448 デバッグモードのコマンドについて:
449 - 補間はできません。通常のExコマンドのみ補間できます。
450 - 次の一文字に省略すことができます: "c", "n", "s" そして "f"。
451 - <CR>を押すと前回のものを繰り返します。関係ないコマンドを使うとリセットされま
452   す(どうすべきかがわかりにくいため)。
453 - 同じ名前のExコマンドを使うにはコロンを付けてください:
454   ":cont", ":next", ":finish" (省略時も)
457 ブレークポイントの定義
458 ----------------------
459                                                         *:breaka* *:breakadd*
460 :breaka[dd] func [lnum] {name}
461                 関数にブレークポイントを設定します。例: >
462                         :breakadd func Explore
463 <               関数名が妥当かどうか検査しませので、関数定義の前にブレークポイ
464                 ントを定義できます。
466 :breaka[dd] file [lnum] {name}
467                 ソースファイルにブレークポイントを設定します。例: >
468                         :breakadd file 43 .vimrc
470 :breaka[dd] here
471                 カレントファイルのカレント行にブレークポイントを設定します。
472                 次を行うのと同様です: >
473                         :breakadd file <cursor-line> <current-file>
474 <               Note これはファイルを読み込むときに実行されるコマンドに対して
475                 だけ働きます。そのファイル中で定義される関数に対しては働きませ
476                 ん。
478 [lnum]はブレークポイントにする行番号です。Vimはその行かそれ以降で停止します。
479 省略時すると1行目になります。
481                                                         *:debug-name*
482 {name} はファイル名や関数名のパターンです。パターンはオートコマンドで使われる
483 ものと同じです。完全に一致しなければなりません(パターンが"^"で始まって"$"で終
484 わるように)。"*"は全ての文字列に一致します。'ignorecase'は使われませんが、大文
485 字と小文字を区別しないために"\c"を使うことができます|/\c|。関数名には()を付け
486 ないでください!
488 ソースファイル名のパターン検査はファイルのフルネームに対して行われます。例: >
489         breakadd file explorer
490 パスが間違っているので一致しません。 >
491         breakadd file *explorer.vim
492 ".../plugin/explorer.vim"と".../plugin/iexplorer.vim"に一致します。 >
493         breakadd file */explorer.vim
494 ".../plugin/explorer.vim"だけに一致します。
496 関数名のパターン検査は";function"で表示される名前に対して行われます。ローカ
497 ル関数には"<SNR>99_"といったものが前に付くということです。
499 Note 関数はまず読み込まれ、後で実行されます。読み込まれたときに "file" ブレー
500 クポイントがチェックされ、実行されるときに "func" ブレークポイントがチェックさ
501 れます。
503 ブレークポイントの削除
504 ----------------------
505                                                 *:breakd* *:breakdel* *E161*
506 :breakd[el] {nr}
507                 ブレークポイント{nr}を削除します。|:breaklist|を使って番号を
508                 確認してください。
510 :breakd[el] *
511                 すべてのブレークポイントを削除します。
513 :breakd[el] func [lnum] {name}
514                 関数内のブレークポイントを削除します。
516 :breakd[el] file [lnum] {name}
517                 ソースファイル内のブレークポイントを削除します。
519 :breakd[el] here
520                 カレントファイルのカレント行のブレークポイントを削除します。
523 [lnum]が省略されると関数、またはファイルの最初のブレークポイントが削除されま
524 す。
525 {name}は":breakadd"で使った名前と完全に同じでなければなりません。"eplorer"と
526 "*explorer.vim"、"*explorer*"は違います。
529 ブレークポイントを列挙する
530 --------------------------
531                                                         *:breakl* *:breaklist*
532 :breakl[ist]
533                 全てのブレークポイントを列挙します。
536 その他
537 ------
539                                                 *:debugg* *:debuggreedy*
540 :debugg[reedy]
541                 デバッグモードのコマンドをユーザーから直接得るのではなく標準入
542                 力から読み込みます。スクリプトのテストのときに便利です。
543                 例: >
544                   echo 'q^Mq' | vim -e -s -c debuggreedy -c 'breakadd file script.vim' -S script.vim
546 :0debugg[reedy]
547                 ":debuggreedy"を取り消します。それ以降のデバッグモードコマンド
548                 を使わず、ユーザーから直接デバッグモードコマンドを受け取ります
549                 。
551 ==============================================================================
552 6. プロファイリング                                             *profile* *profiling*
554 プロファイリングとは、関数やスクリプトの実行にかかる時間を計測することです。
555 これを行うには |+profile| 機能が必要です。
556 この機能は "huge" 機能つきでコンパイルしたときだけ含まれます。
557 {Vi はプロファイリング機能を持っていない}
559 また、関数 |reltime()| を使っても時間を計測できます。この関数には |+reltime|
560 機能だけが必要です。これは "huge" 以外でもしばしばついてきます。
562 :prof[ile] start {fname}                        *:prof* *:profile* *E750*
563                 プロファイリングを開始し、終了時に出力を {fname} に出力します。
564                 {fname} がすでに存在するときは、警告なしに上書きされます。
565                 変数 |v:profiling| に 1 が代入されます。
567 :prof[ile] continue
568                 ":profile pause" の後にこれを実行すると、プロファイリングを再
569                 開します。
571 :prof[ile] func {pattern}
572                 パターン {pattern} にマッチする関数をプロファイリングします。
573                 {pattern} がどう使われるかは |:debug-name| を参照。
575 :prof[ile][!] file {pattern}
576                 パターン {pattern} にマッチするスクリプトファイルをプロファイ
577                 リングします。
578                 {pattern} がどう使われるかは |:debug-name| を参照。
579                 このコマンドはスクリプトそのものをプロファイリングするだけで、
580                 その中で定義されている関数のプロファイリングは行いません。
581                 [!] がつけられたときは、そのスクリプト中で定義されている全ての
582                 関数のプロファイリングも行います。しかしスクリプトがこのコマン
583                 ドの後で読み込まれたときだけです。
585 :profd[el] ...                                          *:profd* *:profdel*
586                 指定された引数に対するプロファイリングを停止します。引数につい
587                 ては |:breakdel| を参照。
589 最初は常に ":profile start fname" コマンドで始めなければなりません。結果のファ
590 イルは Vim が終了するときに書き出されます。次に出力の例を挙げます。説明のため
591 に行番号が行頭についています:
593   1 FUNCTION  Test2() ~
594   2 Called 1 time ~
595   3 Total time:   0.155251 ~
596   4  Self time:   0.002006 ~
597   5  ~
598   6 count  total (s)   self (s) ~
599   7     9              0.000096   for i in range(8) ~
600   8     8   0.153655   0.000410     call Test3() ~
601   9     8              0.000070   endfor ~
602  10                               " Ask a question ~
603  11     1              0.001341   echo input("give me an answer: ") ~
605 ヘッダ(1行目から4行目)は関数全体にかかった時間を示しています。"Total" はこの関
606 数を実行している間に経過した時間です。"Self" は "Total" のうち、次のことにかか
607 った時間を引いたものです:
608 - 他のユーザ定義関数
609 - スクリプトの読み込み
610 - 自動コマンドの実行
611 - 外部(シェル)プログラム
613 7行目から11行目は各実行行にかかった時間を示しています。実行されない行はカウン
614 トされません。それゆえ、コメント行は決してカウントされません。
616 Count の桁はその行が何回実行されたかを示します。7行目の "for" コマンドはそれ以
617 下の行と同様に何回も実行されることに注意してください。これは、ループの終わりを
618 検出するためにこの行が何回も実行されるためです。
620 ユーザ入力待ちにかかった時間は一切カウントされません。それゆえ、input() のプロ
621 ンプトに反応するのにどれだけ時間がかかろうとも無関係です。
623 プロファイリングはどこで時間が費やされたかのよい指標を与えてくれますが、多くの
624 原因によりその結果がごまかされてしまう場合があるということを覚えておいてくださ
625 い:
627 - システム関数 gettimeofday() に依存する時間計測の精度。たとえ時間がマイクロ秒
628   で表示されていたとしても、1/100秒の精度しかないこともあります。
630 - 実経過時間が計測されます。他のプロセスがビジーであると、それが予測できない箇
631   所で遅れを引き起こす可能性があります。
633 - 1行に複数のコマンドを書いていると、1つの時間しか得られません。ここのコマンド
634   に対して時間を見るにはその行を分割してください。
636 - 各行の時間の総和をとると、たいてい関数全体の時間より小さくなります。各行の間
637   にオーバーヘッドがあります。
639 - Vim が終了する前に削除された関数はプロファイリング情報を生成しません。必要な
640   ら変数 |v:profiling| をチェックしてください: >
641         :if !v:profiling
642         :   delfunc MyFunc
643         :endif
645 - マルチプロセッサシステム上では、スリープモードが作動したときや、省力のためプ
646   ロセッサの周波数が下がったとき、プロファイリングが奇妙な結果を出すかもしれま
647   せん。
649  vim:tw=78:ts=8:ft=help:norl: