1 *eval.txt* For Vim バージョン 7.2. Last change: 2009 Nov 17
4 VIMリファレンスマニュアル by Bram Moolenaar
7 Vimスクリプト *expression* *expr* *E15* *eval*
9 Vimスクリプトの利用についてはユーザマニュアルの41章|usr_41.txt|でも解説されて
12 注意:Vimスクリプトはコンパイル時に無効化できる。もしそうなっているとこのドキュ
13 メントに書かれている事は有効ではない。|+eval|と|no-eval-feature|を参照。
20 1.5 変数について補足 |more-variables|
21 2. 式の文法 |expression-syntax|
22 3. 内部変数 |internal-variables|
24 5. 関数定義 |user-functions|
25 6. 波括弧{}変数 |curly-braces-names|
26 7. コマンド |expression-commands|
27 8. 例外処理 |exception-handling|
29 10. +eval機能が無効 |no-eval-feature|
30 11. サンドボックス |eval-sandbox|
31 12. テキストロック |textlock|
35 ==============================================================================
42 数値 32ビット符合有整数 |expr-number| *Number*
45 浮動小数点数 浮動小数点数 |floating-point-format| *Float*
46 {|+float| 機能つきでコンパイルされたときのみ}
47 例: 123.456 1.15e-6 -1.1e3
49 文字列 終端がNUL文字である8ビットの符号無し文字(バイト)
50 |expr-string| 例: "ab\txx\"--" 'x-z''a,c'
52 Funcref 関数への参照 |Funcref|.
58 辞書 順序を持たない連想配列: 各要素はキーと値を持つ。|Dictionary|
59 例: {'blue': "#0000ff", 'red': "#ff0000"}
61 数値と文字列は文脈に応じて相互に変換される。
63 数値から文字列への変換は数字のASCII表現によって行なわれる。例: >
68 文字列から数値への変換は最初の数字を用いて数値に変換する。16進表記"0xf9"や8進
69 表記"017"も認識される。文字列が数字で始まらない場合結果は0となる。例: >
78 文字列を強制的に数値に変換するには0を足す: >
82 先頭の0によって8進数とみなされるのを防いだり、異なる基数を使うには|str2nr()|を
85 ブール(真理値)演算には数値が使われる。0は偽を意味し、非0は真を表す。
89 "foo"は0に変換され、それは偽を意味する。文字列が空ではないか調べるためには
90 strlen()を使用して次のようにする。 >
92 < *E745* *E728* *E703* *E729* *E730* *E731*
93 リスト、辞書、Funcrefは自動的に変換されない。
96 数値と浮動小数点数をまぜると浮動小数点数になる。それ以外には浮動小数点数への自
97 動的な変換は存在しない。文字列から浮動小数点数へは str2float () を使い、浮動小
98 数点数から文字列へは printf()を、浮動小数点数から数値へは float2nr() を使う。
100 *E706* *sticky-type-checking*
101 変数の型を変えようとするとエラーになる。このエラーを避けるには、まず|:unlet|す
102 る必要がある。しかし文字列と数値は同値であると見なされる。同じく、浮動小数点数
105 :let l = 44 " 型が文字列から数値に変わる
106 :let l = [1, 2, 3] " エラー! l はまだ数値である
107 :let l = 4.4 " 型が数値から浮動小数点数に変わる
108 :let l = "string" " エラー!
112 *Funcref* *E695* *E718*
113 関数|function()|は関数への参照を返す。関数への参照は、式の中で関数名が要求され
114 る場所で使うと参照先の関数を呼び出す。例: >
116 :let Fn = function("MyFunc")
118 < *E704* *E705* *E707*
119 関数参照の変数名は、大文字、"s:"、"w:"、"t:"、"b:"のいずれかで始めなければなら
120 ない。関数参照と参照先の関数の名前を同じにすることはできない。
122 関数を定義して、それへの参照を直接辞書に入れるための特別な形式がある。例: >
123 :function dict.init() dict
127 この辞書のキーは小文字で始めなければならない。実際の関数名はここでは使われない。
128 |numbered-function|も参照。
130 |:call|コマンドでも関数参照を使うことができる: >
134 参照先の関数名は|string()|で得られる。 >
135 :let func = string(Fn)
137 関数参照を呼び出すには|call()|を使い、引数にはリスト型の変数を使う: >
138 :let r = call(Fn, mylist)
142 *List* *Lists* *E686*
143 リストとは順序を保つ要素の列である。要素はどんな型でもよい。要素へはインデック
144 ス番号を使ってアクセスする。列の任意の位置に要素を追加したり削除することができ
150 リストを作るには、[]の中にコンマで区切って要素を書く。
152 :let mylist = [1, two, 3, "four"]
155 要素はどんな式でもよい。要素としてリストを指定すると、リストのリストができる:
157 :let nestlist = [[11, 12], [21, 22], [31, 32]]
159 最後の要素の後に余分なコンマがあると無視される。
164 リストの要素にアクセスするには、リスト名の後に[]を書き、その中にインデックスを
165 書く。インデックスは0基点(つまり最初の要素のインデックスは0)である。 >
166 :let item = mylist[0] " 最初の要素(1)を取得
167 :let item = mylist[2] " 3番目の要素(3)を取得
169 取得した要素がリストならば、さらに続けてインデックスを書くことができる: >
170 :let item = nestlist[0][1] " 最初のリストの2番目の要素(12)を取得
172 負のインデックスを指定すると、リストの末尾から数えられる。インデックス-1は最後
173 の要素を示し、-2は最後から2番目を指す >
174 :let last = mylist[-1] " 最後の要素("four")を取得
176 無効なインデックスによるエラーを回避するには関数|get()|を使う。するとインデッ
177 クスが無効な場合は、0かまたは自分で指定した既定値が返る: >
178 :echo get(mylist, idx)
179 :echo get(mylist, idx, "NONE")
184 2つのリストを連結するには演算子"+"を使う: >
185 :let longlist = mylist + [5, 6]
186 :let mylist += [7, 8]
188 1個の要素を先頭または末尾に付け加えるには、[]で囲んでリストにして連結する。リ
189 ストの特定の要素を変更するには後述の|list-modification|を参照。
194 リストの一部分を取り出すには、[]の中に始点と終点のインデックスを書き、コロンで
196 :let shortlist = mylist[2:-1] " リスト[3, "four"]を得る
198 始点のインデックスを省略すると0となる。終点のインデックスを省略すると-1となる >
199 :let endlist = mylist[2:] " 2番目から最後まで: [3, "four"]
200 :let shortlist = mylist[2:2] " 1個の要素からなるリスト: [3]
201 :let otherlist = mylist[:] " リストのコピーを作る
203 終点のインデックスが始点のインデックスよりも前になってしまった場合は空リストと
206 終点のインデックスがリストの長さより大きい場合は、長さ-1を指定したときと同じに
208 :let mylist = [0, 1, 2, 3]
209 :echo mylist[2:8] " 結果: [2, 3]
211 NOTE: mylist[s:e]と書くと変数"s:e"をインデックスとして使ったと解釈される。":"
212 の前に1文字の変数を使うときは十分注意すること。必要ならこのようにスペースを入
213 れるとよい: mylist[s : e].
218 変数"aa"がリストであり、それを別の変数"bb"に代入したとすると、両方とも同じ変数
219 を参照するようになる。よってリスト"aa"を変更すると"bb"も変更される: >
226 リストのコピーを作るには関数|copy()|を使う。前述の通り[:]を使ってもできる。こ
227 れは浅いコピーである。つまりリストの要素であるリストに変更を加えると、コピーさ
229 :let aa = [[1, 'a'], 2, 3]
232 :let aa[0][1] = 'aaa'
234 < [[1, aaa], 2, 3, 4] >
238 完全に独立したコピーを作るには|deepcopy()|を使う。これは再帰的にリストの要素の
239 コピーを作る。ただし深さは100レベルまでである。
241 2つの変数が同じリストを指しているかは演算子"is"で判定できる。"isnot"はその逆で
242 ある。一方、"=="は2つのリストが同じ値を持っているかを判定する。 >
243 :let alist = [1, 2, 3]
244 :let blist = [1, 2, 3]
250 Note リストの比較について注意: 2つのリストは、同じ長さを持ち、全要素が"=="の意
251 味で等しいとき、等しいとみなされる。ただ、1つ例外がある: 数値と文字列を比較す
252 るとそれらは異なるとみなされる。変数に対して"=="で比較したときに行われるような
259 つまり、リストの比較は数値や文字列の比較よりも厳格である。単純な値もリストに入
260 れることによりこの方法で比較することができる: >
272 リストの要素を個々の変数としてアンパックするには、[]の中に変数を書く: >
273 :let [var1, var2] = mylist
275 変数の個数とリストの要素数が一致しないときはエラーになる。リストにある余分な要
276 素をまとめて受け取るには、";"と受け取る変数名を書いておく: >
277 :let [var1, var2; rest] = mylist
280 :let var1 = mylist[0]
281 :let var2 = mylist[1]
282 :let rest = mylist[2:]
284 要素が 2 つしかないときでもエラーにはならない。"rest"は空リストになる。
289 リストの中の特定の要素を変更するには次のように|:let|を使う: >
290 :let list[4] = "four"
291 :let listlist[0][3] = item
293 始点と終点を指定してリストの一部分を変更することができる。代入する値は、少なく
294 とも削除する範囲の要素数と同じ数だけ必要である: >
295 :let list[3:5] = [3, 4, 5]
297 リストに要素を追加したり削除するには関数を使う。いくつか例を示す: >
298 :call insert(list, 'a') " 先頭に要素'a'を挿入する
299 :call insert(list, 'a', 3) " 要素'a'をlist[3]の前に挿入する
300 :call add(list, "new") " 文字列の要素を最後に追加する
301 :call add(list, [1, 2]) " 1個の要素としてリストをを追加する
302 :call extend(list, [1, 2]) " 2個の要素からなるリストを連結する
303 :let i = remove(list, 3) " 要素3を削除する
305 :let l = remove(list, 3, -1) " 要素3から最後までを削除する
306 :unlet list[3 : ] " 同上
307 :call filter(list, 'v:val !~ "x"') " 要素'x'を削除
310 :call sort(list) " リストをアルファベット順にソート
311 :call reverse(list) " 要素の順序を反転させる
316 |:for|ループは、1つの変数に対してリストの各要素を順番に代入し、コマンドを実行
324 :while index < len(mylist)
325 : let item = mylist[index]
327 : let index = index + 1
330 Note リストの全要素が同じ型でなければならない。そうでないとエラー|E706|にな
331 る。ループの最後でループ変数を|:unlet|すれば、異なる型でも扱える。
333 やりたいことがリストの各要素を変更するだけなら、forループを使うより関数|map()|
336 |:let|コマンドと同じように、|:for|は変数のリストをループ変数にすることができる。
337 この場合、引数はリストのリストでなければならない。 >
338 :for [lnum, col] in [[1, 3], [2, 8], [3, 0]]
339 : call Doit(lnum, col)
342 これはリストの各要素に対して|:let|コマンドを実行するかのように実行される。また
343 この場合も引数の型は全て同じでないとエラーになる。
345 引数の残りを1個のリスト変数に代入することもできる: >
346 :for [i, j; rest] in listlist
349 : echo "remainder: " . string(rest)
357 :let r = call(funcname, list) " 引数リストをつけて関数を呼び出す
358 :if empty(list) " リストが空かどうか判定する
359 :let l = len(list) " リストの要素数
360 :let big = max(list) " リスト中の最大値
361 :let small = min(list) " リスト中の最小値
362 :let xs = count(list, 'x') " 'x'の出現回数を数える
363 :let i = index(list, 'x') " 最初に'x'が現れる位置のインデックス
364 :let lines = getline(1, 10) " バッファから10行を取得
365 :call append('$', lines) " バッファに行を追加する
366 :let list = split("a b c") " 文字列を分割してリストにする
367 :let string = join(list, ', ') " リストの要素を連結して文字列にする
368 :let s = string(list) " リストの文字列表現
369 :call map(list, '">> " . v:val') " 各要素の前に">> "をつける
371 機能を組み合わせると、処理を単純に記述できることを覚えておくとよい。例えば、リ
373 :exe 'let sum = ' . join(nrlist, '+')
377 *Dictionaries* *Dictionary*
378 辞書とは連想配列である。各要素はキーと値を持つ。要素はキーによって特定できる。
383 *E720* *E721* *E722* *E723*
384 辞書を作るには、{}の中にコンマで区切って要素を書く。各要素のキーと値はコロンで
385 区切る。それぞれのキーは1度しか現れてはならない。例: >
386 :let mydict = {1: 'one', 2: 'two', 3: 'three'}
388 < *E713* *E716* *E717*
389 キーは必ず文字列である。数値を使うこともできるが、自動的に文字列に変換される。
390 よって文字列'4'のキーと数値4のキーは同一の要素を参照する。
391 entry. Note 文字列'04'と数値04は異なることに注意。なぜなら数値04は文字列'4'に
394 値はどんな式でもよい。辞書を値にすると、ネストした辞書ができる: >
395 :let nestdict = {1: {11: 'a', 12: 'b'}, 2: {21: 'c'}}
397 最後の要素の後に余分なコンマがあると無視される。
402 通常、要素にアクセスするには[]の中にキーを書く: >
403 :let val = mydict["one"]
404 :let mydict["four"] = 4
406 また、この書き方で既存の辞書に要素を追加できる。この点はリストと異なる。
408 キー名がアルファベット、数字、アンダースコアだけからなる場合は、以下の形式が使
410 :let val = mydict.one
413 要素はリストや辞書を含むどんな型でもよいため、インデックス参照とキー参照を続け
415 :echo dict.key[idx].key
420 辞書の全要素に対してループを行いたい場合がある。そのためには辞書をリストに変換
421 し、そのリストに対して|:for|ループを行う。
423 多くの場合はキーに対してループを行う。これには関数|keys()|を使う: >
424 :for key in keys(mydict)
425 : echo key . ': ' . mydict[key]
428 このキーのリストはソートされていない。ソートさせるには関数|sort()|を使う: >
429 :for key in sort(keys(mydict))
431 値に対してループを行うには関数|values()|を使う: >
432 :for v in values(mydict)
436 キーと値両方を得るには関数|items()|を使う。この関数は、キーと値の2個の要素から
438 :for [key, value] in items(mydict)
439 : echo key . ': ' . value
445 辞書のコピーを作るにはリストと同様に|copy()|と|deepcopy()|を使う必要がある。そ
446 うでなく代入を行うと同一の辞書を参照するようになる: >
447 :let onedict = {'a': 1, 'b': 2}
453 2つの辞書は、全てのキー・値のペアが等しいとき等しいとみなされる。より詳しくは
459 辞書の要素を変更したり、新しい要素を追加するには|:let|を使う: >
460 :let dict[4] = "four"
461 :let dict['one'] = item
463 辞書から要素を取り除くには|remove()|か|:unlet|を使う。以下のように辞書からキー
464 "aaa"を取り除くには3つの方法がある: >
465 :let i = remove(dict, 'aaa')
469 2つの辞書を併合させるには|extend()|を使う: >
470 :call extend(adict, bdict)
471 上のコマンドはbdictの全ての要素をadictに追加する。キーが重複した要素はbdictの
472 要素により上書きされる。この動作は3番目の引数により変更できる。
473 Note 辞書の要素間に順序は定まっていない。そのため":echo adict"としたとき、もと
474 もとadictにあった要素が先に、bdictから追加された要素が後に表示されると考えては
477 辞書から条件を指定して要素を取り除くには|filter()|が使える: >
478 :call filter(dict, 'v:val =~ "x"')
479 このコマンドは"dict"から'x'にマッチしない要素を全て取り除く。
483 *Dictionary-function* *self* *E725*
484 関数が"dict"属性つきで定義されると、特殊な方法で呼び出すことができる。例: >
485 :function Mylen() dict
486 : return len(self.data)
488 :let mydict = {'data': [0, 1, 2, 3], 'len': function("Mylen")}
491 これはオブジェクト指向プログラミングのメソッドに似ている。この辞書の要素は
492 |Funcref|である。暗黙に定義されるローカル変数"self"は、この関数を呼び出した辞
495 "dict"属性をつけないでFuncrefを辞書に入れることもできる。しかしその場合、変数
498 *numbered-function* *anonymous-function*
499 関数に名前をつける必要をなくすために、関数を定義して直接辞書に代入することがで
501 :let mydict = {'data': [0, 1, 2, 3]}
502 :function mydict.len() dict
503 : return len(self.data)
507 こうすると関数に番号がふられ、dict.lenがこの関数を参照する|Funcref|となる。こ
508 の関数は|Funcref|を通してのみ呼び出せる。参照している|Funcref|がなくなると、こ
511 番号つき関数に必ずしも"dict"属性は必要ではない。
512 訳注: It is not necessary to use the "dict" attribute for a numbered function.
518 :if has_key(dict, 'foo') " 辞書がキー"foo"の要素を持つなら真
519 :if empty(dict) " 辞書が空なら真
520 :let l = len(dict) " 辞書の要素数
521 :let big = max(dict) " 辞書中の最大値
522 :let small = min(dict) " 辞書中の最小値
523 :let xs = count(dict, 'x') " 'x'の出現回数を数える
524 :let s = string(dict) " 辞書の文字列表現
525 :call map(dict, '">> " . v:val') " 各要素の前に">> "をつける
531 変数や式の結果の型を知りたいのならば、関数|type()|を使う。
533 オプション'viminfo'にフラグ'!'が含まれるならば、大文字で始まり小文字を含まない
534 名前のグローバル変数は、viminfoファイル|viminfo-file|に格納される。
536 オプション'sessionoptions'が"global"を含むなら、大文字で始まり少なくとも一文字
537 以上の小文字を含む名前のグローバル変数は、sessionファイル|session-file|に格納
546 波括弧を使って変数名を構成できる。詳細は|curly-braces-names|を参照。
548 ==============================================================================
549 2. 式の文法 *expression-syntax*
551 式文法一覧、優先順位の低いものから高い順に:
553 |expr1| expr2 ? expr1 : expr1 if-then-else 条件式
555 |expr2| expr3 || expr3 .. 論理和
557 |expr3| expr4 && expr4 .. 論理積
559 |expr4| expr5 == expr5 等しい
562 expr5 >= expr5 大きいか等しい
564 expr5 <= expr5 小さいか等しい
565 expr5 =~ expr5 正規表現にマッチする
566 expr5 !~ expr5 正規表現にマッチしない
568 expr5 ==? expr5 文字列として等しい(大文字/小文字区別無し)
569 expr5 ==# expr5 文字列として等しい(大文字/小文字区別有り)
570 etc. 上記の各式は大小文字の区別を、?を付加すると行
573 expr5 is expr5 同一の |List| のインスタンス
574 expr5 isnot expr5 異なる |List| のインスタンス
576 |expr5| expr6 + expr6 .. 足し算またはリストの連結
578 expr6 . expr6 .. 文字列の連結
580 |expr6| expr7 * expr7 .. 掛け算
582 expr7 % expr7 .. 剰余(割った余り)
585 - expr7 単項のマイナス(訳注:-1等)
588 |expr8| expr8[expr1] 文字列のバイト、またはリストの要素
589 expr8[expr1 : expr1] 文字列の部分文字列、またはリストの部分リスト
590 expr8.name 辞書 |Dictionary| の要素
591 expr8(expr1, ...) |Funcref| 変数による関数呼び出し
594 "string" 文字列定数。バックスラッシュは特別な意味を持つ
595 'string' リテラル文字列定数。'を含めるには2重にする
596 [expr1, ...] リスト |List|
597 {expr1: expr1, ...} 辞書 |Dictionary|
601 va{ria}ble 波括弧付きの内部変数
604 function(expr1, ...) 関数呼出し
605 func{ti}on(expr1, ...) 波括弧付きの内部変数
607 ".." はその演算が、その後に他の演算を続ける事が出来ることを示している。
609 &nu || &list && &shell == "csh"
611 一つのレベルにある全ての式は左から右に解釈される。
617 expr2 ? expr1 : expr1
619 '?'より前の式は数値として評価される。その結果が非0であった場合、'?'と':'に挟ま
620 れた式の値がこの式全体の値となり、逆に0であった場合は':'以降の式の値が全体の値
623 :echo lnum == 1 ? "先頭" : lnum
625 始めの式が"expr2"であるから、そこに別の?:を含むことはできない。残り二つの式に
626 ついては以下のように再帰的な?:の利用が許される。
628 :echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum
630 読み易くするために、行継続|list-continuation|を利用することが推奨される: >
637 ':'の前には必ずスペースを入れること。そうでないと"a:1"のような変数の使用と間違
641 expr2 and expr3 *expr2* *expr3*
644 *expr-barbar* *expr-&&*
645 演算子"||"と"&&"は左右に一つずつ引数を取る。引数は数値に変換される。結果は:
648 n1 n2 n1 || n2 n1 && n2 ~
656 &nu || &list && &shell == "csh"
658 Note "&&"は"||"よりも高い優先順位を持っている。これは次の事を意味する: >
660 &nu || (&list && &shell == "csh")
662 結果が確定した時点で残りの式は省略され、解釈されない。これはC言語で行なわれる
668 これはaが非零で戻り値は絶対に非零であるから、変数bが宣言されていなくても有効で
671 echo exists("b") && b == "yes"
673 これもbが宣言されているいないに関わらず有効である。後半の項はbが定義されている
682 2つの式expr5を比較し、結果が偽なら0を、真なら1を返す。
684 *expr-==* *expr-!=* *expr->* *expr->=*
685 *expr-<* *expr-<=* *expr-=~* *expr-!~*
686 *expr-==#* *expr-!=#* *expr->#* *expr->=#*
687 *expr-<#* *expr-<=#* *expr-=~#* *expr-!~#*
688 *expr-==?* *expr-!=?* *expr->?* *expr->=?*
689 *expr-<?* *expr-<=?* *expr-=~?* *expr-!~?*
691 'ignorecase'次第 大小文字考慮 大小文字無視 ~
704 "abc" ==# "Abc" 0と評価される
705 "abc" ==? "Abc" 1と評価される
706 "abc" == "Abc" 'ignorecase'が設定されていれば1と、でなければ0と評価
709 リスト|List|はリストとだけ比較可能で、==系、!=系、is、isnotのみ利用できる。
710 これらはそれぞれのリストの値を再帰的に比較する。大文字小文字無視にすると要素を
714 辞書|Dictionary|は辞書とだけ比較可能で、==系、!=系、is、isnotのみ利用できる。
715 これらは辞書のキー/値を再帰的に比較する。大文字小文字無視にすると要素を
719 |Funcref|は|Funcref|とだけ比較可能で、"equal"と"not equal"のみ利用できる。大文
722 リスト|List|に対して"is"や"isnot"を使うと、それらの式が同じリストのインスタン
723 スを参照しているか判定される。リストのコピーと元のリストは異なると判定される。
724 リスト以外に対して"is"は"equal"と同じで、"isnot"は"not equal"と同じである。た
725 だし"is"、"isnot"は型が異なると値が等しくない点が"=="とは異なる。「4 == '4'」
728 文字列と数値を比較した場合、文字列が数値に変換され、数値として比較される。これ
729 は"0 == 'x'"が、'x'が数値としては0であることから、真となることを意味する。
731 文字列同士を比較した場合、strcmp()やstricmp()によって比較される。これは数値的
732 に(バイトの値で)比較されるのであって、必ずしも言語に基づく文字種の違いではな
735 '#'を付けた演算子を使うか、省略形かつ'ignorecase'が設定されていない場合、比較
736 はstrcmp()で行なわれる。大文字・小文字は区別される。
738 '?'を付けた演算子を使うか、省略形かつ'ignorecase'が設定されている場合、比較は
739 stricmp()で行なわれる。大文字・小文字は区別されない。
743 "=~"と"!~"演算子は右側の引数を正規表現のパターンとして、左側の引数に対してマッ
744 チを試みる。正規表現のパターンに関しては|pattern|を参照。このマッチは'magic'が
745 設定され'cpoptions'が空であるように振舞い、実際の'magic'や'cpoptions'に何が設
746 定されているには依存しない。これがスクリプトをポータブルにしてくれる。正規表現
747 中のバックスラッシュが重複してしまうのを避けるには、シングルクォーテーションの
748 文字列を使用する。詳細は|literal-string|を参照。
749 文字列は単一行として扱われるので、複数行のパターン(\nを含むもの)はマッチしな
750 い。しかしながらリテラルなヌル文字(NL)を、普通の文字として代用することはでき
752 "foo\nbar" =~ "\n" 1として評価される
753 "foo\nbar" =~ "\\n" 0として評価される
756 expr5 and expr6 *expr5* *expr6*
758 expr6 + expr6 .. 足し算、またはリストの連結 *expr-+*
759 expr6 - expr6 .. 引き算 *expr--*
760 expr6 . expr6 .. 文字列の連結 *expr-.*
762 リストに対しては"+"のみ可能で、expr6は両方ともリストでなければならない。結果は
765 expr7 * expr7 .. 掛け算 *expr-star*
766 expr7 / expr7 .. 割り算 *expr-/*
767 expr7 % expr7 .. 剰余(割った余り) *expr-%*
769 "."を除く全ての演算子は自動的に文字列を数値に変換する。
773 "123" . "456" = "123456"
775 '.' は '+' と '-' と等しい優先順位を持つので、次の式は: >
779 これはエラーにならない。というのは、"190" は自動的に数値 190 に変換さ
780 れ、それと浮動小数点数 90.0 との和になる。しかし次の式は: >
784 '.' は '*' より優先順位が低いためである。これはエラーになる。というのは、浮動
785 小数点数と文字列を結合することになるからである。
787 数値をゼロで割った結果は、被除数によって次のようになる:
788 0 / 0 = -0x80000000 (浮動小数点数の NaN のようなもの)
789 >0 / 0 = 0x7fffffff (正の無限大のようなもの)
790 <0 / 0 = -0x7fffffff (負の無限大のようなもの)
791 (訳注: >0 は正の数、<0 は負の数の意味)
792 (Vim 7.2 以前では常に 0x7fffffff だった)
794 '/'の右辺(除数)が0の場合、結果は0x7ffffffになる。
795 '%'の右辺(法)が0の場合、結果は0になる。
797 これらは全て|Funcref|には適用できない。
799 . と % は浮動小数点数には適用できない。 *E804*
804 ! expr7 論理否定 *expr-!*
805 - expr7 単項マイナス *expr-unary--*
806 + expr7 unary plus *expr-unary-+*
808 '!'演算子では非零は0に、0は1になる。
814 これら2つは繰り返したり混ぜたりできる。例:
822 expr8[expr1] 文字列またはリストの要素 *expr-[]* *E111*
824 expr8が数値か文字列ならば、この値は文字列 expr8 の第 expr1 番目のバイトからな
825 る 1 バイトの文字列となる。expr8は文字列、expr1は数として扱われる。ただし
826 expr8 がマルチバイト文字列である場合、この値は単なるバイトコードであり、1文字
827 とはならないかもしれないことに注意。マルチバイト文字列に対する代替方法は
830 インデックスが0の場合、先頭のキャラクタが得られることに注意。これはC言語のよう
831 に働く。注意:カラム番号は1から始まる。例えばカーソルの下の文字を得るためには、
833 :let c = getline(".")[col(".") - 1]
835 文字列の長さよりも大きなインデックスが指定された場合、結果は空文字列になる。負
836 数のインデックスを指定すると、結果は常に空文字列になる(後方互換性のため)。
837 最後のバイトを得るには[-1:]を使うこと。
839 expr8がリスト|List|ならばインデックスexpr1の要素が返る。取りうるインデックスの
840 値については|list-index|を参照。インデックスが範囲を超えている場合はエラーとな
842 :let item = mylist[-1] " 最後の要素を取得
844 一般的には、インデックスが正でリストの長さ以上または、負でリストの長さ×-1より
848 expr8[expr1a : expr1b] 部分文字列または部分リスト *expr-[:]*
850 expr8が数値か文字列ならば、expr1aバイトからexpr1bバイトまでの部分文字列となる
851 (両端を含む)。expr8は文字列として扱われ、expr1aとexpr1bは数値として扱われる。
852 Note マルチバイトのエンコーディングは認識しない。マルチバイト文字列のイン
853 デックスを計算する方法については |byteidx()| を参照。
855 expr1aが省略されたときは0となる。expr1bが省略されたときは文字列の長さ-1となる。
857 負数のインデックスを使うことによって文字列の末尾から取り出すことができる。-1は
858 最後の文字、-2は最後から2文字目…を表す。
860 インデックスがその文字の範囲外に出てしまったときは、その文字は省かれる。expr1b
861 がexpr1aより小さいときは空文字列となる。
864 :let c = name[-1:] " 文字列の最後のバイト
865 :let c = name[-2:-2] " 文字列の最後から2バイト目
866 :let s = line(".")[4:] " 5バイト目から末尾まで
867 :let s = s[:-3] " 最後の2文字を削除する
870 expr8がリストならば、インデックスexpr1aとexpr1bの間の要素からなる新しいリスト
871 となる。上で説明した文字列の場合と同様だが、インデックスが範囲を超えるとエラー
873 :let l = mylist[:3] " 最初の4個の要素
874 :let l = mylist[4:4] " 1個の要素からなるリスト
875 :let l = mylist[:] " リストの浅いコピー
877 |Funcref|に対してexpr8[expr1]やexpr8[expr1a : expr1b]を使うとエラーになる。
880 expr8.name 辞書|Dictionary|の要素 *expr-entry*
882 expr8が辞書|Dictionary|のとき、ドットをつけるとその後に書かれた名前が辞書のキ
883 ーと見なされる。例: expr8[name]。
885 名前は変数名と同じようにアルファベットと数字だけから構成されなければならない
886 が、数字で始まってもよい。波括弧は使えない。
891 :let dict = {"one": 1, 2: "two"}
895 Note ドットは文字列連結にも使われる。混乱を避けるために、文字列連結のドットの
899 expr8(expr1, ...) |Funcref| 関数呼び出し
901 expr8が|Funcref|型の変数のとき、その参照する関数を呼び出す。
908 number 数定数 *expr-number*
910 10進数、16進数(0xか0Xで始まる)、もしくは8進数(0で始まる)の数定数。
912 *floating-point-format*
916 [-+]{N}.{M}e[-+]{exp}
918 ここで {N} と {M} は数値である。{N} と{M} の両方とも省略してはなら
920 [-+] は、省略可能なプラスまたはマイナス記号である。
922 現在のロケールが何であれ、小数点にはドットのみを使える。コンマは使えない。
923 {|+float| 機能つきでコンパイルされたときのみ有効}
939 コピー&ペーストしておくのに便利な値: >
940 A few useful values to copy&paste: >
941 :let pi = 3.14159265359
942 :let e = 2.71828182846
945 浮動小数点数が導入される前は、123.456 と書くと 123 と 456 の2つの数値と解釈
946 され、それらが文字列に変換されて結合されて "123456" という文字列になった。
947 これは無意味であり、Vim スクリプト内で意図的に使われているものが見つからな
948 かったので、浮動小数点数の普通の表記法を用いるため、この後方非互換性は許容され
951 *floating-point-precision*
952 浮動小数点数の精度と範囲は、Vim とリンクしたライブラリの "double" の意味によ
953 る。実行時にこれを変更することはできない。
955 浮動小数点数 |Float| は printf("%g, f) とするのと同様に、小数点以下6桁まで表示
956 される。表示する桁数は |printf()| を使えば変えられる。例: >
957 :echo printf('%.15e', atan(1))
958 < 7.853981633974483e-01
962 文字列 *expr-string* *E114*
964 "string" 文字列定数 *expr-quote*
968 文字列定数には以下の特殊文字が使用できる:
969 \... 3桁の8進数字 (例 "\316")
970 \.. 2桁の8進数字 (非数字が続かなければならない)
971 \. 1桁の8進数字 (非数字が続かなければならない)
972 \x.. 2桁の16進数字 (例 "\x1f")
973 \x. 1桁の16進数字 (16進数字でないものが続かなければならない)
976 \u.... 文字を4桁の16進数で表現したもので、実際の値は現在の'encoding'の値に依
983 \r 改行(キャリッジリターン) <CR>
987 \<xxx> "xxx"という名の特殊キー。 例 "\<C-W>" は CTRL-W.
989 Note "\xff"は値255の1バイトとなる。これはエンコーディングによっては無効な値か
990 もしれない。現在の'encoding'の値に応じた文字255を得るには"\u00ff"を使う。
992 Note "\000"と"\x00"は強制的に文字列の終端として扱われる。
995 リテラル文字列 *literal-string* *E115*
997 'string' 文字列定数 *expr-'*
999 Note シングルクォートが使われていることに注意。
1001 この文字列は文字通りに扱われる。バックスラッシュは取り除かれないし、また特別な
1002 意味を持ったりもしない。唯一の例外は、2つのシングルクォートで1つのシングルクォ
1005 シングルクォートの文字列は、バックスラッシュを2重にしなくてよいため、正規表現
1006 パターンを表すのに便利である。以下の2つのコマンドは同値である: >
1011 オプション *expr-option* *E112* *E113*
1013 &option オプション変数、ローカルなものが優先
1014 &g:option グローバルオプション変数
1015 &l:option ローカルオプション変数
1018 echo "タブストップは " . &tabstop . " です"
1021 ここにはあらゆるオプション名を使うことができる。|options|を参照。ローカル変数
1022 を使おうとして、実際にはバッファローカルもウィンドウローカルも存在しない場合に
1026 レジスタ *expr-register* *@r*
1030 名前付きレジスタの中身を1つの文字列として得る。必要なところには改行文字が挿入
1031 されている。無名レジスタの中身を取得するには@"か@@を使う。利用可能なレジスタの
1032 説明については|registers|を参照。
1034 レジスタ'='を使うと、式の値でなく式そのものを得る。それを評価するには|eval()|
1038 入れ子 *expr-nesting* *E110*
1044 --------------------
1047 環境変数の文字列。定義されていない環境変数を指定した場合、結果は空文字列。
1049 Note $VARを直接使用した場合とexpand("$VAR")を使用した場合では、動作に違いがあ
1050 ることに注意。直接使用した場合には、現在のVimのセッション中で既知の値に展開さ
1051 れるだけである。expand()を使用した場合、まず最初にVimのセッション中で既知の値
1052 に展開される。それが失敗した場合、変数の展開にシェルが使用されることになる。こ
1053 れは遅くはなるが、シェルの知りうる総ての変数を展開することができる。例: >
1055 :echo expand("$version")
1056 最初の一つは恐らく何も返ってこず、2つ目は$versionの値が返ってくるだろう(貴方の
1060 内部変数 *expr-variable*
1063 以下の|internal-variables|を参照。
1066 関数呼出 *expr-function* *E116* *E118* *E119* *E120*
1068 function(expr1, ...) 関数呼出
1072 ==============================================================================
1073 3. 内部変数 *internal-variables* *E121*
1075 内部変数の名前には文字と、数字とアンダーバー('_')を使うことができる。しかし数
1076 字で始めることはできない。波括弧を使うこともできる。
1077 詳細は|curly-braces-names|を参照。
1079 内部変数は":let"コマンドで作成される|:let|。":unlet"コマンドで明示的に内部変数
1080 を破棄することができる|:unlet|。内部変数に使われてない名前か、既に破棄された内
1083 変数には幾つもの名前空間が存在する。実際にどれが利用されるかは、どのような前置
1086 (無し) 関数の中では関数ローカル、それ以外ではグローバル
1087 |buffer-variable| b: 現在のバッファにローカル
1088 |window-variable| w: 現在のウィンドウにローカル
1089 |tabpage-variable| t: 現在のタブページにローカル
1090 |global-variable| g: グローバル
1091 |local-variable| l: 関数にローカル
1092 |script-variable| s: |:source|されたVimスクリプトにローカル
1093 |function-argument| a: 関数の引数(関数内のみ)
1094 |vim-variable| v: グローバル、Vimがあらかじめ定義
1096 これらのスコープそのものに辞書を通じてアクセスできる。例えば、全てのスクリプト
1097 ローカル変数を削除するには次のようにする: >
1102 *buffer-variable* *b:var*
1103 "b:"で始まる変数名は、カレントバッファに局所的な変数を意味する。このように一つ
1104 一つのバッファ毎に、変数"b:foo"を別々に使用することができる。この種の変数は
1105 バッファが掃除(wipe out)された時や、":bdelete"で削除された時に一緒に削除され
1109 *b:changedtick-variable* *changetick*
1110 b:changedtick 現在のバッファに対する総変更の回数。変更を行うたびに増加する。
1111 これには一回のアンドゥ操作もカウントされる。この変数はバッファ
1112 に変更が行われた際にだけアクションを起こしたい時に利用できる。
1114 :if my_changedtick != b:changedtick
1115 : let my_changedtick = b:changedtick
1119 *window-variable* *w:var*
1120 "w:"で始まる変数名は、カレントウィンドウにローカルな変数を意味する。これはウィ
1123 *tabpage-variable* *t:var*
1124 "t:"で始まる変数名は、カレントタブページにローカルな変数を意味する。これはタブ
1125 ページを閉じるときに破棄される。{+windows 機能つきでコンパイルしたときのみ利用
1128 *global-variable* *g:var*
1129 関数の中からグローバル変数へアクセスするには、"g:"を付けた名前を使用する。これ
1130 が省略された場合は関数ローカルな変数にアクセスする。ただし"g:"自体は、関数の外
1133 *local-variable* *l:var*
1134 関数の中からそのローカル変数にアクセスするには何も前置しなければ良い。明示的に
1135 "l:"を付けることも可能である。ただし"l:"をつけないと予約されている変数名と衝突
1136 してしまうことがある。例: "count"とすると"v:count"を参照してしまう。"l:count"
1137 とすればローカル変数countを参照できる。
1139 *script-variable* *s:var*
1140 Vimスクリプト内では"s:"で始まる変数名を使うことができる。これはスクリプトにつ
1141 いてローカルであり、スクリプトの外部からはアクセスできない。
1143 スクリプトローカル関数は次の中で使われる:
1144 - そのスクリプトをsourceしている間に実行されるコマンド
1146 - そのスクリプト内で定義されるオートコマンド
1147 - そのスクリプト内で定義される関数やオートコマンドで定義される関数やオートコマ
1149 - そのスクリプト内で定義されるユーザ定義コマンド
1151 - そのスクリプトからsourceされる他のスクリプト
1156 グローバル変数との衝突を避けるにはスクリプト変数を使う。
1160 function MyCounter()
1161 let s:counter = s:counter + 1
1164 command Tick call MyCounter()
1166 ここで他のスクリプトから"Tick"を実行してみると、そのスクリプト内の変数
1167 "s:counter"は変化せず、"Tick"が定義されたスクリプト内の"s:counter"だけが変化す
1173 command Tick let s:counter = s:counter + 1 | echo s:counter
1175 関数呼び出しやユーザ定義コマンドを実行するとき、スクリプト変数のコンテキストは
1176 その関数、コマンドが定義されたスクリプトとなる。
1178 関数の中で関数を定義した場合、スクリプト変数も共有される。例: >
1181 function StartCounting(incr)
1183 function MyCounter()
1184 let s:counter = s:counter + 1
1187 function MyCounter()
1188 let s:counter = s:counter - 1
1193 このStartCounting()を呼ぶと、カウントアップかカウントダウンのどちらかを行う関
1194 数MyCounter()を定義する。StartCounting()がどこで呼ばれたかに関係なく、
1195 MyCounter()の中では変数s:counterにアクセスできる。
1197 同じスクリプトが再度読み込まれた場合、同一のスクリプト変数が使われる。スクリプ
1198 ト変数はVimが終了するまで存続する。以下の例はカウンタを保持する: >
1200 if !exists("s:counter")
1202 echo "script executed for the first time"
1204 let s:counter = s:counter + 1
1205 echo "script executed " . s:counter . " times now"
1208 Note これはつまり、ファイルタイププラグインはバッファごとにスクリプト変数を1セッ
1209 ト持つのではないということを意味する。そのような目的にはバッファローカル変数
1213 Vimの定義済変数: *vim-variable* *v:var*
1215 *v:beval_col* *beval_col-variable*
1216 v:beval_col マウスポインタがある桁の桁番号。|v:beval_lnum|行目のバイトイン
1217 デックスである。オプション'balloonexpr'を評価している最中のみ
1220 *v:beval_bufnr* *beval_bufnr-variable*
1221 v:beval_bufnr マウスポインタがあるバッファの番号。オプション'balloonexpr'を
1224 *v:beval_lnum* *beval_lnum-variable*
1225 v:beval_lnum マウスポインタがある行の行番号。オプション'balloonexpr'を
1228 *v:beval_text* *beval_text-variable*
1229 v:beval_text マウスポインタの下もしくは後ろにあるテキスト。Cプログラムのデ
1230 バッグのために有用。'iskeyword'が適用されるが、マウスポインタ
1231 の下より前にあるドットと"->"は含まれる。マウスポインタが']'の
1232 上にあるときは、そこから対応する'['とその前にあるテキストまで
1233 が含まれる。マウスポインタが1行に収まるビジュアル領域の上にあ
1234 るときはその選択領域となる。オプション'balloonexpr'を評価して
1237 *v:beval_winnr* *beval_winnr-variable*
1238 v:beval_winnr マウスポインタがあるウィンドウの番号。オプション'balloonexpr'
1241 *v:char* *char-variable*
1242 v:char 'formatexpr'を評価しているときの引数。また、短縮入力 |map-<expr>|
1243 で <expr> を指定しているとき、タイプされた文字を保持する。
1245 *v:charconvert_from* *charconvert_from-variable*
1247 変換しようとしているファイルの文字エンコーディング名。オプショ
1248 ン'charconvert'を評価している最中のみ有効。
1250 *v:charconvert_to* *charconvert_to-variable*
1252 変換後のファイルの文字エンコーディング名。オプション
1253 'charconvert'を評価している最中のみ有効。
1255 *v:cmdarg* *cmdarg-variable*
1256 v:cmdarg 2つの目的のために使われる:
1257 1. ファイルの読み書きコマンドに与えられる余分な引数。現在のと
1258 ころ"++enc="と"++ff="がそれである。読み書きコマンドに対する
1259 オートコマンドイベントが発生する前にこの変数が代入される。
1260 その読み書きコマンドの後に直接この変数を連結できるように、
1261 先頭にスペースがついている。Note: ここには"+cmd"引数は含ま
1262 れていない。どちらにしろそれは実行されるからである。
1263 2. ":hardcopy"でPostScriptファイルを印刷するとき、これが
1264 ":hardcopy"への引数になる。'printexpr'の中で使うことができ
1267 *v:cmdbang* *cmdbang-variable*
1268 v:cmdbang v:cmdargと同じく読み書きコマンドを実行したとき設定される。読み
1269 書きコマンドに"!"が使われたときは1となり、使われていなければ0
1270 となる。Note オートコマンドの中でのみ利用可能なことに注意。ユー
1271 ザ定義コマンドでは|<bang>|を使えば同じことができる。
1273 *v:count* *count-variable*
1274 v:count 最後に実行されたノーマルモードコマンドに渡されたコマンドの実行
1276 :map _x :<C-U>echo "the count is " . count<CR>
1277 < Note: <C-U>は、カウントの後に':'をタイプした時に示される、行範
1279 "3d2w" のようにカウントが2個指定された場合、その数が掛けられる。
1281 オプション'formatexpr'を評価するためにも使われる。
1282 また"count"は、以前の版のVimとの互換性の為に動作する。
1284 *v:count1* *count1-variable*
1285 v:count1 "v:count"と同じように、しかしカウントが指定されなかった時の省
1288 *v:ctype* *ctype-variable*
1289 v:ctype 文字に関する実行環境の現在のロケール設定。これを使えばVim
1290 スクリプト内で現在のロケール設定に対応できるようになる。技術的
1291 な詳細: LC_CTYPEに等しい。ロケールを使用していないときは"C"に
1293 この変数を設定するには|:language|コマンドを使うこと。直接設定
1297 *v:dying* *dying-variable*
1298 v:dying 通常時は0。致命的なシグナルを受信したとき1が代入される。複数
1299 のシグナルを受信すると値が増加していく。オートコマンド内でVim
1300 が正常に終了するかチェックするために使える。{Unix でのみ動作}
1302 :au VimLeave * if v:dying | echo "\nAAAAaaaarrrggghhhh!!!\n" | endif
1304 *v:errmsg* *errmsg-variable*
1305 v:errmsg 最後に表示されたエラーメッセージ。この変数は代入することが許
1311 < また"errmsg"は、以前の版のVimとの互換性の為に動作する。
1313 *v:exception* *exception-variable*
1314 v:exception 最も直近に捕捉され、まだ終了していない例外の値。
1315 |v:throwpoint|と|throw-variables|を参照。
1320 : echo "caught" v:exception
1322 < 出力: "caught oops".
1324 *v:fcs_reason* *fcs_reason-variable*
1325 v:fcs_reason |FileChangedShell|イベントが発生した理由。オートコマンドの中で
1326 何をすべきかやv:fcs_choiceに何を代入すべきかを決めるために使う。
1328 deleted もはやファイルが存在しない
1329 conflict ファイルの内容、モード、タイムスタンプ
1332 changed ファイルの内容が変化している
1333 mode ファイルのモードが変化している
1334 time タイムスタンプだけが変化している
1336 *v:fcs_choice* *fcs_choice-variable*
1337 v:fcs_choice |FileChangedShell|イベントが発生した後に何をすべきかを表す。
1338 オートコマンドの中で、そのバッファに対して何をすべきかを指示す
1340 reload バッファを読み直す(バッファが削除され
1342 ask 何をすべきかをユーザに問い合わせる。こ
1346 <empty> 何もしない。オートコマンドの中だけで必
1349 既定値は<empty>。これら意外の(無効な)値が代入されたときは空の
1350 ときと同じ動作になり、警告メッセージは表示されない。
1352 *v:fname_in* *fname_in-variable*
1353 v:fname_in 入力ファイルの名前。以下のオプションを評価している最中のみ
1356 'charconvert' 変換するファイル
1359 'printexpr' 印刷するファイル
1360 また、オートコマンドイベント|SwapExists|が発生したときスワップ
1363 *v:fname_out* *fname_out-variable*
1364 v:fname_out 出力ファイルの名前。以下のオプションを評価している最中のみ
1367 'charconvert' 変換した結果のファイル (*)
1369 'patchexpr' パッチを当てた結果のファイル
1370 (*) 書き込みコマンド(":w file"など)を実行する際の変換では
1371 v:fname_inと同じになる。読み込みコマンド(":e file"など)を実行
1372 する際の変換では一時ファイル名になり、v:fname_inと異なる。
1374 *v:fname_new* *fname_new-variable*
1375 v:fname_new 新しい方のファイル名。'diffexpr'を評価している最中のみ有効。
1377 *v:fname_diff* *fname_diff-variable*
1378 v:fname_diff diff(patch)ファイルの名前。'patchexpr'を評価している最中のみ有
1381 *v:folddashes* *folddashes-variable*
1382 v:folddashes 'foldtext'用。閉じた折り畳みのレベルを表すダッシュ。
1383 サンドボックス|sandbox|の中では読出し専用。|fold-foldtext|
1385 *v:foldlevel* *foldlevel-variable*
1386 v:foldlevel 'foldtext'用。閉じた折り畳みのレベル。
1387 サンドボックス|sandbox|の中では読出し専用。|fold-foldtext|
1389 *v:foldend* *foldend-variable*
1390 v:foldend 'foldtext'用。閉じた折り畳みの最後の行。
1391 サンドボックス|sandbox|の中では読出し専用。|fold-foldtext|
1393 *v:foldstart* *foldstart-variable*
1394 v:foldstart 'foldtext'用。閉じた折り畳みの最初の行。
1395 サンドボックス|sandbox|の中では読出し専用。|fold-foldtext|
1397 *v:insertmode* *insertmode-variable*
1398 v:insertmode オートコマンドイベント|InsertEnter|と|InsertChange|用。
1404 *v:key* *key-variable*
1405 v:key 辞書|Dictionary|の現在の要素のキー。|map()|と|filter()|で使わ
1409 *v:lang* *lang-variable*
1410 v:lang メッセージに関する実行環境の現在のロケール設定。これを使えば
1411 Vimスクリプト内で現在のロケール設定に対応できるようになる。
1412 技術的な詳細: LC_MESSAGESに等しい。この値はシステムに依存する。
1413 この変数を設定するには|:language|コマンドを使うこと。直接設定
1415 文字エンコーディングに使うのと違う言語でメッセージを表示させた
1416 い場合は|v:ctype|と異なる値でもよい。|multi-lang|を参照。
1418 *v:lc_time* *lc_time-variable*
1419 v:lc_time 時刻のメッセージに関する実行環境の現在のロケール設定。これを使
1420 えばVimスクリプト内で現在のロケール設定に対応できるようになる。
1421 技術的な詳細: LC_TIMEに等しい。この値はシステムに依存する。こ
1422 の変数を設定するには|:language|コマンドを使うこと。直接設定す
1425 *v:lnum* *lnum-variable*
1426 v:lnum 'foldexpr'と'indentexpr'に使うための行番号。また'guitablabel'
1427 と'guitabtooltip'の文脈ではタブページ番号になる。これらの式のど
1428 れかを評価しているときのみ有効。サンドボックス|sandbox|の中で
1431 *v:mouse_win* *mouse_win-variable*
1432 v:mouse_win |getchar()|でマウスクリックイベントを取得したとき、この変数に
1433 ウィンドウ番号が代入されている。|winnr()|と同じく番号は1から始
1434 まる。マウスがクリックされなかったときは0となる。
1436 *v:mouse_lnum* *mouse_lnum-variable*
1437 v:mouse_lnum |getchar()|でマウスクリックイベントを取得したとき、この変数に
1438 行番号が代入されている。物理行ではなく論理行。マウスがクリック
1441 *v:mouse_col* *mouse_col-variable*
1442 v:mouse_col |getchar()|でマウスクリックイベントを取得したとき、この変数に
1443 桁番号が代入されている。|virtcol()|と同じく画面上の桁番号。マ
1444 ウスがクリックされていないときは0となる。
1446 *v:oldfiles* *oldfiles-variable*
1447 v:oldfiles 起動時に |viminfo| から読み込まれたファイルの名前のリスト。
1448 これらはマークを記憶しているファイルである。リストの長さの上限
1449 はオプション 'viminfo' の引数 ' によって決まる(既定では 100)。
1450 |:oldfiles| と |c_#<| を参照。
1451 このリストは変更可能であるが、後で |viminfo| ファイルに書き込ま
1452 れるものには影響しない。文字列以外の値を使うと問題を引き起こす
1454 {+viminfo 機能つきでコンパイルされたときのみ有効}
1456 *v:operator* *operator-variable*
1457 v:operator ノーマルモードにおいて最後に実行したオペレータコマンド。基本的に
1458 1文字である。例外は <g> や <z> で始まるコマンドで、その場合は2文
1459 字になる。|v:prevcount| と |v:register| と組み合わせて使うとよ
1460 い。オペレータ待機モードをキャンセルして、それからオペレータを
1462 :omap O <Esc>:call MyMotion(v:operator)<CR>
1463 < この値は他のオペレータが入力されるまでセットされてい
1464 る。よって空になると期待してはいけない。
1465 |:delete|, |:yank| などの Ex コマンドに対しては v:operator は
1469 *v:prevcount* *prevcount-variable*
1470 v:prevcount 最後のノーマルモードコマンドに与えられたカウントの値。前のコマ
1471 ンドのv:countの値である。ビジュアルモードやオペレータ待機モー
1472 ドをキャンセルし、その後にカウントを使う場合に便利である。
1474 :vmap % <Esc>:call MyFilter(v:prevcount)<CR>
1477 *v:profiling* *profiling-variable*
1478 v:profiling 通常時は0。":profile start"を実行すると1が代入される。
1481 *v:progname* *progname-variable*
1482 v:progname Vimを起動したときのプログラム名(パスは除かれる)。"view"、
1483 "evim"などの名前やシンボリックリンクなどで起動した場合に特別な
1487 *v:register* *register-variable*
1488 v:register 最後のノーマルモードコマンドに指定されたレジスタの名前。レジス
1489 タが指定されなかったときは空。|getreg()| |setreg()|
1491 *v:scrollstart* *scrollstart-variable*
1492 v:scrollstart 画面のスクロールの原因となったスクリプトや関数を説明する
1493 文字列。空であるときのみ代入される。よってこの変数には最初の原
1494 因だけが記録されている。原因がキーボードから入力されたコマンド
1495 の場合は"Unknown"が代入される。
1496 スクリプトを実行したとき現れたhit-enterプロンプトの原因を探る
1499 *v:servername* *servername-variable*
1500 v:servername |x11-clientserver|に登録されている名前。
1504 v:searchforward *v:searchforward* *searchforward-variable*
1505 検索方向: 前方検索の後なら1、後方検索の後なら0。|quote/| で示す
1506 方法によって最終検索パターンを直接セットしたときは0(前方検索)
1507 にセットされる。関数から戻るとき、この値は呼び出し前の値に復元
1509 |function-search-undo|。
1512 *v:shell_error* *shell_error-variable*
1513 v:shell_error 最後に実行したシェルコマンドの結果。シェルコマンドの実行時にな
1514 にかエラーがあったならば、非零の値を取る。問題がなければ零にな
1515 る。これはシェルがエラーコードをVimに通知する時のみ働く。コマ
1516 ンドが実行されなかった時には、値として-1が良く使われる。読出し
1521 : echo 'could not rename "foo" to "bar"!'
1523 < また"shell_error"は、以前の版のVimとの互換性の為に動作する。
1525 *v:statusmsg* *statusmsg-variable*
1526 v:statusmsg 最後に表示されたステータスメッセージ。この変数は代入すること
1529 *v:swapname* *swapname-variable*
1530 v:swapname オートコマンド|SwapExists|を実行している最中のみ有効。見つかっ
1533 *v:swapchoice* *swapchoice-variable*
1534 v:swapchoice イベント|SwapExists|により実行されたオートコマンドが、見つかっ
1535 たスワップファイルをどう処理するかをこの変数に代入する。
1542 この変数の値は1文字の文字列でなければならない。値が空のときは
1543 オートコマンドSwapExistsが存在しないときと同じようにユーザに問
1546 *v:swapcommand* *swapcommand-variable*
1547 v:swapcommand ファイルを開いた後に実行するノーマルモードコマンド。オートコマ
1548 ンド|SwapExists|で、他のVimインスタンスにファイルを開かせ、指
1549 定位置までジャンプするために使うことができる。例えば、あるタグ
1550 へジャンプするには、この変数に":tag tagname\r"という値を代入す
1551 る。":edit +cmd file"を実行させるには":cmd\r"を代入する。
1553 *v:termresponse* *termresponse-variable*
1554 v:termresponse termcapのエントリ|t_RV|で端末から返されるエスケープシーケン
1555 ス。ESC [またはCSIで始まり、途中数字と';'と'.'だけから構成され
1556 'c'で終わるエスケープシーケンスを受け取ったとき代入される。
1557 このオプションがセットされるとオートコマンドイベント
1558 TermResponseが発生し、端末からの応答に反応することができる。
1559 新しいxtermからの応答は次の形式である:
1560 "<Esc>[ Pp ; Pv ; Pc c"。ここでPpは端末のタイプ: 0ならvt100、
1561 1ならvt220。Pvはパッチレベル(パッチ95で導入されたため常
1563 {Vi mが|+termresponse|機能付きでコンパイルされたときのみ有効}
1565 *v:this_session* *this_session-variable*
1566 v:this_session 最後にロードされたか、セーブされたセッションファイルの完全な
1567 ファイル名。|:mksession|を参照。この変数は代入することが許さ
1568 れている。それ以前にセーブされたセッションがなければ、この変数
1570 また"this_session"は、以前の版のVimとの互換性の為に動作する。
1572 *v:throwpoint* *throwpoint-variable*
1573 v:throwpoint 最も直近に捕捉されてまだ終了していない例外が発生した位置。キー
1574 ボードから入力されたコマンドは記録されていない。|v:exception|
1575 と|throw-variables|も参照。
1580 : echo "Exception from" v:throwpoint
1582 < 出力: "Exception from test.vim, line 2"
1584 *v:val* *val-variable*
1585 v:val 辞書|Dictionary|の現在の要素の値。|map()|と|filter()|で使わ
1589 *v:version* *version-variable*
1590 v:version Vimのバージョン番号。メジャーバージョン番号は100倍され、マイ
1591 ナーバージョン番号と足されている。Version 5.0は500。Version
1592 5.1 (5.01)は501となる。読出し専用。また"version"は、以前の版の
1594 特定のパッチが摘要されているかを調べるには|has()|を使う。例: >
1596 < 5.0と5.1には両方ともパッチ123が存在しているが、バージョンが違
1597 えば番号は同じでもパッチの内容は全く異なっている。
1599 *v:warningmsg* *warningmsg-variable*
1600 v:warningmsg 最後に表示された警告メッセージ。この変数は代入することが許され
1603 ==============================================================================
1604 4. 組み込み関数 *functions*
1606 (関数名の上でCTRL-]を使うことで、詳細な説明へ飛ぶことができる)
1610 abs( {expr}) 浮動小数点数または数値 {expr}の絶対値
1611 add( {list}, {item}) リスト {item}をリスト{list}に追加する
1612 append( {lnum}, {string}) 数値 {string}を{lnum}行目に付け加える
1613 append( {lnum}, {list}) 数値 行{list}を{lnum}行目に付け加える
1614 argc() 数値 引数内のファイルの数
1615 argv( {nr}) 文字列 引数の第{nr}番目
1617 atan( {expr}) 浮動小数点数 {expr}のアークタンジェント
1618 browse( {save}, {title}, {initdir}, {default})
1620 browsedir( {title}, {initdir}) 文字列 ディレクトリ選択ダイアログを表示
1621 bufexists( {expr}) 数値 バッファ{expr}が存在すればTRUE
1622 buflisted( {expr}) 数値 バッファ{expr}がリストにあるならTRUE
1623 bufloaded( {expr}) 数値 バッファ{expr}がロード済みならTRUE
1624 bufname( {expr}) 文字列 バッファ{expr}の名前
1625 bufnr( {expr}) 数値 バッファ{expr}の番号
1626 bufwinnr( {nr}) 数値 バッファ{nr}のウィンドウ番号
1627 byte2line( {byte}) 数値 {byte}番目のバイトの行番号
1628 byteidx( {expr}, {nr}) 数値 {expr}の{nr}文字目のバイトインデックス
1629 call( {func}, {arglist} [, {dict}])
1630 任意 引数{arglist}をつけて{func}を呼ぶ
1631 ceil( {expr}) 浮動小数点数 {expr} を切り上げる
1632 changenr() 数値 現在の変更番号
1633 char2nr( {expr}) 数値 {expr}の先頭文字のASCIIコード
1634 cindent( {lnum}) 数値 {lnum}行目のCインデント量
1635 clearmatches() なし 全マッチをクリアする
1636 col( {expr}) 数値 カーソルかマークのカラム番号nr
1637 complete( {startcol}, {matches}) なし インサートモード補完を設定する
1638 complete({startcol}, {matches}) 文字列 インサートモード補完の結果を設定する
1639 complete_add( {expr}) 数値 補完候補を追加する
1640 complete_check() 数値 補完中に押されたキーをチェックする
1641 confirm( {msg}, {choices} [, {default} [, {type}]])
1643 copy( {expr}) 任意 {expr}の浅いコピーを作る
1644 cos( {expr}) 浮動小数点数 {expr} の余弦(コサイン)
1645 count( {list}, {expr} [, {start} [, {ic}]])
1646 数値 {list}中に{expr}が何個現れるか数える
1647 cscope_connection( [{num} , {dbpath} [, {prepend}]])
1649 cursor( {lnum}, {col} [, {coladd}])
1650 数値 カーソルを{lnum}, {col}, {coladd}へ移動
1651 cursor( {list}) 数値 カーソルを{list}の位置へ移動
1652 deepcopy( {expr}) 任意 {expr}の完全なコピーを作る
1653 delete( {fname}) 数値 ファイル{fname}を消す
1654 did_filetype() 数値 FileTypeのautocommandが実行されたか?
1655 diff_filler( {lnum}) 数値 diffモードで{lnum}に挿入された行
1656 diff_hlID( {lnum}, {col}) 数値 diffモードで{lnum}/{col}位置の強調
1657 empty( {expr}) 数値 {expr}が空ならTRUE
1658 escape( {string}, {chars}) 文字列 {string}内の{chars}を'\'でエスケープ
1659 eval( {string}) 任意 {string}を評価し、値を得る
1660 eventhandler( ) 数値 イベントハンドラの内側ならTRUE
1661 executable( {expr}) 数値 実行可能な{expr}が存在するなら1
1662 exists( {var}) 数値 変数{var}が存在したらTRUE
1663 extend( {expr1}, {expr2} [, {expr3}])
1664 リスト/辞書 {expr1}に{expr2}の要素を挿入
1665 expand( {expr} [, {flag}]) 文字列 {expr}内の特別なキーワードを展開
1666 feedkeys( {string} [, {mode}]) 数値 先行入力バッファにキーシーケンスを追加
1667 filereadable( {file}) 数値 {file}が読みこみ可能ならTRUE
1668 filewritable( {file}) Number {file}が書き込み可能ならTRUE
1669 filter( {expr}, {string}) リスト/辞書 {string}が0となる要素を{expr}から
1671 finddir( {name}[, {path}[, {count}]])
1672 文字列 {path}からディレクトリ{name}を探す
1673 findfile( {name}[, {path}[, {count}]])
1674 文字列 {path}からファイル{name}を探す
1675 float2nr( {expr}) 数値 浮動小数点数 {expr} を数値に変換する
1676 floor( {expr}) 浮動小数点数 {expr} を切り捨てる
1677 fnameescape( {fname}) 文字列 {fname} 内のの特殊文字をエスケープする
1678 fnamemodify( {fname}, {mods}) 文字列 ファイル名を変更
1679 foldclosed( {lnum}) 数値 {lnum}の折り畳みの最初の行(閉じている
1681 foldclosedend( {lnum}) 数値 {lnum}の折り畳みの最後の行(閉じている
1683 foldlevel( {lnum}) 数値 {lnum}の折り畳みレベル
1684 foldtext( ) 文字列 閉じた折り畳みに表示されている行
1685 foldtextresult( {lnum}) 文字列 {lnum}で閉じている折り畳みのテキスト
1686 foreground( ) 数値 Vimウィンドウを前面に移動する
1687 function( {name}) Funcref 関数{name}への参照を取得
1688 garbagecollect( [at_exit]) なし メモリを解放する。循環参照を断ち切る
1689 get( {list}, {idx} [, {def}]) 任意 {list}や{def}から要素{idx}を取得
1690 get( {dict}, {key} [, {def}]) 任意 {dict}や{def}から要素{key}を取得
1691 getbufline( {expr}, {lnum} [, {end}])
1692 リスト バッファ{expr}の{lnum}から{end}行目
1693 getbufvar( {expr}, {varname}) 任意 バッファ{expr}の変数 {varname}
1694 getcmdline() 文字列 現在のコマンドラインを取得
1695 getcmdpos() 数値 コマンドラインのカーソル位置を取得
1696 getcmdtype() 文字列 現在のコマンドラインの種類を取得
1697 getcwd() 文字列 現在の作業ディレクトリ
1698 getfperm( {fname}) 文字列 ファイル{fname}の許可属性を取得
1699 getfsize( {fname}) 数値 ファイル{fname}のバイト数を取得
1700 getfontname( [{name}]) 文字列 使用しているフォントの名前
1701 getftime( {fname}) 数値 ファイルの最終更新時間
1702 getftype( {fname}) 文字列 ファイル{fname}の種類の説明
1703 getline( {lnum}) 文字列 現在のバッファから行の内容を取得
1704 getline( {lnum}, {end}) リスト カレントバッファの{lnum}から{end}行目
1705 getloclist( {nr}) リスト ロケーションリストの要素のリスト
1706 getmatches() リスト 現在のマッチのリスト
1707 getpid() 数値 Vim のプロセス ID
1708 getpos( {expr}) リスト カーソル・マークなどの位置を取得
1709 getqflist() リスト quickfixリストの要素のリスト
1710 getreg( [{regname} [, 1]]) 文字列 レジスタの中身を取得
1711 getregtype( [{regname}]) 文字列 レジスタの種類を取得
1712 gettabwinvar( {tabnr}, {winnr}, {name})
1713 任意 タブページ{tabnr}の{winnr}の{name}
1714 getwinposx() 数値 GUI vim windowのX座標
1715 getwinposy() 数値 GUI vim windowのY座標
1716 getwinvar( {nr}, {varname}) 文字列 ウィンドウ{nr}の変数{varname}
1717 glob( {expr} [, {flag}]) 文字列 {expr}内のfile wildcardを展開
1718 globpath( {path}, {expr} [, {flag}])
1719 文字列 {path}の全ディレクトリに対し
1721 has( {feature}) 数値 機能{feature}がサポートならばTRUE
1722 has_key( {dict}, {key}) 数値 {dict}が要素{key}を持つならTRUE
1723 haslocaldir() 数値 現在のウィンドウで|:lcd|が実行された
1725 hasmapto( {what} [, {mode} [, {abbr}]])
1726 数値 {what}へのマッピングが存在するならTRUE
1727 histadd( {history},{item}) 文字列 ヒストリに追加
1728 histdel( {history} [, {item}]) 文字列 ヒストリからitemを削除
1729 histget( {history} [, {index}]) 文字列 ヒストリから{index}アイテムを取得
1730 histnr( {history}) 数値 ヒストリの数
1731 hlexists( {name}) 数値 highligth group {name}が存在したらTRUE
1732 hlID( {name}) 数値 highlight group {name}のID
1733 hostname() 文字列 vimが動作しているマシンの名前
1734 iconv( {expr}, {from}, {to}) 文字列 {expr}のエンコーディングを変換する
1735 indent( {lnum}) 文字列 行{lnum}のインデントを取得
1736 index( {list}, {expr} [, {start} [, {ic}]])
1737 数値 {list}中に{expr}が現れる位置
1738 input( {prompt} [, {text} [, {completion}]])
1740 inputdialog( {p} [, {t} [, {c}]]) 文字列 input()と同様。GUIのダイアログを使用
1741 inputlist( {textlist}) 数値 ユーザに選択肢から選ばせる
1742 inputrestore() 数値 先行入力を復元する
1743 inputsave() 数値 先行入力を保存し、クリアする
1744 inputsecret( {prompt} [, {text}]) 文字列 input()だがテキストを隠す
1745 insert( {list}, {item} [, {idx}]) リスト {list}に要素{item}を挿入 [{idx}の前]
1746 isdirectory( {directory}) 数値 {directory}がディレクトリならばTRUE
1747 islocked( {expr}) 数値 {expr}がロックされているならTRUE
1748 items( {dict}) リスト {dict}のキーと値のペアを取得
1749 join( {list} [, {sep}]) 文字列 {list}の要素を連結して文字列にする
1750 keys( {dict}) リスト {dict}のキーを取得
1751 len( {expr}) 数値 {expr}の長さを取得
1752 libcall( {lib}, {func}, {arg} 文字列 ライブラリ{lib}の関数{func}をコール
1753 libcallnr( {lib}, {func}, {arg}) 数値 上と同じ。ただし数値を返す
1754 line( {expr}) 数値 行番号の取得
1755 line2byte( {lnum}) 数値 行{lnum}のバイトカウント
1756 lispindent( {lnum}) 数値 {lnum}行目のLispインデント量を取得
1758 log10( {expr}) 浮動小数点数 浮動小数点数 {expr} の 10 を底
1760 map( {expr}, {string}) リスト/辞書 {expr}の各要素を{expr}に変える
1761 matchadd( {group}, {pattern}[, {priority}[, {id}]])
1762 数値 {pattern} を {group} で強調表示する
1763 maparg( {name}[, {mode} [, {abbr}]])
1764 文字列 モード{mode}でのマッピング{name}の値
1765 mapcheck( {name}[, {mode} [, {abbr}]])
1766 文字列 {name}にマッチするマッピングを確認
1767 match( {expr}, {pat}[, {start}[, {count}]])
1768 数値 {expr}内で{pat}がマッチする位置
1769 matcharg( {nr}) リスト |:match|の引数
1770 matchdelete( {id}) 数値 {id} で指定されるマッチを削除する
1771 matchend( {expr}, {pat}[, {start}[, {count}]])
1772 数値 {expr}内で{pat}が終了する位置
1773 matchlist( {expr}, {pat}[, {start}[, {count}]])
1774 リスト {expr}内の{pat}のマッチと部分マッチ
1775 matchstr( {expr}, {pat}[, {start}[, {count}]])
1776 文字列 {expr}内の{count}'番目の{pat}のマッチ
1777 max( {list}) 数値 {list}内の要素の最大値
1778 min( {list}) 数値 {list}内の要素の最小値
1779 mkdir( {name} [, {path} [, {prot}]])
1781 mode( [expr]) 文字列 現在の編集モード
1782 nextnonblank( {lnum}) 数値 {lnum}行目以降で空行でない行の行番号
1783 nr2char( {expr}) 文字列 ASCIIコード{expr}で示されるキャラクタ
1784 pathshorten( {expr}) 文字列 path内の短縮したディレクトリ名
1785 pow( {x}, {y}) 浮動小数点数 {x} の {y} 乗
1786 prevnonblank( {lnum}) 数値 {lnum}行目以前の空行でない行の行番号
1787 printf( {fmt}, {expr1}...) 文字列 文字列を組み立てる
1788 pumvisible() 数値 ポップアップメニューが表示されているか
1789 range( {expr} [, {max} [, {stride}]])
1790 リスト {expr}から{max}までの要素のリスト
1791 readfile( {fname} [, {binary} [, {max}]])
1792 リスト ファイル{fname}から行のリストを取得
1793 reltime( [{start} [, {end}]]) リスト 時刻の値を取得
1794 reltimestr( {time}) 文字列 時刻の値を文字列に変換
1795 remote_expr( {server}, {string} [, {idvar}])
1797 remote_foreground( {server}) 数値 Vimサーバを前面に出す
1798 remote_peek( {serverid} [, {retvar}])
1800 remote_read( {serverid}) 文字列 返信文字列を読み込む
1801 remote_send( {server}, {string} [, {idvar}])
1803 remove( {list}, {idx} [, {end}]) 任意 {list}から{idx}〜{end}の要素を削除
1804 remove( {dict}, {key}) 任意 {dict}から要素{key}を削除
1805 rename({from}, {to}) 数値 {file}から{to}へファイル名変更
1806 repeat( {expr}, {count}) 文字列 {expr}を{count}回繰り返す
1807 resolve( {filename}) 文字列 ショートカットが指す先のファイル名
1808 reverse( {list}) 文字列 {list}をその場で反転させる
1809 round( {expr}) 浮動小数点数 {expr} を四捨五入する
1810 search( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
1812 searchdecl( {name} [, {global} [, {thisblock}]])
1814 searchpair( {start}, {middle}, {end} [, {flags} [, {skip} [...]]])
1816 searchpairpos( {start}, {middle}, {end} [, {flags} [, {skip} [...]]])
1818 searchpos( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
1820 server2client( {clientid}, {string})
1822 serverlist() 文字列 利用可能なサーバのリストを取得
1823 setbufvar( {expr}, {varname}, {val}) バッファ{expr}内の変数{varname}に{val}
1825 setcmdpos( {pos}) 数値 コマンドライン内のカーソル位置を設定
1826 setline( {lnum}, {line}) 数値 行{lnum}に{line}(文字列)をセット
1827 setloclist( {nr}, {list}[, {action}])
1828 数値 {list}を使ってロケーションリストを変更
1829 setmatches( {list}) 数値 マッチのリストを復元する
1830 setpos( {expr}, {list}) なし {expr}の位置を{list}にする
1831 setqflist( {list}[, {action}]) 数値 {list}を使ってQuickFixリストを変更
1832 setreg( {n}, {v}[, {opt}]) 数値 レジスタの値とタイプを設定
1833 settabwinvar( {tabnr}, {winnr}, {varname}, {val}) タブページ{tabnr}内のウィン
1834 ドウ{nr}の変数{varname}に{val}をセット
1835 {winnr} in tab page {tabnr} to {val}
1836 setwinvar( {nr}, {varname}, {val}) ウィンドウ{nr}の変数{varname}に{val}を
1838 shellescape( {string} [, {special}])
1839 文字列 {string}をシェルコマンド引数として使う
1841 simplify( {filename}) 文字列 ファイル名を可能なかぎり簡略化する
1842 sin( {expr}) 浮動小数点数 {expr} の正弦(サイン)
1843 sort( {list} [, {func}]) リスト 比較に{func}を使って{list}をソートする
1844 soundfold( {word}) 文字列 {word}のsound-fold
1845 spellbadword() 文字列 カーソル位置のスペルミスした単語
1846 spellsuggest( {word} [, {max} [, {capital}]])
1848 split( {expr} [, {pat} [, {keepempty}]])
1849 リスト {expr}を{pat}で区切ってリストを作る
1850 sqrt( {expr} 浮動小数点数 {expr} の平方根
1851 str2float( {expr}) 浮動小数点数 文字列を浮動小数点数に変換する
1852 str2nr( {expr} [, {base}]) 数値 文字列を数値に変換する
1853 strftime( {format}[, {time}]) 文字列 指定されたフォーマットでの時刻
1854 stridx( {haystack}, {needle}[, {start}])
1855 数値 {haystack}内の{needle}のインデックス
1856 string( {expr}) 文字列 {expr}の値の文字列表現
1857 strlen( {expr}) 数値 文字列{expr}の長さ
1858 strpart( {src}, {start}[, {len}])
1859 文字列 {src}内{start}から長さ{len}の部分
1860 strridx( {haystack}, {needle} [, {start}])
1861 数値 {haystack}内の最後の{needle}のインデッ
1863 strtrans( {expr}) 文字列 文字列を表示可能に変更
1864 submatch( {nr}) 文字列 ":substitute"における特定のマッチ
1865 substitute( {expr}, {pat}, {sub}, {flags})
1866 文字列 {expr}の{pat}を{sub}に置換え
1867 synID( {line}, {col}, {trans}) 数値 {line}と{col}のsyntax IDを取得
1868 synIDattr( {synID}, {what} [, {mode}])
1869 文字列 syntax ID{synID}の属性{what}を取得
1870 synIDtrans( {synID}) 数値 {synID}の翻訳されたsyntax ID
1871 synstack( {lnum}, {col}) リスト {lnum}行{col}列目における構文IDの
1873 system( {expr} [, {input}]) 文字列 シェルコマンド{expr}の出力結果
1874 tabpagebuflist( [{arg}]) リスト タブページ内のバッファ番号のリスト
1875 tabpagenr( [{arg}]) 数値 現在または最後のタブページの番号
1876 tabpagewinnr( {tabarg}[, {arg}])
1877 数値 タブページ内の現在のウィンドウの番号
1878 taglist( {expr}) リスト {expr}にマッチするタグのリスト
1879 tagfiles() リスト 使用しているタグファイルのリスと
1880 tempname() 文字列 テンポラリファイルの名前
1881 tolower( {expr}) 文字列 文字列{expr}を小文字にする
1882 toupper( {expr}) 文字列 文字列{expr}を大文字にする
1883 tr( {src}, {fromstr}, {tostr}) 文字列 {src}中に現れる文字{fromstr}を{tostr}
1885 trunc( {expr} 浮動小数点数 浮動小数点数 {expr} を切り詰め
1887 type( {name}) 数値 変数{name}の型
1888 values( {dict}) リスト {dict}の値のリスト
1889 virtcol( {expr}) 数値 カーソルのスクリーンカラム位置
1890 visualmode( [expr]) 文字列 最後に使われたVisualモード
1891 winbufnr( {nr}) 数値 ウィンドウ{nr}のバッファ番号
1892 wincol() 数値 カーソル位置のウィンドウ桁
1893 winheight( {nr}) 数値 ウィンドウ{nr}の高さ
1894 winline() 数値 カーソル位置のウィンドウ行
1895 winnr() 数値 現在のウィンドウの番号
1896 winrestcmd() 文字列 ウィンドウサイズを復元するコマンド
1897 winrestview( {dict}) なし 現在のウィンドウのビューを復元
1898 winsaveview() 辞書 現在のウィンドウのビューを保存
1899 winwidth( {nr}) 数値 ウィンドウ{nr}の幅を取得
1900 writefile( {list}, {fname} [, {binary}])
1901 数値 行のリストをファイル{fname}に書き込む
1905 {expr} の絶対値を返す。{expr} の値が浮動小数点数である場合は浮
1906 動小数点数を返す。{expr} が|Number|に変換可能な場合は数値が戻
1907 り値になる。それ以外の場合はエラーメッセージを表示し、-1
1916 {|+float| 機能を有効にしてコンパイルしたときのみ有効}}
1918 add({list}, {expr}) *add()*
1919 リスト|List|{list}の末尾に要素{expr}を追加する。結果のリストを
1921 :let alist = add([1, 2, 3], item)
1922 :call add(mylist, "woodstock")
1923 < Note {expr}がリストのときは、1個の要素として追加される。リスト
1924 を連結するには|extend()|を使う。
1925 他の位置に要素を追加するには|insert()|を使う。
1928 append({lnum}, {expr}) *append()*
1929 {expr}がリスト|List|のときは、各要素をカレントバッファの{lnum}
1931 リストでないときは、{expr}をテキストとしてカレントバッファの{lnum}
1933 {lnum}は0でもよく、その場合は1行目の前に行を挿入する。
1934 失敗した場合は0を返す({lnum}が不正な範囲であるか、メモリ不足)。
1936 :let failed = append(line('$'), "# THE END")
1937 :let failed = append(0, ["Chapter 1", "the beginning"])
1940 argc() カレントウィンドウの引数リスト内の、ファイルの数を返す。
1944 argidx() 引数リスト内の現在のインデックスを返す。最初のファイルは0とな
1945 る。argc() - 1が最後のファイルとなる。|arglist|を参照。
1948 argv([{nr}]) 結果は引数リスト内の、{nr}番目のファイル。|arglist|を参照。
1949 "argv(0)"は一番最初のファイルを示す。例: >
1952 : let f = escape(fnameescape(argv(i)), '.')
1953 : exe 'amenu Arg.' . f . ' :e ' . f . '<CR>'
1956 < 引数{nr}が指定されなかった場合は、引数リスト|arglist|全体を
1959 atan({expr}) *atan()*
1960 {expr} の逆正接(アークタンジェント)の主値を浮動小数点数
1961 |Float| で返す。主値はラジアンで[-pi/2, +pi/2]の範囲内にある。
1962 {expr} は |Float| か |Number| に評価されなければならない。
1968 {|+float| 機能つきでコンパイルされたときのみ有効}
1971 browse({save}, {title}, {initdir}, {default})
1972 ファイル選択ダイアログを起動。"has("browser")"が非零を返すとき
1973 (幾つかのGUIバージョンに限定)だけ利用可能。
1975 {save} 非零ならば書込み用ファイルの選択
1977 {initdir} ダイアログの始まるディレクトリ
1979 ダイアログがキャンセルされるか、何かエラーがあるか、もしくはブ
1980 ラウジングが不可能ならば、空文字列が戻ってくる。
1983 browsedir({title}, {initdir})
1984 ディレクトリ選択ダイアログを起動。"has("browse")"が非零を返す
1985 とき(幾つかのGUIバージョンに限定)だけ利用可能。
1986 ディレクトリ選択ダイアログがないシステムにおいてはファイル選択
1987 ダイアログが使われる。その場合は、指定したいディレクトリの中の
1991 {initdir} ダイアログの始まるディレクトリ
1992 ダイアログがキャンセルされるか、何かエラーがあるか、もしくはブ
1993 ラウジングが不可能ならば、空文字列が戻ってくる。
1997 結果は数値で、{expr}と呼ばれるバッファが存在すれば非零となる。
1998 {expr}が数値の場合、バッファ番号とみなされる。
1999 {expr}が文字列の場合、バッファ名に正確にマッチしなければな
2000 らない。名前として以下のものが許される:
2001 - カレントディレクトリからの相対パス。
2003 - 'buftype'が"nofile"であるバッファの名前
2005 バッファリストにないバッファも検索される。
2006 Note |:buffers|の出力で、ヘルプファイルは短い名前でリストされ
2007 ているが、bufexists()は長い名前でないと見つけることができない。
2008 ある名前を bufexists() に与えて非零になったとしても、その名前
2009 をコマンド |:buffer| に与える際には |expand()| を使って展開し
2010 なければならない場合がある。特に MS-Windows の "c:\DOCUME~1"
2012 代替ファイル名が存在するかを判定するには"bufexists(0)"を使う。
2014 以前の名前: buffer_exists().
2018 戻り値は数値で、{expr}と呼ばれるバッファが存在しロード済み(
2019 ウィンドウに表示されているか、隠されているかは問わない)ならば
2020 結果は非零となる。引数{expr}は|bufexists()|と同じように扱われ
2025 戻り値はバッファの名前。バッファ名はコマンド":ls"で表示される
2027 {expr}が数値ならば、その番号のバッファ名が返される。0は現在の
2028 ウィンドウの代替バッファを意味する。{expr}が文字列ならば、バッ
2029 ファ名に対してファイル名マッチング|file-pattern|を行なうパター
2030 ンとなる。このマッチングは常に、'magic'をセットし'cpoptions'を
2031 空にした状態で行なわれる。複数マッチしてしまった場合には空文字
2032 列が返される。""や"%"は現在のバッファを意味し、"#"は代替バッファ
2034 完全マッチのものが優先され、完全マッチがなければ、バッファ名の
2035 先頭でのマッチ、末尾でのマッチ、中間でのマッチが探される。完全
2036 マッチのみを探すには、パターン先頭に"^"を、末尾に"$"をつける。
2037 まずバッファリストにあるバッファが探される。そこで1個だけマッ
2038 チが見つかればそれを返す。次にバッファリストにないものが探され
2040 {expr}が文字列のときに、それをバッファ番号として使いたいなら
2041 ば、0を足すことによって強制的に数値にすることができる: >
2042 echo bufname("3" + 0)
2043 < バッファが存在しないか名前を持っていない場合には、空文字列が返
2045 bufname("#") alternate buffer name
2046 bufname(3) name of buffer 3
2047 bufname("%") name of current buffer
2048 bufname("file2") name of buffer where "file2" matches.
2050 以前の名前: buffer_name().
2053 bufnr({expr} [, {create}])
2054 結果はバッファの番号。バッファ番号はコマンド":ls"で表示される
2055 ものと同様。{expr}の使い方は前述のbufname()を参照。バッファが
2056 存在しない場合-1が返される。ただし、{create}が与えられて0でな
2057 いときは、バッファリストに載せない新しいバッファを作成しその番
2059 bufnr("$")は最後のバッファを意味する: >
2060 :let last_buffer = bufnr("$")
2061 < 結果は存在しているバッファのうちで、もっとも大きなバッファ番号
2062 となる。 Note そのバッファ番号より小さいバッファ番号を持つ(ハ
2063 ズの)バッファが、必ずしも総て存在するとは限らない。なぜなら
2064 ":bwipeout"がバッファを消すことができるからだ。バッファが存在
2065 するかテストするにはbufexists()を使う。
2067 以前の名前: buffer_number().
2069 bufnr("$")の以前の名前: last_buffer_nr().
2073 結果は数値で、バッファ{expr}に関連付けられた最初のウィンドウの
2074 番号。{expr}の使い方は前述の|bufname()|を参照。バッファ{expr}
2075 が存在しないか、ウィンドウが無い場合には-1を返す。例: >
2077 echo "A window containing buffer 1 is " . (bufwinnr(1))
2079 < この番号は|CTRL-W_w|や":wincmd w"|:wincmd|で使える。
2080 カレントタブページ内のウィンドウだけを探す。
2083 カレントバッファの先頭から{byte}番目の文字が、何行目に含まれる
2084 かを返す。これにはカレントバッファの'fileformat'に依存した、改
2085 行文字も含まれる。先頭の文字にはバイトカウント1が与えられる。
2086 |line2byte()|と|go|と|:goto|も参照。
2087 {|+byte_offset|機能付きでコンパイルされたときのみ有効}
2089 byteidx({expr}, {nr}) *byteidx()*
2090 文字列{expr}の{nr}番目の文字のバイトインデックスを返す。
2091 最初の文字の{nr}は0であり、戻り値は0となる。この関数はマルチバ
2092 イト文字が存在するときのみ有用であり、そうでなければこの関数が
2093 返す値は{nr}に等しい。合成文字は別々の文字と数えられる。
2095 echo matchstr(str, ".", byteidx(str, 3))
2096 < は4文字目を表示する。次も同じことをする: >
2097 let s = strpart(str, byteidx(str, 3))
2098 echo strpart(s, 0, byteidx(s, 1))
2099 < {expr}が{nr}文字以下の場合は-1を返す。
2100 {expr}がちょうど{nr}文字の場合は文字列の長さ(バイト単位)を返す。
2102 call({func}, {arglist} [, {dict}]) *call()* *E699*
2103 リスト|List|{arglist}の要素を引数として関数{func}を呼ぶ。
2104 {func}は|Funcref|でも関数の名前でもよい。
2105 a:firstlineとa:lastlineにはカレント行が代入される。
2107 {dict}は"dict"属性つきの関数用で、これがローカル変数"self"に代
2108 入される。|Dictionary-function|を参照。
2110 ceil({expr}) *ceil()*
2111 {expr} 以上となる最小の整数を浮動小数点数 |Float| で返す
2113 {expr} は |Float| か |Number| に評価されなければならない。
2121 {|+float| 機能つきでコンパイルされたときのみ有効}
2123 changenr() *changenr()*
2124 最も最近の変更の番号を返す。|:undolist|で表示される番号と同じ
2125 であり、|:undo|コマンドの引数として使うことができる。
2126 変更を行った直後ではその変更の番号となる。redoを行った直後は
2127 redoされた変更の番号となる。undoを行った直後はundoされた変更よ
2132 {expr}の最初の文字のASCIIコードを返す。例: >
2133 char2nr(" ") returns 32
2134 char2nr("ABC") returns 65
2135 < 現在の'encoding'の値が適用される。"utf-8"のときの例: >
2136 char2nr("á") returns 225
2137 char2nr("á"[0]) returns 195
2138 < |nr2char()| はこの逆を行う。
2140 cindent({lnum}) *cindent()*
2141 'cindent'で使われるのと同じC言語用のインデント規則に従った場合
2142 の{lnum}行目のインデント量を返す。
2143 インデント量はスペースで数えられ、'tabstop'の値は関係ない。
2144 {lnum}は|getline()|の場合と同様に扱われる。
2145 {lnum}が無効な値のときや|+cindent|機能なしでコンパイルされてい
2149 clearmatches() *clearmatches()*
2150 |matchadd()| と コマンド |:match| により定義されたマッチをすべ
2155 戻り値は数値で、{expr}で与えられる位置の桁番号(バイトインデッ
2158 $ カレント行の末尾(カレント行のバイト数+1を返す)
2159 'x マークxの位置(マークが設定されていない場合0)
2160 さらに {expr} は [lnum, col] という行番号と桁番号のリストで
2161 あってもよい。col に "$" を指定して、ある行の最後の桁を取得す
2162 るのにとても便利である。"lnum" か "col" が範囲外である場合は
2164 行番号を取得するには|line()|を使う。行番号と桁番号両方を取得す
2166 画面上の桁番号を取得するには|virtcol()|を使う。
2167 Note 現在のファイルのマークしか使えないことに注意。
2172 col("'" . markname) マークmarknameの桁
2173 < 先頭の桁は1になる。戻り値0はエラーを意味する。
2174 大文字のマークは他のバッファを指しているかもしれない。
2175 'virtualedit'が有効なとき、カーソルが行末を越えていると、桁番
2176 号は行の長さより1大きい値を返す。インサートモードで桁番号を取
2178 :imap <F2> <C-O>:let save_ve = &ve<CR>
2179 \<C-O>:set ve=all<CR>
2180 \<C-O>:echo col(".") . "\n" <Bar>
2181 \let &ve = save_ve<CR>
2183 complete({startcol}, {matches}) *complete()* *E785*
2185 インサートモードでのみ使用できる。CTRL-R = |i_CTRL-R|と組み合
2186 わせてマッピングを作る必要がある。CTRL-Oの後や、<expr>マッピン
2188 {startcol}は補完すべき単語の開始位置を示す、行内のバイトオフセッ
2189 トである。その位置からカーソルまでのテキストが補完すべき単語と
2191 {matches}はリスト|List|でなければならない。リストの各要素が1つ
2192 の候補となる。この要素として許される値については
2193 |complete-items|を参照。
2194 Note この関数を呼んだ後は補完を停止させるようなテキストの挿入
2196 この関数で設定した候補は普通のインサートモード補完と同じ様に
2197 CTRL-NとCTRL-Pで選択できる。設定されていればポップアップメニュー
2198 が表示される。|ins-completion-menu|を参照。
2200 inoremap <F5> <C-R>=ListMonths()<CR>
2202 call complete(col('.'), ['January', 'February', 'March',
2203 \ 'April', 'May', 'June', 'July', 'August', 'September',
2204 \ 'October', 'November', 'December'])
2207 < この例はそれほど役には立たないが、使い方を示している。Note 0が
2208 挿入されてしまわないように空文字列を返していることに注意。
2210 complete_add({expr}) *complete_add()*
2211 候補のリストに{expr}を追加する。'completefunc'で指定された関数
2213 失敗したときは0を返す(空文字列かメモリ不足)。候補が追加された
2214 ときは1を返し、その候補が既にリストに存在するときは2を返す。
2215 {expr}の説明については|complete-functions|を参照。'omnifunc'が
2218 complete_check() *complete_check()*
2219 補完候補を探している間にキーがタイプされたかどうか確認する。補
2220 完の検索に時間がかかる場合に使われる。候補の検索を中断しようと
2221 しているときは0以外を返す。そうでないときは0を返す。
2222 'completefunc'で指定された関数の中でのみ使われる。
2225 confirm({msg}, {choices} [, {default} [, {type}]])
2226 confirm()はユーザに選択させるためのダイアログを提供する。戻り
2227 値は選択した番号になる。最初の選択肢が1である。
2228 Note: confirm()は、ダイアログサポートを有効にしてコンパイルし
2229 た時にだけ動作する。|+dialog_con|と|+dialog_gui|を参照。
2230 ダイアログには{msg}に加えて{choices}の選択肢が表示される。
2231 {choices}が指定されない、または空の場合は選択肢"&OK"が表示され
2233 {msg}は文字列で'\n'を改行として使用できる。幾つかのシステムで
2235 {choices}は文字列で、個々の選択肢は'\n'によって区切られる。
2237 confirm("Save changes?", "&Yes\n&No\n&Cancel")
2238 < '&'の後の文字は選択肢のショートカットキーになる。この場合
2239 "Cancel"を選択するのに'c'をタイプすることができる。ショート
2240 カットキーは最初の文字である必要は無い: >
2241 confirm("file has been modified", "&Save\nSave &All")
2242 < コンソールでは、デフォルトのショートカットキーとして、各選択肢
2244 省略可能な引数{default}は<CR>キーを叩いた時に選択される選択肢
2245 の番号を指定する。最初の選択肢をデフォルトにするならば1を使用
2246 する。デフォルトを設定したくないのならば0を使用する。
2247 {default}を省略した場合、0が使用される。
2248 省略可能な引数{type}はダイアログの種類を指定する。これは
2249 Win32 GUI版でアイコンを指定するのに使う。"Error", "Question",
2250 "Info", "Warning", "Generic"のうちどれか一つを指定する。以上の
2251 うちの先頭の文字だけで指定できる。{type}が省略された場合、
2253 ユーザが<Esc>やCTRL-Cや、その他の割りこみキーでダイアログを中
2254 断した場合、confirm()は0を返す。
2257 :let choice = confirm("What do you want?", "&Apples\n&Oranges\n&Bananas", 2)
2259 : echo "make up your mind!"
2263 : echo "I prefer bananas myself."
2265 < GUIのダイアログではボタンが使用される。ボタンの配置は
2266 'guioptions'の'v'フラグに依存する。もしも'v'フラグが含まれてい
2267 るのなら、ボタンは常に垂直に配置される。そうでなければ水平に配
2268 置しようと試みられる。水平配置がうまくマッチしない場合は、垂直
2269 配置が使われる。幾つかのシステムでは常に水平配置が使われる。
2272 copy({expr}) {expr}のコピーを作る。数値と文字列の場合は、{expr}そのものとコ
2274 {expr}がリスト|List|の場合は浅いコピーを作る。つまり元のリスト
2275 を変更してもコピーは変更されず、逆も同じである。しかし要素は共
2276 通で、片方の要素に対し変更を加えると、もう一方の要素も変更され
2280 {expr} の余弦(コサイン)をラジアンで浮動小数点数 |Float| で返す。
2281 {expr} は |Float| または |Number| に評価されなければならない。
2287 {|+float| 機能つきでコンパイルされたときのみ有効}
2290 count({comp}, {expr} [, {ic} [, {start}]]) *count()*
2291 リスト|List|または辞書|Dictionary| {comp}の中に値{expr}が何回
2293 {start}が指定されたときはそのインデックスの要素から検索を開始
2294 する。{start}は{comp}がリストの場合のみ使用できる。
2295 {ic}が指定され、0でない場合は大文字・小文字は区別されない。
2298 *cscope_connection()*
2299 cscope_connection([{num} , {dbpath} [, {prepend}]])
2300 |cscope|接続が存在するかどうか判定する。引数が1個も指定されな
2302 0, cscopeが利用できない(コンパイル時に無効化されている)
2304 1, 1個以上のcscope接続が存在する場合
2306 引数が与えられた場合は次のようになる。{num}は、接続の存在を確
2310 ----- ------------------------------
2311 0 引数なしの場合と同じ (例: "cscope_connection()").
2312 1 {prepend}を無視し、{dbpath}に部分マッチを行う。
2313 2 {prepend}を無視し、{dbpath}に部分マッチを行う。
2314 3 {prepend}を使用し、{dbpath}と{prepend}に部分マッチを行
2316 4 {prepend}を使用し、{dbpath}と{prepend}に完全マッチを行
2319 Note: 以上のどの場合も文字列の比較は大文字・小文字を区別する。
2321 例: ":cs show"の表示が以下のようになったとする: >
2323 # pid database name prepend path
2324 0 27664 cscope.out /usr/local
2327 ---------- ---------- >
2328 cscope_connection() 1
2329 cscope_connection(1, "out") 1
2330 cscope_connection(2, "out") 0
2331 cscope_connection(3, "out") 0
2332 cscope_connection(3, "out", "local") 1
2333 cscope_connection(4, "out") 0
2334 cscope_connection(4, "out", "local") 0
2335 cscope_connection(4, "cscope.out", "/usr/local") 1
2337 cursor({lnum}, {col} [, {off}]) *cursor()*
2339 {lnum}行目の{col}桁目(バイトで数える)にカーソルを移動させる。
2341 引数が1個の場合は、{lnum}, {col}, {off}からなる、2個または3個
2342 の要素を持つリスト|List|でなければならない。これは|getpos()|の
2343 戻り値と似ているが、1個目の要素がない点が異なる。
2344 この関数を呼んでもジャンプリストは変更されない。
2345 {lnum}がバッファの行数よりも大きい場合は、最後の行へ移動する。
2346 {lnum}が0の場合はカレント行に留まる。
2347 {col}がその行のバイト数より大きい場合は、その行の最後の文字へ
2349 {col}が0の場合は、カレント桁に留まる。
2350 'virtualedit'が有効のとき、{off}は文字の先頭からの画面上のオフ
2351 セットを指定する。例えば、<Tab>の中の位置や最後の文字より後な
2353 カーソルを移動できたときは 0 を、できなかったときは-1 を返す。
2355 deepcopy({expr}[, {noref}]) *deepcopy()* *E698*
2356 {expr}のコピーを作る。数値と文字列の場合は、{expr}そのものとコ
2358 {expr}がリスト|List|の場合は完全なコピーを作る。つまり元のリス
2359 トを変更してもコピーは変更されず、逆も同じである。要素の1つが
2360 リストであるときは、再帰的にコピーが作成される。よってコピーの
2361 要素に変更を加えても元のリストの要素は変更を受けない。
2362 {noref}が省略された、または0のとき、含まれているリストや辞書は
2363 1度だけコピーされる。全ての参照はこのただ1つのコピーを指す。
2364 {noref}が1の場合、リストや辞書は現れるたびに新しいコピーが作ら
2365 れる。そのため循環参照があるとdeepcopy()は失敗する。
2367 ネストは100レベルまで可能である。それ以上参照を繰り返している
2368 要素があると、{noref}が1の場合は失敗する。
2372 delete({fname}) {fname}という名前のファイルを削除する。戻り値は数値で、削除に
2374 リスト|List|から要素を削除するには|remove()|を使う。
2377 did_filetype() autocommandが実行されFileTypeイベントが一度でも起こっていれ
2378 ば、非零が返る。スクリプトのFileTypeイベントが、複数回呼び出さ
2379 れるのを回避するのに使える。 |FileType|
2380 他のファイルへ移動すると、このカウンタはリセットされる。よって
2381 実際は、カレントバッファに対してFileTypeイベントが発生したかど
2382 うかを判定する。他のバッファを開くオートコマンドの中でこの関数
2383 を使って'filetype'を設定し、構文ファイルを読み込むために使える。
2385 diff_filler({lnum}) *diff_filler()*
2386 {lnum}行目より上にある削除行の数を返す。削除行とは、diffモード
2387 で他方のウィンドウにテキストが挿入されていることを表す行のこと
2388 である。削除行は表示はされているが、実際にはバッファに存在しな
2390 {lnum}は|getline()|と同様に扱われる。つまり"."はカレント行とな
2392 カレントウィンドウがdiffモードでないときは0を返す。
2394 diff_hlID({lnum}, {col}) *diff_hlID()*
2395 diffモードで{lnum}行{col}桁(バイト単位)の位置のハイライトIDを
2396 返す。カレント行に変更がないときは0を返す。
2397 {lnum}は|getline()|と同様に扱われる。つまり"."はカレント行とな
2399 先頭の桁の{col}は1となり、最初の行の{lnum}は1となる。
2400 ハイライトIDは|synIDattr()|を使って構文情報を得るために使える。
2402 empty({expr}) *empty()*
2403 {expr}が空なら1を、そうでなければ0を返す。
2404 リスト|List|または辞書|Dictionary|は要素を1個も持たないとき空
2405 とみなされる。数値は値が0のとき空とみなされる。
2406 長いリストに対しては長さを0と比較するよりこちらの方がずっと高
2409 escape({string}, {chars}) *escape()*
2410 {string}内に現れる{chars}の文字をバックスラッシュでエスケープ
2412 :echo escape('c:\program files\vim', ' \')
2414 c:\\program\ files\\vim
2415 < |shellescape()| も参照。
2418 eval({string}) {string}を評価し、値を返す。|string()|の戻り値を元の値に戻すの
2419 に非常に便利である。数値、浮動小数点数文字列、それらの複合に対
2420 して動作する。実際に存在する関数への|Funcref|に対しても動作す
2423 eventhandler() *eventhandler()*
2424 イベントハンドラの中では1を返す。つまり、ユーザの文字入力を待っ
2425 ている間に、ファイルをドラッグ&ドロップするなど割り込みされた
2426 ことを表す。このときは対話的なコマンドは使えない。イベントハン
2429 executable({expr}) *executable()*
2430 {expr}という名前の実行可能ファイルが存在するかどうか判定する。
2431 {expr}は引数を何もつけないプログラム名でなければならない。
2432 executable()は$PATHと通常のプログラム検索ディレクトリを参照す
2434 MS-DOSとMS-Windowsでは".exe"、".bat"などの拡張子は含めても含め
2435 なくてもよい。省略された場合は$PATHEXTの拡張子を検索する。よっ
2436 て"foo.exe"が存在しなければ"foo.exe.bat"が見つかることもありう
2437 る。$PATHEXTが存在しなければ".exe;.com;.bat;.cmd"が使われる。
2438 $PATHEXTにドットだけを含めると拡張子なしの名前を検索することが
2439 できる。'shell'がUnixシェルのように思われるときは、{expr}の後
2441 MS-DOSとMS-Windowsではファイルが存在するかどうかだけを判定し、
2442 それがディレクトリでないことや、それが本当に実行可能であるかど
2444 MS-WindowsではVimと同じディレクトリにある実行ファイルは必ず発
2445 見できる。Vimがこのディレクトリを$PATHに加えるためである。
2450 -1 このシステム上では実装されていない
2453 exists({expr}) 結果は数値で、変数{expr}が存在すれば1となり、そうでなければ0と
2454 なる。引数{expr}は文字列で次のうちいずれかである。
2455 &option-name Vimオプション(存在するかだけを判定し、
2457 +option-name 動作するVimオプション
2458 $ENVNAME 環境変数(空文字列と比較することでも判
2460 *funcname 組み込み関数(|functions|参照)かユーザ
2461 が定義した関数(|user-functions|参照)
2462 varname 内部変数(|internal-variables|)
2463 |curly-braces-names|, |Dictionary|の要
2464 素、|List|の要素などに対しても動作する。
2469 :echo exists("l[5]")
2471 :echo exists("l[xx]")
2472 < E121: Undefined variable: xx
2474 :cmdname exコマンド: 組み込みコマンド、ユーザ定
2475 義コマンド、コマンド修飾子|:command|。
2483 :2match |:2match|のコマンド。
2484 :3match |:3match|のコマンド。
2485 #event このイベントに対するオートコマンド定義
2486 #event#pattern このイベントとパターンに対するオートコ
2490 #group オートコマンドグループが存在するか
2491 #group#event このグループとイベントに対してオートコ
2493 #group#event#pattern
2496 ##event このイベントに対するオートコマンドがサ
2498 ある機能がサポートされているか判定するには|has()|を使う。
2501 exists("&shortname")
2507 exists("#CursorHold")
2508 exists("#BufReadPre#*.gz")
2509 exists("#filetypeindent")
2510 exists("#filetypeindent#FileType")
2511 exists("#filetypeindent#FileType#*")
2512 exists("##ColorScheme")
2513 < シンボルである&/$/*と名前の間には、空白文字があってはならな
2515 ある少数の場合では無視されるが、名前の後に余計な文字があっては
2516 ならない。将来はもっと厳格になる可能性があるので、現在許される
2521 exists(":make install")
2523 < Note 引数は変数そのものではなく、文字列でなければならない。例
2526 < これは変数"bufcount"の存在を判定するのではなく、bufcountの値を
2527 渡し、それが存在するかどうか判定してしまう。
2530 expand({expr} [, {flag}])
2531 ワイルドカードと{expr}内の特殊なキーワードを展開する。戻り値は
2534 複数の候補があった場合、それらは文字<NL>で区切られる。[注意:
2535 バージョン5.0では空白文字が用いられ、スペースを含むファイル名
2538 展開が失敗した場合、結果は空文字列となる。また存在しないファイ
2539 ル名というのは、結果の文字列には含まれない。
2541 {expr}が'%'か'#'か'<'で始まる場合には、展開は|cmdline-special|
2542 のように、変換子を受け付け、それらに関連付けられた変換が施され
2548 <cfile> カーソルのしたのファイル名
2549 <afile> autocmdのファイル名
2550 <abuf> autocmdのバッファ名
2551 <sfile> 取り込み(source)中のファイル名
2552 <cword> カーソル下の単語(word)
2553 <cWORD> カーソル下の単語(WORD)
2554 <client> 最後に受け取ったメッセージの{clientid}
2564 :let &tags = expand("%:p:h") . "/tags"
2565 < '%'や'#'や'<'で始まる文字列を展開する時には、それに続くテキス
2566 トは無視されることに注意。従ってこれは正しくない: >
2567 :let doesntwork = expand("%:h.bak")
2569 :let doeswork = expand("%:h") . ".bak"
2570 < "<cfile>"やそれらを展開する時には、戻り値が完全な展開をされな
2571 い参照名であることにも注意が必要。もしも"<cfile>"が"~/.cshrc"
2572 であった場合、"~/"を展開してホームディレクトリにするために、も
2573 う一度expand()を呼び出す必要がある: >
2574 :echo expand(expand("<cfile>"))
2576 変数と変換子の間には空白文字があってはならない。関数
2577 |fnamemodify()|が通常のファイル名の変換には使用可能である。
2579 カレントバッファや代替バッファの名前が未定義のときに'%'や'#'を
2580 使うと空文字列になる。"%:p"を名無しのバッファに使用した場合、
2581 結果はカレントディレクトリに'/'が付加されたものになる。
2583 '%'や'#'や'<'で始まらない{expr}は、コマンドラインのファイル名
2584 と同じように展開される。オプションの{flag}が使用され、その値が
2585 非ゼロでない時以外は'suffixes'と'wildignore'が使用される。存在
2586 しないファイルの名前も結果の文字列に含まれる。"**"を使うとディ
2587 レクトリツリーを検索できる。例えば、カレントディレクトリ以下に
2588 ある全ての"README"を見つけるには次のようにする: >
2589 :echo expand("**/README")
2591 expand()は、シェルの持っている変数や環境変数を展開することがで
2592 きる。しかしシェルを起動しなければならないので、遅くなる。
2593 |expr-env-expand|を参照。展開された変数はファイル名のリストの
2594 ように扱われる。環境変数を展開できないときはそのままになる。よっ
2595 て":echo expand('$FOOBAR')"の結果は"$FOOBAR"となる。
2597 存在するファイルを探すには|glob()|を参照。外部コマンドの「生
2598 の」実行結果を扱うには|system()|を参照。
2600 extend({expr1}, {expr2} [, {expr3}]) *extend()*
2601 {expr1}と{expr2}は両方ともリスト|List|であるか、両方とも辞書
2602 |Dictionaries|でなければならない。
2604 両方ともリストであるなら、{expr2}を{expr1}に付け加える。
2605 {expr3}が指定された場合は、{expr1}の第{expr3}番目の要素の前に
2606 {expr2}の要素を挿入する。{expr3}が0のときは最初の要素の前に挿
2607 入する。{expr3}がlen({expr1})に等しいときは末尾に{expr2}が付け
2610 :echo sort(extend(mylist, [7, 5]))
2611 :call extend(mylist, [2, 3], 1)
2612 < {expr1} が {expr2} と同じリストである場合、コピーされる要素の
2614 例として {expr3} が 1 のとき、最初の要素の N 個の新しいコピー
2615 が挿入される(ここで N はリストの元の長さ)。
2616 リストに1個の要素を加えるには|add()|を使う。2つのリストを連結
2617 して新しいリストを作るには演算子+を使う: >
2618 :let newlist = [1, 2, 3] + [4, 5]
2621 {expr2}の全要素を{expr1}に加える。
2622 {expr1}と{expr2}で共通のキーがある場合は、{expr3}によって動作
2624 {expr3} = "keep"の場合: {expr1}の値そのままにする
2625 {expr3} = "force"の場合: use the value of {expr2}
2626 {expr3} = "error"の場合: エラーメッセージを表示する *E737*
2627 {expr3}が省略された場合は"force"と同じになる。
2629 {expr2}が空でないならば{expr1}が変更される。必要ならば最初に
2635 feedkeys({string} [, {mode}]) *feedkeys()*
2636 {string}中の各文字を、あたかもマッピングまたはユーザによってタ
2637 イプされたかのように、処理キューに入れる。 これらの文字は先行
2638 入力バッファの末尾に付け足される。そのためマッピングを展開して
2639 いる途中であれば、これらの文字はマッピングを展開した後に来るこ
2641 この関数は、{string}中の文字が処理されるまでは待たない。
2642 特殊なキーを{string}に含めるにはダブルクォートと"\..."記法を使
2643 う(|expr-quote|を参照)。例えば、feedkeys("\<CR>")は<Enter>キー
2644 の押下をシミュレートする。しかしfeedkeys('\<CR>')とすると、こ
2646 {mode}が省略されたときは、挿入されたキーはマップ展開の対象にな
2647 る。{mode}は以下の文字フラグを含む文字列:
2648 'm' キーをマップ展開する。これが既定である。
2650 't' キーをタイプされたかのように扱う。そうでない場合は
2651 マッピングから展開されたかのように扱われる。これは
2652 undoや折り畳みの展開などで違いが現れる。
2656 filereadable({file})
2657 結果は数値で、{file}というファイルが存在し、読みこむことが可能
2658 ならばTRUEとなる。ファイル{file}が存在しないかディレクトリだっ
2659 た場合には、結果はFALSEとなる。引数{file}は文字列として使えれ
2661 ファイルが読み込み可能でなくてもよい場合には|glob()|を使う。
2663 以前の名前: file_readable().
2665 filewritable({file}) *filewritable()*
2666 結果は数値で、{file}というファイルが存在し、書き込むことが可能
2667 ならば1となる。ファイル{file}が存在しないか書き込み不可能であ
2668 る場合には、結果は0となる。{file}がディレクトリであり、書き込
2672 filter({expr}, {string}) *filter()*
2673 {expr}はリスト|List|または辞書|Dictionary|でなければならない。
2674 {expr}の各要素に対して{string}を評価し、その結果が0ならばリス
2675 トまたは辞書からその要素を削除する。{string}の内部では|v:val|
2677 辞書の場合は|v:key|が現在の要素のキーを保持している。
2679 :call filter(mylist, 'v:val !~ "OLD"')
2681 :call filter(mydict, 'v:key >= 8')
2682 < は8未満のキーを持つ要素を削除する。 >
2683 :call filter(var, 0)
2684 < は全要素を削除する。つまりリストまたは辞書をクリアする。
2686 Note {string}は式を表す文字列である。バックスラッシュを二重に
2687 しなくても済むように|literal-string|を使うとよいだろう。
2689 この操作はその場で(in-place)行われる。リストや辞書を変更したく
2691 :let l = filter(copy(mylist), 'v:val =~ "KEEP"')
2693 < フィルタされたリストまたは辞書を返す。{string}を評価している最
2694 中にエラーが発生した場合は、それ以降の要素の処理は行われない。
2697 finddir({name}[, {path}[, {count}]]) *finddir()*
2698 {path}から{name}という名前のディレクトリを探す。ディレクトリを
2699 上方・下方のどちらにも再帰的に検索できる。{path}の記法について
2700 は|file-searching|を参照。
2701 最初に見つかったディレクトリのパスを返す。そのディレクトリがカ
2702 レントディレクトリの下にある場合は相対パスを返す。そうでなけれ
2704 {path}が省略されたとき、または空のときはオプション'path'の値が
2706 省略可能な引数{count}が指定されたときは、最初に見つかったディ
2707 レクトリでなく、{count}番目に見つかったディレクトリを返す。
2708 {count}が負の場合は、見つかったディレクトリ全てのリスト|List|
2709 を返す。これはexコマンド|:find|によく似ている。
2710 {+file_in_path機能付きでコンパイルされたときのみ利用可能}
2712 float2nr({expr}) *float2nr()*
2713 {expr} の小数点以下を切り捨てて |Number| に変換する。
2714 {expr} は |Float| または |Number| に評価されなければならない。
2715 {expr} の値が |Number| の範囲外の場合、結果は 0x7fffffff また
2716 は -0x7fffffff になる。NaN は -0x80000000 になる。
2720 echo float2nr(-23.45)
2722 echo float2nr(1.0e100)
2724 echo float2nr(-1.0e150)
2726 echo float2nr(1.0e-100)
2728 {|+float| 機能つきでコンパイルされたときのみ有効}
2731 floor({expr}) *floor()*
2732 {expr} 以下の最大の整数を |Float| で返す(切り捨て)。
2733 {expr} は |Float| または |Number| に評価されなければならな
2742 {|+float| 機能つきでコンパイルされたときのみ有効}
2744 fnameescape({string}) *fnameescape()*
2745 コマンド引数のファイル名として使うために {string} をエスケープ
2746 する。'%' や '|' など特別な意味を持つ全ての文字がバックスラッ
2748 特別な文字とは、ほとんどのシステムにおいて
2749 " \t\n*?[{`$\\%#'\"|!<" である。ファイル名にバックスラッシュが
2750 現れるシステムにおいては 'isfname' の値に依存する。
2751 先頭の '+' と '>' もエスケープされる(|:edit| と |:write| の引
2752 数では特別な意味を持つ)。{string} が "-" である場合もエスケー
2753 プされる(|:cd| の引数では意味を持つ)。
2755 :let fname = '+some str%nge|name'
2756 :exe "edit " . fnameescape(fname)
2758 edit \+some\ str\%nge\|name
2760 findfile({name}[, {path}[, {count}]]) *findfile()*
2761 |finddir()|と同様だが、ディレクトリでなくファイルを検索する。
2762 'suffixesadd'が適用される。
2764 :echo findfile("tags.vim", ".;")
2765 < この例は、カレントファイルがあるディレクトリから上方に
2766 "tags.vim"を見つけるまで再帰的に検索する。
2769 fnamemodify({fname}, {mods})
2770 ファイル名{fname}を{mods}にしたがって変更する。{mods}はコマン
2771 ドラインで使われるのと同様な文字列である。詳細は
2772 |filename-modifiers|を参照。
2774 :echo fnamemodify("main.c", ":p:h")
2776 /home/mool/vim/vim/src/
2777 < Note: {fname}の中の環境変数は展開されない。環境変数を展開させ
2780 foldclosed({lnum}) *foldclosed()*
2781 結果は数値。{lnum}行目が閉じた折り畳みの中にあるなら、その折り
2782 畳みを構成する最初の行の行番号を返す。{lnum}行目が閉じた折り畳
2785 foldclosedend({lnum}) *foldclosedend()*
2786 結果は数値。{lnum}行目が閉じた折り畳みの中にあるなら、その折り
2787 畳みを構成する最後の行の行番号を返す。{lnum}行目が閉じた折り畳
2790 foldlevel({lnum}) *foldlevel()*
2791 カレントバッファの{lnum}行目の折り畳みレベルを表す数値を返す。
2792 折り畳みがネストしているときは一番下のレベルを返す。{lnum}行目
2793 に折り畳みがまったくないときは0を返す。折り畳みが開いているか
2794 閉じているかは関係ない。('foldexpr'の中で)折り畳みを更新してい
2795 る最中に呼ぶと、まだ折り畳みを更新していなく、折り畳みレベルが
2796 未知の行に対しては-1を返す。特別な場合として、普通は1行前のレ
2800 foldtext() 閉じた折り畳みに表示する文字列を返す。これはオプション
2801 'foldtext'のデフォルトの関数であり、'foldtext'を評価していると
2802 きにだけ呼ぶようにすべきである。この関数は変数|v:foldstart|,
2803 |v:foldend|, |v:folddashes|を使用する。
2805 +-- 45 lines: abcdef
2807 ダッシュ(-)の数は折り畳みレベルによって決まる。"45"はその折り
2808 畳みに含まれている行数である。"abcdef"はその折り畳みの中の最初
2809 の空行でない行のテキストである。行頭の空白と、"//"や/*"、
2810 'foldmarker'と'commentstring'に設定されている文字列は削除され
2812 {|+folding|機能付きでコンパイルされたときのみ利用可能}
2814 foldtextresult({lnum}) *foldtextresult()*
2815 {lnum}行目の閉じた折り畳みに表示される文字列を返す。'foldtext'
2816 を適切なコンテキストの中で評価する。{lnum}行目に閉じた折り畳み
2818 {lnum}は|getline()|のときと同様に扱われる。つまり"."はカレント
2820 折り畳まれたテキストをHTMLなどにエクスポートするときに有用。
2821 {|+folding|機能付きでコンパイルされたときのみ利用可能}
2824 foreground() Vimのウィンドウを前面に移動する。この関数はクライアントからVim
2825 サーバへ送ると便利である。|remote_send()|
2826 Win32では自分自身のウィンドウを前面に持ってくることが必ずしも
2827 許可されていないので、動作しないかもしれない。そのときは代わり
2828 に|remote_foreground()|を使うこと。
2829 {Win32, Athena, Motif, GTKいずれかのGUI版とWin32コンソール版で
2833 function({name}) *function()* *E700*
2834 関数{name}を参照する|Funcref|の変数を返す。{name}はユーザ定義
2838 garbagecollect([at_exit]) *garbagecollect()*
2839 循環参照を持ち、使われていないリスト|List|と辞書|Dictionaries|
2840 をクリーンアップする。これはメモリ不足に陥ったときや、
2841 'updatetime'経過後ユーザのキー入力を待っているときに自動的に行
2842 われるので、この関数を呼ぶ必要があることはほとんどない。
2843 循環参照を持たない要素は、使われなくなったとき必ず解放される。
2844 長時間実行されるスクリプトの中で循環参照を持つ非常に大きなリス
2846 省略可能な引数 "at_exit" に 1 を指定すると、Vim を終了するとき
2847 にもガベージコレクションが行われる。これはメモリリークを発見す
2850 get({list}, {idx} [, {default}]) *get()*
2851 リスト|List| {list}から{idx}番目の要素を取得する。この要素を取
2852 得できないときは{default}を返す。{default}が省略されたときは0
2854 get({dict}, {key} [, {default}])
2855 辞書|Dictionary| {dict}からキー{key}に関連づけられた値を取得す
2856 る。この要素を取得できないときは{default}を返す。{default}が省
2860 getbufline({expr}, {lnum} [, {end}])
2861 バッファ{expr}の{lnum}行目から{end}行目まで(両端含む)の行から
2862 なるリスト|List|を返す。{end}が省略されたときは{lnum}行目だけ
2865 {expr}の指定の仕方については|bufname()|を参照。
2867 {lnum}と{end}では"$"でバッファの最後の行を表すことができる。そ
2870 {lnum}が1より小さいときや、バッファの行数より大きいときは空リ
2873 {end}がバッファの行数より大きいときは、バッファの行数が設定さ
2874 れたものとして扱う。{end}が{lnum}行目より前に設定された場合は
2877 この関数は読み込まれているバッファに対してのみ動作する。既にア
2878 ンロードされているバッファや存在しないバッファに対しては空リス
2882 :let lines = getbufline(bufnr("myfile"), 1, "$")
2884 getbufvar({expr}, {varname}) *getbufvar()*
2885 バッファ{expr}のオプションの値やバッファローカル変数{varname}
2886 の値を返す。Note "b:"をつけない変数名を指定すること。
2887 {varname} が空文字列の場合、全てのバッファローカル変数からなる
2889 グローバルオプション、バッファローカルオプションのどちらに対し
2890 ても動作するが、グローバル変数、ウィンドウローカル変数、ウィン
2891 ドウローカルオプションに対しては動作しない。
2892 {expr}の指定の仕方については|bufname()|を参照。
2893 バッファや変数が存在しないときは空文字列を返し、エラーメッセー
2896 :let bufmodified = getbufvar(1, "&mod")
2897 :echo "todo myvar = " . getbufvar("todo", "myvar")
2899 getchar([expr]) *getchar()*
2900 ユーザまたは入力ストリームから1文字を取得する。
2901 [expr]が省略されたときは1文字を取得できるまで待つ。
2902 [expr]が0のときは1文字を取得できる場合のみ取得する。取得できな
2904 [expr]が1のときは1文字を取得できるか判定し、実際には取得しない。
2907 {expr}が省略されたときや{expr}が0のときは、文字全体または特殊
2908 キーを返す。それが8ビット文字なら戻り値は数値である。これを文
2909 字列に戻すにはnr2char()を使う。8ビット文字でないならばエンコー
2911 特殊キーとは0x80(10進数で128)で始まるバイト列である。これは
2912 文字列"\<Key>"と同じ値である(例: "\<Left>")。戻り値は文字列で
2913 あり、修飾キー(shift, contro, alt)は含まれない。
2915 {expr}が1のときは最初のバイトだけを返す。1バイト文字の場合、こ
2916 れはその文字そのものを表す数値である。これを文字列に変換するに
2919 ユーザがマウスをクリックしたときはマウスイベントを返す。クリッ
2920 クした位置は|v:mouse_col|, |v:mouse_lnum|, |v:mouse_win|で得ら
2921 れる。以下の例は、普通にマウスがクリックされたときと同じように
2924 if c == "\<LeftMouse>" && v:mouse_win > 0
2925 exe v:mouse_win . "wincmd w"
2927 exe "normal " . v:mouse_col . "|"
2930 この関数を呼んだときプロンプトは表示されない。文字入力を待って
2931 いることをなんらかの方法でユーザがわかるようにしなければならな
2933 入力された文字に対してマッピングは適用されない。
2934 キーコードは置換される。つまりユーザが<Del>を押した場合、「生
2935 の」文字シーケンスでなく<Del>キーに対応するコードが得られる。
2937 getchar() == "\<Del>"
2938 getchar() == "\<S-Left>"
2939 < 以下の例は大文字・小文字を区別しないように"f"を再定義する: >
2940 :nmap f :call FindChar()<CR>
2941 :function FindChar()
2942 : let c = nr2char(getchar())
2943 : while col('.') < col('$') - 1
2945 : if getline('.')[col('.') - 1] ==? c
2951 getcharmod() *getcharmod()*
2952 最後にgetchar()などで得た文字に対する修飾キーの状態を表す数値
2960 128 Macintoshのみ: command
2961 文字自身に含まれていない修飾キーのみ取得できる。つまり、
2962 Shift-aは修飾キーなしの"A"となる。
2964 getcmdline() *getcmdline()*
2965 現在のコマンドラインの内容を取得する。コマンドラインを編集して
2966 いるときのみ動作する。つまり|c_CTRL-\_e|または|c_CTRL-R_=|を使っ
2969 :cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
2970 < |getcmdtype()|, |getcmdpos()|, |setcmdpos()|も参照。
2972 getcmdpos() *getcmdpos()*
2973 コマンドラインにおけるカーソル位置をバイト単位で取得する。最初
2974 の桁は1となる。コマンドラインを編集しているときのみ動作する。
2975 つまり|c_CTRL-\_e|または|c_CTRL-R_=|を使っているときのみ有効。
2976 |getcmdtype()|, |setcmdpos()|, |getcmdline()|も参照。
2978 getcmdtype() *getcmdtype()*
2979 現在のコマンドラインの種類を返す。戻り値は次のいずれか:
2981 > デバッグモードコマンド |debug-mode|
2985 - |:insert| または |:append| コマンド
2986 コマンドラインを編集しているときのみ動作する。つまり
2987 |c_CTRL-\_e|または|c_CTRL-R_=|を使っているときのみ有効。そうで
2989 |getcmdpos()|, |setcmdpos()|, |getcmdline()|も参照。
2992 getcwd() 結果は文字列で、現在のディレクトリ名。
2994 getfsize({fname}) *getfsize()*
2995 結果は数値で、{fname}で指定されるファイルのサイズをバイト単位
2997 {fname}がディレクトリのときは0を返す。
2998 ファイル{fname}が見つからないときは-1を返す。
2999 {fname} のサイズが |Number| の範囲外の場合は -2 を返す。
3001 getfontname([{name}]) *getfontname()*
3002 引数なしで使われた場合には現在の通常のフォント名を返す。ハイラ
3003 イトグループNormalに対して使われるものと同様|hl-Normal|。
3004 引数が指定された場合には{name}が有効なフォント名であるか判定さ
3006 有効なときは実際のフォント名を返す。またはGUIが実際の名前の取
3007 得をサポートしていないときは{name}をそのまま返す。
3008 GUIモードで実行しているときのみ動作する。よってvimrcやgvimrcの
3009 中では使えない。GUIモードが起動した直後にこの関数を呼ぶには、
3010 オートコマンド|GUIEnter|を使うこと。
3011 Note GTK 2のGUIはどんなフォント名でも受け付けてしまうため、名
3012 前が有効であるかのチェックは動作しない。
3014 getfperm({fname}) *getfperm()*
3015 {fname}で指定されたファイルの読み込み、書き込み、実行の許可属
3017 {fname}が存在しない、またはそのディレクトリが読み込み不可能な
3019 戻り値は"rwxrwxrwx"の形で、"rwx"フラグの各グループは順にファイ
3020 ルの所有者、ファイルが所属するグループ、その他のユーザを表す。
3021 許可属性が与えられていないフラグは"-"で置き換えられる。例: >
3022 :echo getfperm("/etc/passwd")
3023 < この例は、(セキュリティの観点から望ましい設定がされているなら
3024 ば)"rw-r--r--"あるいは"rw-------"と表示する。
3028 結果は{fname}で与えられたファイルの、最終更新時間を示す数値。
3029 1970年1月1日からの経過時間(秒)で、strftime()に渡すことができる
3030 だろう。|localtime()|と|strftime()|も参照。
3031 ファイル{fname}が見つからなかった場合には-1を返す。
3033 getftype({fname}) *getftype()*
3034 {fname}で指定されたファイルの種別を示す文字列を返す。
3035 {fname}が存在しないときは空文字列を返す。
3036 ファイルの種別とそれらの結果の表を以下に示す:
3047 < Note "link"などの種別はそれをサポートしているシステムでのみ返
3048 される。"dir"と"file"しか返らないシステムもある。
3051 getline({lnum} [, {end}])
3052 {end}が指定されない場合は、カレントバッファの{lnum}行目の内容
3055 < {lnum}が数字ではない文字で始まる文字列であった場合、line()に
3056 よってその文字列が数字に変換される。よって、カーソルのある行の
3059 < {lnum}が1より小さいかバッファの行数よりも大きい数値の場合、空
3062 {end}が指定された場合は、カレントバッファの{lnum}行目から
3063 {end}行目までを要素とするリスト|List|を返す。
3064 {end}は{lnum}と同様に解釈される。
3065 存在しない行は省略され、エラーメッセージは表示されない。
3066 {end}が{lnum}より前になる場合は空リストを返す。
3068 :let start = line('.')
3069 :let end = search("^$") - 1
3070 :let lines = getline(start, end)
3072 < 他のバッファの行を取得するには|getbufline()|を参照。
3074 getloclist({nr}) *getloclist()*
3075 ウィンドウ{nr}のロケーションリストの全項目からなるリストを返す。
3076 {nr}に0を指定するとカレントウィンドウになる。ロケーションリス
3077 トウィンドウに対して使用すると、そこに表示されているロケーショ
3078 ンリストが返る。ウィンドウ番号{nr}が無効な場合は、空リストが返
3079 る。それ以外は|getqflist()|と同じ。
3081 getmatches() *getmatches()*
3082 |matchadd()| と |:match| により定義された全てのマッチの |List|
3083 を返す。|setmatches()| は |getmatches()| で保存されたマッチの
3084 リストを復元できるので、|getmatches()| と |setmatches()| は組
3088 < [{'group': 'MyGroup1', 'pattern': 'TODO',
3089 'priority': 10, 'id': 1}, {'group': 'MyGroup2',
3090 'pattern': 'FIXME', 'priority': 10, 'id': 2}] >
3091 :let m = getmatches()
3092 :call clearmatches()
3097 < [{'group': 'MyGroup1', 'pattern': 'TODO',
3098 'priority': 10, 'id': 1}, {'group': 'MyGroup2',
3099 'pattern': 'FIXME', 'priority': 10, 'id': 2}] >
3102 getqflist() *getqflist()*
3103 現在の全quickfixエラーのリストを返す。リストの各要素は辞書で、
3105 bufnr ファイル名を持つバッファの番号。その名前を取得
3107 lnum バッファ中の行番号(最初の行は1)
3109 vcol 0以外: "col"は画面上の桁
3112 pattern エラーの位置を特定するために使う検索パターン
3114 type エラーメッセージの種類。'E', '1'など。
3115 valid 0以外: エラーメッセージが認識されている
3117 エラーリストがまったくないか、空であるときは空リストを返す。
3118 存在しないバッファ番号を持つquickfixリストの項目は"bufnr"を0に
3121 役に立つ応用例: 複数のファイルから正規表現検索を行い、見つかっ
3122 たものに対してなんらかの操作をする: >
3123 :vimgrep /theword/jg *.c
3124 :for d in getqflist()
3125 : echo bufname(d.bufnr) ':' d.lnum '=' d.text
3128 getreg([{regname} [, 1]]) *getreg()*
3129 レジスタ{regname}の中身を文字列にして返す。例: >
3130 :let cliptext = getreg('*')
3131 < getreg('=')は最後に評価した式レジスタの値を返す。(マップの中で
3133 getreg('=', 1)はその式そのものを返す。これを使って|setreg()|で
3134 復元することができる。他のレジスタの場合は、この引数は無視され
3136 {regname}を指定しないときは|v:register|が使われる。
3139 getregtype([{regname}]) *getregtype()*
3140 レジスタ{regname}の種類を表す文字列を返す。
3142 "v" 文字指向|characterwise|の場合
3143 "V" 行指向|linewise|の場合
3144 "<CTRL-V>{width}" 矩形指向|blockwise-visual|の場合
3146 <CTRL-V>は値0x16の1文字である。
3147 {regname}を指定しないときは|v:register|が使われる。
3149 gettabwinvar({tabnr}, {winnr}, {varname}) *gettabwinvar()*
3150 タブページ{tabnr}内のウィンドウ{winnr}のウィンドウローカル変数
3152 {varname}が文字"&"で始まるときはウィンドウローカルオプションの
3154 タブページ番号は1から始まる。カレントタブページを指定するには
3156 {winnr}が0のときはカレントウィンドウとなる。
3157 グローバルオプション、バッファローカルオプション、ウィンドウロ
3158 ーカルオプションに対しても動作するが、グローバル変数やバッファ
3160 {varname}が空のときは全ウィンドウローカル変数からなる辞書を返
3162 Note {varname}は"w:"をつけずに指定しなければならない。
3164 :let list_is_on = gettabwinvar(1, 2, '&list')
3165 :echo "myvar = " . gettabwinvar(3, 1, 'myvar')
3169 getwinposx() 結果はGUIのVimウィンドウの左端の、デスクトップ上でのX座標値(数
3170 値)。情報が存在しない(コンソールの)場合は-1となる。
3173 getwinposy() 結果はGUIのVimウィンドウの上端の、デスクトップ上でのY座標値(数
3174 値)。情報が存在しない(コンソールの)場合は-1となる。
3176 getwinvar({winnr}, {varname}) *getwinvar()*
3177 カレントタブページに対する|gettabwinvar()|と同様。
3179 :let list_is_on = getwinvar(2, '&list')
3180 :echo "myvar = " . getwinvar(1, 'myvar')
3182 glob({expr} [, {flag}]) *glob()*
3183 {expr}内のファイル名のワイルドカードを展開する。特殊文字につい
3184 ては|wildcards|を参照。結果は文字列。
3185 結果が複数存在する場合、各々が文字<NL>によって区切られる。
3186 {flag} に非零を指定しない限り、'suffixes' と 'wildignore' が適
3187 用される。つまり'wildignore' のパターンにマッチする名前はス
3188 キップされ、'suffixes' がマッチの順番に影響を与える。
3189 展開が失敗した場合、結果は空文字列。結果には、存在しないファイ
3192 多くのシステムではバッククォート(「`」という文字のこと)を、外
3193 部コマンドの実行結果からファイル名を取得するために使用できる。
3195 :let tagfiles = glob("`find . -name tags -print`")
3196 :let &tags = substitute(tagfiles, "\n", ",", "g")
3197 < バッククォート内のプログラムの実行結果は、一行に一つずつの項目
3198 が含まれてなければならない。項目内のスペースは許容される。
3200 特殊なVimの変数を展開するためには|expand()|を参照。外部コマン
3201 ドの生の出力を得るためには|system()|を参照。
3203 globpath({path}, {expr} [, {flag}]) *globpath()*
3204 {path}の中の全ディレクトリに対して|glob()|を実行し、結果を連結
3206 :echo globpath(&rtp, "syntax/c.vim")
3207 < {path}はコンマ区切りのディレクトリのリスト。各ディレクトリを
3208 {expr}の前に付加し、glob()と同様にそれを展開する。必要に応じて
3210 ディレクトリ名の中にコンマを含めるには、バックスラッシュでエス
3211 ケープすること。Note MS-Windowsではディレクトリ名の末尾にバッ
3212 クスラッシュがつくことがある。その後に区切りのコンマを書くとエ
3213 スケープと見なされてしまうので、バックスラッシュは削除すること。
3214 どれかのディレクトリに対して展開が失敗してもエラーメッセージは
3216 {flag} に非零が指定されない限り、オプション'wildignore'が適用
3217 される。つまり、'wildignore'のパターンにマッチする名前はスキッ
3220 "**"を使ってディレクトリツリーを再帰的に検索することができる。
3221 例えば、'runtimepath'とそれ以下のディレクトリから全ての
3222 "README.txt"を探すには次のようにする: >
3223 :echo globpath(&rtp, "**/README.txt")
3224 < 上向き検索と、"**" の深さの限界はサポートされていない。よって
3225 オプション 'path' の値をそのまま使うとうまく動かないことが
3229 has({feature}) 結果は機能{feature}がサポートされる場合1、されない場合0とな
3230 る。引数{feature}は文字列。下記の|feature-list|を参照。
3233 has_key({dict}, {key}) *has_key()*
3234 結果は数値で、辞書|Dictionary| {dict}がキー{key}の要素を持つな
3237 haslocaldir() *haslocaldir()*
3238 結果は数値でカレントウィンドウが|:lcd|によってローカルなカレン
3239 トディレクトリを持つようセットされているなら1、そうでないなら
3242 hasmapto({what} [, {mode} [, {abbr}]]) *hasmapto()*
3243 結果は数値。右辺側(マップした先)の一部分に{what}を含むマッピン
3244 グが存在し、それが{mode}で指定されたモードのいずれかで定義され
3246 {abbr}が指定されていて0でないときはマッピングでなく短縮入力の
3247 存在を判定する。インサートモードまたはコマンドモードを指定する
3249 グローバルマップとバッファローカルマップの両方をチェックする。
3250 マッピングが1個も見つからなかったときは0を返す。
3251 {mode}に対しては以下の文字が利用できる:
3254 o オペレータ待機モード (Operator-pending)
3256 l Language-Argumentモード ("r", "f", "t"など)
3258 {mode}が省略されたときは"nvo"となる。
3260 この関数はVimスクリプトの中で、ある関数へのマッピングが既に存
3261 在するか判定するために有用である。例: >
3262 :if !hasmapto('\ABCdoit')
3263 : map <Leader>d \ABCdoit
3265 < この例は、"\ABCdoit"へのマッピングが存在しないときだけ
3266 "\ABCdoit"へのマッピングを作成する。
3268 histadd({history}, {item}) *histadd()*
3269 文字列{item}を履歴{history}に追加する。履歴{history}は以下のう
3270 ちどれか一つから選択: *hist-names*
3271 "cmd" or ":" コマンドライン履歴
3272 "search" or "/" 検索パターン履歴
3273 "expr" or "=" タイプされた式の履歴
3274 "input" or "@" input()の履歴
3275 {item}が履歴内に既に存在する場合、それが最新の項目の位置へシフ
3276 トされる。結果は数値:操作が成功した場合1、そうでなければ0
3279 :call histadd("input", strftime("%Y %b %d"))
3280 :let date=input("Enter date: ")
3281 < サンドボックス|sandbox|の中では利用できない。
3283 histdel({history} [, {item}]) *histdel()*
3284 {history}の内容を削除する。例えば総てのエントリを消すこともで
3285 きる。{history}の部分に可能な値は|hist-names|を参照。
3287 パラメータ{item}が文字列に評価される場合、これは正規表現と
3288 して扱われる。その表現にマッチする総てのエントリがhistoryから
3290 "\c"をつけない場合、大文字・小文字が一致しなければならない。
3292 {item}が数値に評価される場合、インデックスとして解釈される。イ
3293 ンデックスについては|:history-indexing|を参照。関連するエント
3294 リ(訳注:The respective entry)も、存在すれば削除される。
3296 結果は数値: 削除に成功すれば1を、そうでなければ0が返る。
3300 :call histdel("expr")
3302 検索履歴から、"*"で始まるエントリを総て削除する: >
3303 :call histdel("/", '^\*')
3306 :call histdel("search", histnr("search"))
3307 :call histdel("search", -1)
3308 :call histdel("search", '^'.histget("search", -1).'$')
3310 最後の検索パターンを削除し、一つ前のパターンを"n"コマンド(次の
3311 マッチへ移動)と'hlsearch'の為に設定する: >
3312 :call histdel("search", -1)
3313 :let @/ = histget("search", -1)
3315 histget({history} [, {index}]) *histget()*
3316 結果は{history}の第{index}エントリーを表わす文字列。{history}
3317 の部分に可能な値は|hist-names|を、{index}については
3318 |:history-indexing|を参照。指定されたエントリが存在しない場合
3319 は空文字列が返される。{index}が省略された場合には、履歴中の最
3324 :execute '/' . histget("search", -2)
3326 < |:history|によって出力される{num}番目のエントリを、再
3327 度実行するための":H {num}"というコマンドを定義する。 >
3328 :command -nargs=1 H execute histget("cmd",0+<args>)
3330 histnr({history}) *histnr()*
3331 結果は数値で{history}の現在のエントリー数。{history}の部分に可
3332 能な値は|hist-names|を参照。エラーが起こった場合、-1が返され
3336 :let inp_index = histnr("expr")
3338 hlexists({name}) *hlexists()*
3339 結果は数値で、{name}という名のハイライトグループが存在すれば、
3340 非ゼロの値が返される。これはなんらかの方法でそのグループが既に
3341 定義されている時にのみ起こる。これの為に実際に何らかのハイライ
3342 ティングアイテムが設定されている必要はなく、単に構文アイテムと
3344 *highlight_exists()*
3345 以前の名前: highlight_exists().
3348 hlID({name}) 結果は数値で、{name}という名前のハイライトグループのID番号。そ
3349 のハイライトグループが存在しない場合は0が返される。
3350 これはハイライトグループについての情報を獲得するために使用され
3351 る。例えば"Comment"グループの背景色を取得するにはこのようにす
3353 :echo synIDattr(synIDtrans(hlID("Comment")), "bg")
3355 以前の名前: highlightID()
3357 hostname() *hostname()*
3358 結果は文字列で、現在Vimが実行されているマシンの名前。名前が256
3359 文字を超える場合、超えた部分は切り捨てられる。
3361 iconv({expr}, {from}, {to}) *iconv()*
3362 文字列{expr}をエンコーディング{from}からエンコーディング{to}に
3364 変換が完全に失敗したときは空文字列を返す。一部の文字が変換でき
3365 なかった場合、その文字は "?" に置き換わる。
3366 エンコーディング名はライブラリ関数iconv()が受け付けるものなら
3367 なんでもよい。":!man 3 iconv"を参照。
3368 ほとんどの変換は、Vimが|+iconv|機能つきでコンパイルされている
3369 ときのみ利用可能。|+iconv|つきでないときもUTF-8からlatin1への
3371 オプション'encoding'の値に関係なく、特殊な文字を含むメッセージ
3372 を表示するために使える。UTF-8でエンコードされたメッセージを表
3374 echo iconv(utf8_str, "utf-8", &enc)
3375 < Note Vimは全てのUnicodeエンコーディングに対してUTF-8を使う。
3376 UCS-2との変換を行おうとしても、自動的にUTF-8との変換に変更され
3377 る。いずれにせよ、UCS-2はNULバイトを含むため、文字列にUCS-2を
3379 {+multi_byte機能付きでコンパイルされたときのみ利用可能}
3382 indent({lnum}) カレントバッファの{lnum}行目のインデント量を数値で返す。この
3383 インデント量はスペース単位で数えられ、'tabstop'の値が関係する。
3384 {lnum}は|getline()|の場合と同様に扱われる。
3388 index({list}, {expr} [, {start} [, {ic}]]) *index()*
3389 リスト|List| {list}の中で、{expr}に等しい要素の最小のインデッ
3390 クスを返す。自動的な変換は行われないので、文字列の "4" は数値
3391 の 4 とは異なると判定される。そして数値の 4 は浮動小数点数の
3392 4.0 とも異なる。'ignorecase' はここでは適用されず、つねに大文
3394 {start}が指定された場合はインデックス{start}から要素の検索を始
3395 める(負数を指定すると末尾からの相対位置となる)。
3396 {ic}に0でない値が指定された場合、大文字・小文字は区別されない。
3398 {list}の中に{expr}が見つからない場合は-1を返す。
3400 :let idx = index(words, "the")
3401 :if index(numbers, 123) >= 0
3403 input({prompt} [, {text} [, {completion}]]) *input()*
3404 結果は文字列で、ユーザがコマンドラインに入力したものが返される。
3405 引数 {prompt} にはプロンプト文字列か空文字列を指定する。空文字
3406 列の場合はプロンプトなしになる。'\n'を使ってプロンプトに改行を
3407 含めることができる。|:echohl|によるハイライトの設定がプロン
3408 プトに適用される。入力はコマンドラインと同様に行え、同じ編集コ
3409 マンドやキーマップが使用できる。input()に入力された文字列には、
3412 :if input("Coffee or beer? ") == "beer"
3416 省略可能な引数{text}が与えられ、空でないならば、それが入力の初
3417 期値として、ユーザが入力したのと同じ様に表示される。例: >
3418 :let color = input("Color? ", "white")
3420 < 省略可能な引数{completion}はこの入力において利用できる補完の種
3421 類を指定する。この引数がないときは補完は行われない。対応してい
3422 る補完の種類は、ユーザ定義コマンドにおいて引数"-complete="で指
3423 定するものと同じである。詳しくは|:command-completion|を参照。
3425 let fname = input("File: ", "", "file")
3427 NOTE: この関数はGUIモードしか持たないバージョン(例、Win32 GUI)
3428 のVimでは、スタートアップファイルの中で使用することはできな
3430 NOTE: マッピングの中からinput()を呼ぶと、そのマッピングの残り
3431 の文字が消費される。マッピングは、その文字が入力されたときと同
3433 これを避けるには、input()の前に|inputsave()|を呼び、input()の
3434 後に|inputrestore()|を呼ぶ。もう1つの対策は、|:execute|や
3435 |:normal|を使うなどして、そのマッピングでそれ以上文字を続けな
3439 :nmap \x :call GetFoo()<CR>:exe "/" . Foo<CR>
3442 : let g:Foo = input("enter search pattern: ")
3443 : call inputrestore()
3446 inputdialog({prompt} [, {text} [, {cancelreturn}]]) *inputdialog()*
3447 |input()|と同様。GUIで動作していて、テキストダイアログがサポー
3448 トされている場合はダイアログを表示してテキストを入力させる。
3450 :let n = inputdialog("value for shiftwidth", &sw)
3454 < ダイアログがキャンセルされたときは{cancelreturn}を返す。
3455 {cancelreturn}が省略されているときは空文字列を返す。
3456 <Enter>を押すとOKボタンを押すのと同じ動作になる。<Esc>を押すと
3457 キャンセルボタンを押すのと同じ動作になる。
3458 NOTE: コマンドライン補完は対応していない。
3460 inputlist({textlist}) *inputlist()*
3461 {textlist}は文字列のリスト|List|でなければならない。1行につき
3462 リストの要素を1個表示し、ユーザに数字を入力するよう促す。入力
3464 ユーザはマウスで文字列をクリックすることでも選択できる。最初の
3465 文字列を選択すると0が返る。最初の文字列より上をクリックすると
3466 負数が返る。プロンプト自身をクリックすると{textlist}の長さ+1が
3468 {textlist}の要素数はオプション'lines'の値より少なくなければな
3469 らない。そうでないと動作しない。最初の要素にメッセージを書き、
3470 各文字列の先頭に番号をつけておくとよい。
3472 let color = inputlist(['Select color:', '1. red',
3473 \ '2. green', '3. blue'])
3475 inputrestore() *inputrestore()*
3476 前回の|inputsave()|で保存しておいた先行入力を復元する。
3477 inputsave()と同じ回数だけ呼ぶようにしなければならない。しかし
3478 多く呼びすぎても害はない。復元するものがなければ1を、そうでな
3481 inputsave() *inputsave()*
3482 先行入力(マッピングにより入力された文字も含む)を保存し、クリア
3483 することにより、これ以降のプロンプトがユーザからの入力を得るよ
3484 うにする。プロンプトの後で、対応するinputrestore()を呼び出さね
3485 ばならない。複数回呼ぶこともできる。ただしその場合は同じ回数だ
3486 けinputrestore()を呼ばなくてはならない。
3487 メモリ不足のときは1を、そうでなければ0を返す。
3489 inputsecret({prompt} [, {text}]) *inputsecret()*
3490 |input()|とほぼ同じだが、以下の2点が異なる:
3491 a) ユーザの入力をアスタリスク("*")の列として表示し、入力内容を
3493 b) ユーザの入力が入力履歴|history|に残らない。
3495 NOTE: コマンドライン補完には対応していない。
3497 insert({list}, {item} [, {idx}]) *insert()*
3498 リスト|List| {list}の初めに{item}を挿入する。
3499 {idx}が指定されたときはインデックス{idx}の要素の前に{item}を挿
3500 入する。{idx}が0のときは{idx}を省略した場合と同じ様に最初の要
3501 素の前に挿入する。{idx}は負数でもよい(|list-index|参照)。-1を
3504 :let mylist = insert([2, 3, 5], 1)
3505 :call insert(mylist, 4, -1)
3506 :call insert(mylist, 6, len(mylist))
3507 < 最後の例は|add()|を使うともっと簡単に書ける。
3508 Note {item}がリストの場合は、1個の要素として追加される。リスト
3509 を連結するには|extend()|を使うこと。
3512 isdirectory({directory})
3513 結果は数値で、{directory}という名前のディレクトリが存在すれば
3514 TRUEとなる。{directory}が存在しないか、存在したとしてもディレ
3515 クトリではなかった場合には、FALSEが返される。文字列として解釈
3516 できるのならば{directory}の表現はどのようなものであってもかま
3519 islocked({expr}) *islocked()* *E786*
3520 結果は数値で、{expr}がロックされている変数の名前ならば非0を返
3522 {expr}は変数の名前、リストの要素、辞書の要素のいずれかでなけれ
3523 ばならない。変数そのものを指定しないように注意。例: >
3524 :let alist = [0, ['a', 'b'], 2, 3]
3526 :echo islocked('alist') " 1
3527 :echo islocked('alist[1]') " 0
3529 < {expr}が存在しない変数のときはエラーメッセージが表示される。変
3530 数の存在を確認するには|exist()|を使う。
3532 items({dict}) *items()*
3533 {dict}の全要素のキー・値のペアからなるリストを返す。戻り値の各
3534 要素はリストであり、キーと値の2個の要素を持つ。戻り値のリスト
3538 join({list} [, {sep}]) *join()*
3539 リスト{list}の要素を連結し、1個の文字列にして返す。
3540 {sep}が指定されたときは、要素の間にそれを挿入する。{sep}が指定
3542 Note 末尾には{sep}がつかない。末尾にもつけたければ以下のように
3544 let lines = join(mylist, "\n") . "\n"
3545 < {list}の要素が文字列なら、そのまま使われる。リストと辞書は
3546 |string()|を使ったときと同じようにして文字列に変換される。
3547 この逆を行う関数は|split()|である。
3549 keys({dict}) *keys()*
3550 {dict}の全キーからなるリストを返す。リストの順序は不定である。
3553 len({expr}) 結果は数値で、引数{expr}の長さ。{expr}が文字列または数値のとき
3554 は|strlen()|と同じようにバイト単位での長さを返す。
3555 {expr}がリストのときは要素数を返す。
3556 {expr}が辞書のときは要素数を返す。
3560 libcall({libname}, {funcname}, {argument})
3561 ランタイムライブラリ{libname}の関数{funcname}を、引数
3563 Vimで使うように特別に作ったライブラリの関数を呼ぶために使われ
3564 る。引数は1個しか指定できないため、普通のライブラリ関数を呼ぶ
3566 結果には、呼び出した関数から返された文字列が返される。呼び出し
3567 た関数がNULLを返した場合には、Vimには空文字列""が戻される。
3568 関数の戻り値が数値である場合には|libcallnr()|を使うこと。
3569 もしも引数が数値ならば、関数にはint型の引数が1つ渡される。引数
3570 が文字列の場合には、関数にはヌル終端記号を持つ文字列が引数とし
3572 |restrict-mode|の中で呼ぶと失敗する。
3574 libcall()によってVimを再コンパイルすることなく'plug-in'と呼ば
3575 れる独自の拡張を行なうことができるようになる。それは(直接)シス
3576 テムの関数を呼ぶ、ということではない。システム関数を呼ぶとおそ
3579 Win32では、あなたが書いた関数をDLLに置かなければならず、また通
3580 常のC呼出し規約を使用しなければならない(WindowsのシステムDLLが
3581 使うPascalではない)。関数は正確に1つのパラメータ、char型ポイン
3582 タもしくはint型を取らなければならず、戻り値としてchar型ポイン
3583 タかNULLを返さなければならない。返されるchar型ポインタは、関数
3584 終了後も有効なポインタ(例えばDLL内の静的なデータ)を指さなけれ
3585 ばならない。(malloc等で)割り当てられたメモリを保持していた場
3586 合、それはリークしてしまう。DLL内のスタティックバッファを用い
3587 る方法は動くかもしれないが、使用済みDLLがメモリから削除される
3590 警告: もしも関数が有効ではないポインタを返すと、Vimはクラッ
3591 シュしてしまう。関数が数値を返してしまった場合、Vimはそれをポ
3592 インタとして扱ってしまうので、やはりクラッシュが起こる。
3593 Win32のシステムでは、{libname}はDLLのファイル名の拡張子".DLL"
3594 を付けてはならない。通常の(パスの通った)場所にDLLがない場合に
3596 Unixでは、独自のプラグインをコンパイルするときはオブジェクトコー
3597 ドを位置独立('PIC')としてコンパイルしなければならない。
3598 {Win32と、|+libcall|機能が有効になっているUnixでのみ利用可能}
3600 :echo libcall("libc.so", "getenv", "HOME")
3603 libcallnr({libname}, {funcname}, {argument})
3604 |libcall()|とほぼ同様だが、文字列でなくintを返す関数に使う。
3605 {Win32と、|+libcall|機能が有効になっているUnixでのみ利用可能}
3607 :echo libcallnr("/usr/lib/libc.so", "getpid", "")
3608 :call libcallnr("libc.so", "printf", "Hello World!\n")
3609 :call libcallnr("libc.so", "sleep", 10)
3612 line({expr}) 結果は数値で、{expr}で与えられた位置のファイル内での行番号。受
3616 'x マークxの位置(マークが設定されていない場合、0が返
3620 v ビジュアルモードでは: ビジュアル選択領域の開始行
3621 (カーソルがその端)。ビジュアルモード以外ではカーソ
3622 ル位置を返す。すぐに更新される点が |'<| と違う。
3623 Note 他のファイルのマークも使える。その場合、戻り値はそのファ
3625 桁番号を取得するには|col()|を使う。両方を取得するには
3629 line("'t") マークtの位置の行番号
3630 line("'" . marker) マークmarkerの位置の行番号
3631 < *last-position-jump*
3632 このオートコマンドはファイルを開いた時に、最後に開かれていた時
3633 の行へ自動的にジャンプするものである。これは'"マークがセットさ
3635 :au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
3639 バッファの先頭から、{lnum}行目までのバイト数を返す。これには現
3640 在のバッファのオプション'fileformat'に従った、end-of-line(行終
3641 端)文字も含まれている。最初の行においては1が返る。
3642 次のようにすることで最終行を含むバイトサイズを獲得することがで
3644 line2byte(line("$") + 1)
3645 < これはファイルの大きさプラス1になる。
3646 {lnum}が無効であるか、|+byte_offset|機能がコンパイル時に無効に
3648 |byte2line()|、|go|及び|:goto|も参照。
3650 lispindent({lnum}) *lispindent()*
3651 'lisp'をオンにしたときと同じlisp用のインデント規則に従った場合
3652 の{lnum}行目のインデント量を返す。
3653 インデント量はスペースで数えられ、'tabstop'の値は関係ない。
3654 {lnum}は|getline()|の場合と同様に扱われる。
3655 {lnum}が無効な値のときや|+lispindent|機能なしでコンパイルされ
3660 現在の時刻、1970年1月1日からの経過秒数を返す。|strftime()|と
3663 log10({expr}) *log10()*
3664 浮動小数点数 {expr} の 10 を底とする対数を |Float| で返す。
3665 {expr} は |Float| または |Number| に評価されなければならな
3672 {|+float| 機能つきでコンパイルされたときのみ有効}
3674 map({expr}, {string}) *map()*
3675 {expr}はリスト|List|または辞書|Dictionary|。
3676 {expr}の各要素を、{string}を評価した結果で置き換える。
3677 {string}の中では|v:val|が現在の要素の値を保持している。
3678 辞書の場合は|v:key|が現在の要素のキーを保持している。
3679 リストの場合は|v:key|が現在の要素のインデックスを保持してい
3682 :call map(mylist, '"> " . v:val . " <"')
3683 < これは"mylist"の各要素の前に"> "をつけ、後に" <"をつける。
3685 Note {string}は式を表す文字列である。バックスラッシュを二重に
3686 しなくても済むように|literal-string|を使うとよいだろう。ただし
3687 その場合はシングルクォートを2重にしなければならない。
3689 この操作はその場で(in-place)行われる。リストや辞書を変更したく
3691 :let tlist = map(copy(mylist), ' & . "\t"')
3693 < 式を適用した結果の{expr}を返す。{string}を評価している最中にエ
3694 ラーが発生した場合は、それ以降の要素は処理されない。
3697 maparg({name}[, {mode} [, {abbr}]]) *maparg()*
3698 モード{mode}におけるキーマップ{name}のrhsを返す。{name}という
3699 キーマップが存在しない場合、空文字列が返される。{mode}には次の
3703 "o" オペレータ待機 (Operator-pending)
3706 "l" langmap |language-mapping|
3707 "" ノーマル、ビジュアル、及びオペレータ待機
3708 {mode}が省略された場合、""が使用される。
3709 {abbr}が指定され、0でない場合はマッピングでなく短縮入力を対象
3711 {name}には":map"コマンドで使用可能な、特殊なキー名が指定でき
3712 る。結果の文字列内の特殊文字は、":map"コマンドでリスト表示した
3714 まずカレントバッファにローカルなマッピングを探し、次のグローバ
3716 この関数を使うと、あるキーに対して既にマップがされているとき、
3717 その動作を行いつつ、再マップすることができる。概要: >
3718 exe 'nnoremap <Tab> ==' . maparg('<Tab>', 'n')
3720 mapcheck({name}[, {mode} [, {abbr}]]) *mapcheck()*
3721 モード{mode}におけるキーマップ{name}が存在するかチェックする。
3722 {name}に指定できる特殊文字は|maparg()|を参照。
3723 {abbr}が指定され、0でない場合はマッピングでなく短縮入力を対象
3725 マッピングが{name}で始まるとき、またはマッピングが{name}のはじ
3728 マッチするか "a" "ab" "abc" ~
3729 mapcheck("a") yes yes yes
3730 mapcheck("abc") yes yes yes
3731 mapcheck("ax") yes no no
3732 mapcheck("b") no no no
3734 maparg()との違いは、mapcheck()は{name}にマッチするマップを見つ
3735 けるが、maparg()はぴったり{name}に一致するマッピングのみを見つ
3737 {name}にマッチするキーマップが存在しない時には、空文字列が返さ
3738 れる。結果が一つならばマップされたrhsが返される。複数見つかっ
3739 た場合には、それらのうちどれか一つのrhsが返される。
3740 まずカレントバッファにローカルなマッピングを探し、次のグローバ
3742 この関数はマッピングが曖昧にならないかチェックするために使うこ
3744 :if mapcheck("_vv") == ""
3745 : map _vv :set guifont=7x13<CR>
3747 < これは、"_vv"というマッピングが"_v"とか"_vvv"といったマッピン
3748 グと衝突しないように事前にチェックしている。
3750 match({expr}, {pat}[, {start}[, {count}]]) *match()*
3751 {expr}がリストの場合は、{pat}にマッチする最初の要素のインデッ
3752 クスを返す。各要素は文字列として扱われる。リストと辞書はechoし
3753 たときと同じように文字列表現に変換される。
3754 それ以外の場合は、{expr}は文字列として扱われる。{expr}の中で
3755 {pat}にマッチするインデックス(バイト単位のオフセット)を表す数
3757 最初の文字またはリストの最初の要素にマッチしたときは0を返す。
3760 :echo match("testing", "ing") " 結果は 4
3761 :echo match([1, 'x'], '\a') " 結果は 1
3762 < {pat}の扱われ方については|string-match|を参照。
3764 strpbrk()に相当する関数はVimに存在しない。しかし同じことを次の
3766 :let sepidx = match(line, '[.,;: \t]')
3768 strcasestr()に相当する関数はVimに存在しない。しかし正規表現に
3769 "\c"をつければ大文字・小文字の違いを無視できる: >
3770 :let idx = match(haystack, '\cneedle')
3772 {start}が指定されたときは、文字列のバイトインデックス{start}の
3773 位置、またはリストの{start}の要素から検索を始める。
3774 その場合も戻り値は最初の文字/要素から数えたインデックスである
3776 :echo match("testing", "ing", 2)
3778 :echo match("testing", "ing", 4)
3780 :echo match("testing", "t", 2)
3782 文字列の場合、{start} > 0のときは、その文字列が{start}バイト後
3783 から始まるかのように扱われる。そのため、"^"は{start}の位置にマッ
3784 チする。ただし{count}が指定されたときは、{start}より前における
3785 マッチを無視しているかのように振る舞う(これは後方互換性を保つ
3787 文字列の場合、{start} < 0のときは{start}に0をセットする。リス
3788 トの場合は、末尾からインデックスを数えるという意味になる。
3789 {start}が範囲外の場合(文字列で{start} > strlen({expr})となった
3790 場合、リストで{start} > len({expr})となった場合)は-1を返す。
3792 {count}が指定されたときは{count}番目のマッチ位置を返す。文字列
3793 でマッチが見つかったとき、次のマッチングは1文字先から行われる。
3795 echo match("testing", "..", 0, 2)
3796 < リストの場合は次の要素から検索を続ける。
3797 Note {count}を指定すると、{start}の扱い方が変わってしまう。
3800 受け付ける正規表現については|pattern|を参照。
3801 オプション'ignorecase'により、大文字・小文字を区別するかどうか
3802 を設定できる。'smartcase'は適用されない。マッチングは常に
3803 'magic'をオン、'cpoptions'を空にした状態で行われる。
3805 *matchadd()* *E798* *E799* *E801*
3806 matchadd({group}, {pattern}[, {priority}[, {id}]])
3807 カレントウィンドウで強調表示するパターンを定義する。このパター
3808 ンのことを「マッチ」と呼ぶ。構文グループ {group}で強調する。戻
3809 り値は、マッチを識別する ID である。|matchdelete()|でこの ID
3810 を指定してマッチを削除することができる。
3812 省略可能な引数 {priority} はマッチの優先度を指定する。優先度が
3813 高いマッチは、より低いマッチの強調を上書きする。優先度は整数で
3814 指定する(負の数も可能)。{priority} が指定されない場合は既定の
3815 優先度 10 となる。'hlsearch' の優先度はゼロで、したがってゼロ
3816 より大きい優先度のマッチはすべてそれを上書きする。構文ハイライ
3817 ト('syntax' を参照)は独立したメカニズムであり、優先度がいくつ
3818 であろうとマッチは構文ハイライトより優先する。
3820 {id} は特定のマッチ ID を返すことを要求する。指定された ID が
3821 すでに使われていたら、エラーメッセージが表示され、そのマッチは
3822 登録されない。ID は正の整数を指定する(ゼロは除く)。ID 1, 2, 3
3823 は |:match|, |:2match|, |:3match| 用に予約されている。{id} が
3824 指定されないときは、|matchadd()| が自動的に空いている ID を取
3827 コマンド |:match| と異なり、マッチの個数に上限はない。
3830 :highlight MyGroup ctermbg=green guibg=green
3831 :let m = matchadd("MyGroup", "TODO")
3833 :call matchdelete(m)
3835 < |matchadd()| と |:match| で定義したマッチのリストは
3836 |getmatches()| で取得できる。全てのマッチを削除するのは
3837 |clearmatches()| 一発でできる。
3839 matcharg({nr}) *matcharg()*
3840 |:match|、|:2match|、|:3match|によって設定されているマッチパター
3841 ンの情報を返す。{nr}が1のときは|:match|の情報、2のときは
3842 |:2match|の情報、3のときは|:3match|の情報を返す。
3843 戻り値は次の2個の要素を持つリストである:
3846 {nr}が1、2、3のどれでもないときは空リストを返す。
3847 マッチパターンがセットされていないときは['', '']を返す。
3848 |:match|を保存し、復元するのに便利である。
3849 |:match| を使った強調は 3 個までに限られている。
3850 |matchadd()| にはこの制限はない。
3852 matchdelete({id}) *matchdelete()* *E802* *E803*
3853 |matchadd()| または |:match| で定義したマッチの中で ID が {id}
3854 であるものを削除する。成功したときは 0、失敗したときは
3855 -1 を返す。|matchadd()| の例を参照。すべてのマッチを削除するの
3856 は |clearmatches()| 一発でできる。
3858 matchend({expr}, {pat}[, {start}[, {count}]]) *matchend()*
3859 |match()|と同じだが、返されるのはマッチした部分文字列の終了後の
3861 :echo matchend("testing", "ing")
3863 *strspn()* *strcspn()*
3864 Vimにはstrspn()やstrcspn()に相当する関数はないが、matchend()を
3866 :let span = matchend(line, '[a-zA-Z]')
3867 :let span = matchend(line, '[^a-zA-Z]')
3868 < ただしマッチがないときには-1を返すところが異なる。
3870 {start}は|match()|の場合と同じ意味を持つ。 >
3871 :echo matchend("testing", "ing", 2)
3873 :echo matchend("testing", "ing", 5)
3875 {expr}がリストの場合、戻り値は |match()| と等しくなる。
3877 matchlist({expr}, {pat}[, {start}[, {count}]]) *matchlist()*
3878 |match()| と同じだがリストを返す。リストの最初の要素は、
3879 matchstr()が返すのと同じマッチした文字列。それ以降の要素は
3880 |:substitute|における"\1"、"\2"のようなサブマッチである。\1か
3881 ら\9までの間で、指定されなかったものは空文字列となる。例: >
3882 echo matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)')
3883 < 結果は['acd', 'a', '', 'c', 'd', '', '', '', '', '']となる。
3886 matchstr({expr}, {pat}[, {start}[, {count}]]) *matchstr()*
3887 |match()| と同じだが、マッチした文字列を返す。例: >
3888 :echo matchstr("testing", "ing")
3891 {start}の意味は |match()| の場合と同じ。 >
3892 :echo matchstr("testing", "ing", 2)
3894 :echo matchstr("testing", "ing", 5)
3896 {expr}がリストのときはマッチした要素を返す。
3897 その要素の型は変換されないため、必ずしも文字列であるとは限らな
3901 max({list}) {list}の全要素の値の最大値を返す。
3902 {list}がリストでなかったり、要素のどれかが数値に変換できない場
3907 min({list}) {list}の全要素の値の最小値を返す。
3908 {list}がリストでなかったり、要素のどれかが数値に変換できない場
3913 mkdir({name} [, {path} [, {prot}]])
3915 {path}が"p"のときは必要に応じて途中のディレクトリも作成される。
3917 {prot}は作成するディレクトリの保護ビット。デフォルトは0755
3918 (rwxr-xr-x: 所有者は読み書き可能、他の人は読み込み可能)。
3919 他の人が読み込めないようにするには0700とすること。{prot} は
3920 {name} の最後の部分にのみ適用される。なので、/tmp/foo/bar
3921 を作成すると /tmp/foo は 0755 で作成される。
3923 :call mkdir($HOME . "/tmp/foo/bar", "p", 0700)
3924 < |sandbox|の中ではこの関数は使用できない。
3925 システムによっては利用できない場合がある。これを確認するには次
3927 :if exists("*mkdir")
3930 mode([expr]) 現在のモードを示す文字列を返す。
3931 [expr] に 0 でない数値か空でない文字列(|non-zero-arg|)
3932 を指定した場合、フルモードが返される。それ以外の場合は
3933 最初の一文字だけが返される。" " と "0"はどちらも空文字
3952 r? ある種の |:confirm| 問い合わせ
3954 これらはオプション'statusline'の中や、|remote_expr()| といっし
3955 ょに使うと便利である。他のほとんどの場所では"c"または"n"しか返
3959 nextnonblank({lnum}) *nextnonblank()*
3960 {lnum}行以降({lnum}行を含む)の最初の非空行の行番号を返す。
3962 if getline(nextnonblank(1)) =~ "Java"
3963 < {lnum}が無効なときや、それ以降に非空行がないときは0を返す。
3964 |prevnonblank()|も参照。
3968 コード{expr}で表される1文字からなる文字列を返す。例: >
3971 < 現在の'encoding'が適用される。"utf-8"の場合の例: >
3972 nr2char(300) 短音記号つきのIを返す
3973 < Note Vim内部では、ファイル中のNUL文字を改行文字(0x0A)に変換し
3974 て保持している。そのため、nr2char(10)とすればNUL文字を指定でき
3975 る。nr2char(0)は真のNUL文字(文字列の終端)となるので、空文字列
3979 getpid() Vim のプロセス ID を数値で返す。Unix と MS-Windows では Vim が
3980 終了するまでこれは一意な数値である。MS-DOS では常にゼロである。
3983 getpos({expr}) {expr}の位置を返す。{expr}として指定できる値については
3985 結果は次の4個の要素を持つリスト|List|:
3986 [bufnum, lnum, col, off]
3987 "bufnum"は、'0や'Aのようなマークが指定されたときは、そのマーク
3988 のバッファ番号となる。それ以外では0となる。
3989 "lnum"と"col"はバッファ中の位置。桁番号は1から始まる。
3990 "off"の値は、'virtualedit'がオフのときは常に0で、オンのときは
3991 その文字の始点からの画面上の桁のオフセットである。つまり、カー
3992 ソルが<Tab>の中や、その行の最後の文字より後にあるとき意味を持
3994 この関数はカーソル位置を保存し、復元するために使われる: >
3995 let save_cursor = getpos(".")
3997 call setpos('.', save_cursor)
4000 pathshorten({expr}) *pathshorten()*
4001 パス{expr}におけるディレクトリ名を短縮して返す。拡張子、ファイ
4002 ル名はそのまま保たれる。パスのその他の構成要素は1文字に縮めら
4003 れる。1文字目の'~'と'.'はそのまま保たれる。例: >
4004 :echo pathshorten('~/.vim/autoload/myfile.vim')
4005 < ~/.v/a/myfile.vim ~
4006 パスが実際に存在するかどうかは関係ない。
4008 pow({x}, {y}) *pow()*
4009 {x} の {y} 乗を |Float| で返す。{x} と {y} は |Float| または
4010 |Number| に評価されなければならない。
4018 {|+float| 機能つきでコンパイルされたときのみ有効}
4020 prevnonblank({lnum}) *prevnonblank()*
4021 {lnum}行以前({lnum}行を含む)の最初の非空行の行番号を返す。
4023 let ind = indent(prevnonblank(v:lnum - 1))
4024 < {lnum}が無効なときや、それ以降に非空行がないときは0を返す。
4025 |nextnonblank()|も参照。
4028 printf({fmt}, {expr1} ...) *printf()*
4029 {fmt}にしたがって組み立てた文字列を返す。{fmt}中の"%"変換指示
4030 子は、対応する引数の値で置き換えられる。例: >
4031 printf("%4d: E%d %.30s", lnum, errno, msg)
4033 " 99: E42 asdfasdfasdfasdfasdfasdfasdfas" ~
4041 %5d スペースで埋めて5文字にした10進数値
4043 %04x 0で埋めて少なくとも4文字にした16進数値
4046 %f 123.456 形式の浮動小数点数
4047 %e 1.234e3 形式の浮動小数点数
4048 %E 1.234E3 形式の浮動小数点数
4049 %g 浮動小数点数。値によって %f または %e となる
4050 %G 浮動小数点数。値によって %f または %E となる
4053 変換子指示は'%'で始まり、変換文字で終わる。それ以外の全ての文
4056 "%"は変換指示子の開始を意味する。以下の順序で引数を指定できる:
4058 % [flags] [field-width] [.precision] type
4063 # 値を「代替形式」に変換する。変換指示子c, d, sに
4064 対してはこのオプションは効果を持たない。変換指示
4065 子oに対しては数値の精度を上げ、出力文字列の最初
4066 の文字が0になる。(明示的な精度0で値0が表示される
4068 変換指示子xとXに対しては、値が0でない場合、文字
4069 列"0x" (変換子Xの場合は"0X")を前につける。
4071 0 (zero) ゼロパディングする。全ての変換に対し、変換差され
4072 た値の左側を空白でなく0で埋める。数値変換(d, o,
4073 x, X)に対して精度が指定されている場合はフラグ0は
4076 - 負のフィールド幅を示す。変換値がフィールド境界に
4077 左揃えされる。変換値の左に空白や0がつくのではな
4079 -と0を両方指定した場合は-が有効になる。
4081 ' ' (space) 空白。符号付き変換(d)で作成される正の数値の前
4084 + +文字。符号付き変換で作成される数値の前に常に符
4085 号を付ける。+と' '(space)を両方していした場合は
4089 10進数文字列(省略可)。最低フィールド幅を指定する。変換
4090 値のバイト数がこのフィールド幅より少ない場合、左に空白
4091 がついて(左揃えフラグを指定した場合は右に空白がついて)
4095 ピリオド'.'の次に数字文字列がつづく形式の精度(省略可)。
4096 数字文字列を省略した場合、精度は0になる。d, o, x, X変
4097 換における最低桁数を指定する。また、s変換における最大
4104 フィールド幅と精度には、数字文字列の代わりにアスタリスク'*'を
4105 指定できる。その場合、対応する数値の引数がフィールド幅または精
4106 度となる。負のフィールド幅を指定すると、絶対値がフィールド幅
4107 となり、左揃えフラグがオンになる。負の精度を指定すると、完全に
4109 :echo printf("%d: %.*s", nr, width, line)
4110 < この例は、テキスト"line"の長さを"width"バイトに制限する。
4114 *printf-d* *printf-o* *printf-x* *printf-X*
4115 doxX 数値の引数を符号付き10進数(d)、符号なし8進数(o)、符号
4116 なし16進数(xまたはX)の書式に変換する。xの場合は
4117 "abcdef"と小文字を使い、Xのの場合は"ABCDEF"と大文字を
4118 精度は出力する最小桁数を意味する。変換された値を出力
4119 するのにそれ以下しか必要としない場合は、左側にゼロを
4121 フィールド幅が存在しない場合や小さすぎる場合でも、数値
4122 の幅を切り詰めることは決してない。変換結果がフィールド
4123 幅より多くの桁を必要とする場合は、十分な幅に広げられる。
4126 c 引数の数値を1バイトに変換し、結果の文字列を書き出す。
4129 s 引数の文字列を出力する。精度を指定した場合、その数値以
4133 f Float の引数を 123.456 の形式の文字列に変換する。精度
4134 は小数点以下の桁数を指定する。精度が 0 のときは小数点
4135 以下は省略される。精度を指定しないときは 6 桁となる。
4136 とてつもなく大きい数(範囲外またはゼロによる除算)のとき
4137 は "inf" となる。"0.0 / 0.0" は "nan" になる。
4139 echo printf("%.2f", 12.115)
4141 丸めはシステムのライブラリに依存する。心配なときは
4144 *printf-e* *printf-E*
4145 e E Float の引数を 1.234e+03 という形式('E' のときは
4146 1.234E+03)の文字列に変換する。精度は 'f' の場合と同じ
4149 *printf-g* *printf-G*
4150 g G 0.001(を含む)から10000000.0(を除く)の間の場合は 'f' の
4151 形式で変換し、この間にない場合は 'g' は'e'、'G' は 'E'
4152 の形式によって変換する。精度が指定されないときは余分な
4153 ゼロ(小数点の直後のゼロ以外)と '+' 記号は省かれる。よっ
4154 て 10000000.0 は 1.0e7 になる。
4157 % 単一の'%'を書き出す。引数は変換しない。完全な変換指定
4160 数値の引数を受け取る変換指示子には文字列を与えることもできる。
4162 浮動小数点数または文字列の引数を受け取る変換指示子には、数値を
4163 与えることもできる。変換は自動的に行われる。
4164 それ以外の型の引数を与えるとエラーメッセージが表示される。
4167 {expr1}以降の引数の数と"%"変換指示子の個数がちょうど一致しなけ
4168 ればならない。そうでない場合はエラーとなる。引数は最大18個まで
4172 pumvisible() *pumvisible()*
4173 ポップアップメニューが表示されているときには非0を返す。表示さ
4174 れていないときは0を返す。|ins-completion-menu|を参照。
4175 ポップアップメニューを消してしまうような操作を避けるために使わ
4179 range({expr} [, {max} [, {stride}]]) *range()*
4180 以下のような数値のリスト|List|を返す。
4181 - {expr}のみを指定したときは: [0, 1, ..., {expr} - 1]
4182 - {max}を指定したときは: [{expr}, {expr} + 1, ..., {max}]
4183 - {string}を指定したときは: [{expr}, {expr} + {stride}, ...,
4184 {max}] ({max}を超えないように{expr}を{stride}ずつ増加させる)
4185 最大値が開始位置より1だけ前のときは空リストを返す。最大値が開
4186 始位置より1以上前のときはエラーになる。
4188 range(4) " [0, 1, 2, 3]
4189 range(2, 4) " [2, 3, 4]
4190 range(2, 9, 3) " [2, 5, 8]
4191 range(2, -2, -1) " [2, 1, 0, -1, -2]
4196 readfile({fname} [, {binary} [, {max}]])
4197 ファイル{fname}を読み込み、各行を要素とするリスト|List|を返す。
4198 行はNL文字で終わるものとする。改行文字がCRであるMacintoshのファ
4199 イルは単一の長い行となる(どこかにNLが現れない限り)。
4200 {binary}が"b"に等しい場合、次のようにバイナリモードになる:
4201 - 最後の行がNLで終わるときは、リストの末尾に余分な空文字列が追
4205 - NLの前に現れるCR文字を除去する。
4206 - 最後の行がNLで終わるかどうかは関係ない。
4207 NUL文字はすべてNL文字に置換される。
4208 {max}を指定すると、読み込む行数の最大値となる。ファイルの最初
4209 の10行をチェックするときに役に立つ: >
4210 :for line in readfile(fname, '', 10)
4211 : if line =~ 'Date' | echo line | endif
4213 < {max}が負の場合は、ファイルの最後から-{max}行を読み込んで返す。
4214 ファイルが{max}行以下の場合は全行を返す。
4216 Note {max}を指定しない場合はファイル全体をメモリに読み込む。エ
4217 ンコーディング判定も行わないことに注意。必要ならバッファに読み
4219 ファイルを開けないときはエラーメッセージを表示し、空リストを返
4223 reltime([{start} [, {end}]]) *reltime()*
4224 時刻値を表す値を返す。値の形式はシステムに依存する。この値を
4225 |reltimestr()|に渡すと文字列に変換できる。
4227 1個の引数を指定すると、その引数で指定された時刻からの経過時間
4229 2個の引数を指定すると、{start}と{end}の間の経過時間を返す。
4230 {start}と{end}はreltime()で返される値でなければならない。
4231 {+reltime機能付きでコンパイルされたときのみ利用可能}
4233 reltimestr({time}) *reltimestr()*
4234 時刻値{time}を表現する文字列を返す。秒、ドット、マイクロ秒とい
4236 let start = reltime()
4238 echo reltimestr(reltime(start))
4239 < Note このコマンドにかかるオーバーヘッドがこの時間に加算される。
4241 文字列をきれいに揃えるために、先頭にスペースが挿入される。この
4242 スペースを取り除くにはsplit()を使えばよい。 >
4243 echo split(reltimestr(reltime(start)))[0]
4245 {+reltime機能付きでコンパイルされたときのみ利用可能}
4247 *remote_expr()* *E449*
4248 remote_expr({server}, {string} [, {idvar}])
4249 {string}を{server}に送信する。{string}は式と見なされ、評価した
4251 戻り値は文字列かリスト|List|でなければならない。リストの場合は
4252 要素を連結して文字列に変換される。要素間の区切りは改行文字とな
4253 る(join(expr, "\n")と同様)。
4254 {idvar}には変数名を指定する。後でremote_read()で使われる
4255 {serverid}がその変数に保存される。
4256 |clientserver|と|RemoteReply|も参照。
4257 |sandbox|の中ではこの関数は利用できない。
4258 {|+clientserver|機能付きでコンパイルされたときのみ利用可能}
4259 Note: なんらかのエラーが発生した場合は、ローカルでエラーメッセー
4262 :echo remote_expr("gvim", "2+2")
4263 :echo remote_expr("gvim1", "b:current_syntax")
4266 remote_foreground({server}) *remote_foreground()*
4267 サーバ名{server}のVimをフォアグラウンドに移動させる。
4269 remote_expr({server}, "foreground()")
4271 ただし、次の点が異なる: Win32では、OSが必ずしもサーバが自分自
4272 身をフォアグラウンドにすることを許可しないので、対応策としてク
4274 Note: foreground()と違い、最小化されていたウィンドウを復元しな
4276 |sandbox|の中ではこの関数は利用できない。
4277 {Win32, Athena, Motif, GTKのGUI版とWin32コンソール版でのみ利用
4281 remote_peek({serverid} [, {retvar}]) *remote_peek()*
4282 {serverid}から文字列を取得可能ならば正の数値を返す。変数
4283 {retvar}に返信文字列をコピーする。{retvar}は変数の名前を示す文
4288 |sandbox|の中ではこの関数は利用できない。
4289 {|+clientserver|機能付きでコンパイルされたときのみ利用可能}
4292 :echo "PEEK: ".remote_peek(id, "repl").": ".repl
4294 remote_read({serverid}) *remote_read()*
4295 {serverid}からの返信の中で最も古いものを取り出して返す。取り出
4296 した返信はキューから取り除かれる。キューに返信が入っていないと
4297 きは、返信を取り出せるようになるまで待機する。
4299 |sandbox|の中ではこの関数は利用できない。
4300 {|+clientserver|機能付きでコンパイルされたときのみ利用可能}
4302 :echo remote_read(id)
4304 *remote_send()* *E241*
4305 remote_send({server}, {string} [, {idvar}])
4306 {string}を{server}に送信する。{string}はキー入力として解釈され、
4307 この関数の呼び出しは即座に戻ってくる。Vimサーバにおいて、受け
4308 取ったキー入力はマッピング展開されない。|:map|
4309 {idvar}には変数名を指定する。後でremote_read()で使われる
4310 {serverid}がその変数に保存される。
4311 |clientserver|と|RemoteReply|も参照。
4312 |sandbox|の中ではこの関数は利用できない。
4313 {|+clientserver|機能付きでコンパイルされたときのみ利用可能}
4314 Note: なんらかのエラーが発生すると、サーバ側で報告され、表示が
4317 :echo remote_send("gvim", ":DropAndReply ".file, "serverid").
4318 \ remote_read(serverid)
4320 :autocmd NONE RemoteReply *
4321 \ echo remote_read(expand("<amatch>"))
4322 :echo remote_send("gvim", ":sleep 10 | echo ".
4323 \ 'server2client(expand("<client>"), "HELLO")<CR>')
4325 remove({list}, {idx} [, {end}]) *remove()*
4326 {end}を指定しなかった場合: リスト{list}から{idx}位置の要素を削
4328 {end}を指定した場合: {idx}から{end}まで(両端を含む)の要素を削
4329 除し、それらの要素からなるリストを返す。{idx}と{end}が同じ要素
4330 を指す場合、1個の要素からなるリストが返る。{end}が{idx}より前
4332 {idx}と{end}として指定できる値については|list-index|を参照。
4334 :echo "last item: " . remove(mylist, -1)
4335 :call remove(mylist, 0, 9)
4336 remove({dict}, {key})
4337 {dict}からキー{key}を持つ要素を削除する。例: >
4338 :echo "removed " . remove(dict, "one")
4339 < {dict}に{key}がない場合はエラーになる。
4341 ファイルを削除するには|delete()|を使う。
4343 rename({from}, {to}) *rename()*
4344 ファイルの名前を{from}から{to}へ変える。ファイルシステムを越え
4345 てファイルを移動するのにも使用できる。結果は数値で、成功すれば
4347 NOTE: ファイル {to} がすでに存在する場合、警告なしに上書きされ
4349 |sandbox|の中ではこの関数は利用できない。
4351 repeat({expr}, {count}) *repeat()*
4352 {expr}を{count}回繰り返し、連結して返す。例: >
4353 :let separator = repeat('-', 80)
4354 < {count}が0または負のときは空文字列を返す。{expr}がリスト
4355 |List|のときは{count}回連結した結果を返す。例: >
4356 :let longlist = repeat(['a', 'b'], 3)
4357 < 結果は['a', 'b', 'a', 'b', 'a', 'b']となる。
4360 resolve({filename}) *resolve()* *E655*
4361 MS-Windowsでは{filename}がショートカット(.lnkファイル)ならばそ
4363 Unixではパス{filename}の中の全てのシンボリックリンクを解決し、
4364 単純化して返す。循環リンクがある場合に備えて、シンボリックリン
4365 クの解決は100回までに制限されている。
4366 その他のシステムでは{filename}を単純化して返す。
4367 単純化の手順は|simplify()|と同じである。
4368 resolve()は(結果も相対パスであるならば)カレントディレクトリを
4369 表す先頭のパスコンポーネントと、末尾のパス区切り文字をそのまま
4373 reverse({list}) {list}の要素の順序をその場で(in-place)反転させる。{list}そのも
4375 リストを変更させないでおくには、最初にコピーを作る: >
4376 :let revlist = reverse(copy(mylist))
4378 round({expr}) *round()*
4379 {expr} を最も近い整数に丸め、|Float| を返す。{expr} が二つの整
4380 数の真ん中にある場合、大きい方(0 から遠い方)になる。
4382 {expr} は |Float| または |Number| に評価されなければならない。
4390 {|+float| 機能つきでコンパイルされたときのみ有効}
4393 search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *search()*
4394 正規表現パターン{pattern}を検索する。検索はカーソル位置から開
4395 始する(検索位置を指定するには|cursor()|を使えばよい)。
4397 {flags} は以下のフラグ文字からなる文字列
4399 'c' カーソル位置のマッチを受け入れる
4402 'p' 部分パターン(後述)のマッチの番号を返す
4403 's' 以前のカーソル位置をマーク'に記録する
4406 'w'と'W'の両方とも指定されない場合は'wrapscan'が適用される。
4408 フラグ's'が指定された場合、カーソルが移動したときのみマーク'が
4409 設定される。フラグ's'は'n'と組み合わせることはできない。
4411 'ignorecase', 'smartcase', 'magic'が適用される。
4413 引数{stopline}が指定されたときはこの行を検索した後で検索を停止
4414 する。これは検索する行を制限するために有用である。例: >
4415 let match = search('(', 'b', line("w0"))
4416 let end = search('END', '', line("w$"))
4417 < {stopline}に0でない値が指定されたときは、暗黙にファイルの末尾
4419 0 の値は、引数を省略したときと同じになる。
4421 {timeout} が指定された場合、そのミリ秒が経過したところで検索が
4422 停止する。つまり、{timeout} が 500 なら検索は 500 ミリ秒で停止
4424 この値は負であってはならない。0 の値は、引数を省略したときと同
4426 {|+reltime| 機能つきでコンパイルされたときのみ有効}
4428 マッチがない場合は0を返し、カーソルは移動しない。エラーメッセ
4430 マッチが見つかった場合はその行番号を返す。
4431 *search()-sub-match*
4432 フラグ 'p' を指定すると、戻り値は \(\) によるグループ化のうち
4433 最初にマッチしたものの番号プラス 1 となる。パターン全体はマッ
4434 チしたがどのグループもマッチしなかったときは 1 を返す。
4435 桁番号を取得するには|searchpos()|を使う。
4437 フラグ'n'が指定されていない場合、マッチ位置にカーソルが移動す
4440 例 (引数リストの全ファイルにわたって検索して置換する): >
4442 :while n <= argc() " arglist中の全ファイルに対してループ
4443 : exe "argument " . n
4444 : " ファイルの最後の文字から開始し、循環してファイルの
4448 : while search("foo", flags) > 0
4452 : update " 修正されていればファイルを保存する
4457 :echo search('\<if\|\(else\)\|\(endif\)', 'ncpe')
4458 < このコマンドは、カーソル下の文字以降からキーワード"if",
4459 "else","endif"のいずれかを検索する。フラグ'p'により、どのキー
4460 ワードが見つかったかに応じて1,2,3を返す。見つからなかったとき
4461 は0を返す。次の行の最初の単語にカーソルをおいて上のコマンドを
4463 if (foo == 0) | let foo = foo + 1 | endif ~
4464 1が返る。フラグ'c'を外すと"endif"にマッチし3を返すようになる。
4465 カーソルを"if"の"f"の上におき、フラグ'e'を外して実行しても同じ
4466 く3が返る。フラグ'n'によりカーソルは移動しない。
4469 searchdecl({name} [, {global} [, {thisblock}]]) *searchdecl()*
4472 {global}が0でないときは|gD|と同じようにファイル中の最初のマッ
4473 チを探す。そうでないときは|gd|と同じ動作になり、現在の関数内か
4476 {thisblock}が0でないときはカーソル位置より前の位置で閉じている
4477 {}ブロックを無視し、そのスコープ内でだけ有効な変数宣言にマッチ
4480 マッチを見つけるとその位置へカーソルを移動する。
4481 成功すると0を返し、失敗すると非0を返す。
4483 if searchdecl('myvar') == 0
4488 searchpair({start}, {middle}, {end} [, {flags} [, {skip}
4489 [, {stopline} [, {timeout}]]]])
4490 ネストしたstart・endのペアを検索する。これを使うと、"if"に対応
4491 する"endif"を見つけることができる。それらの間にある他のif・
4493 検索はカーソル位置から開始する。デフォルトでは下方に検索する。
4494 {flags}に'b'が含まれていると上方に検索する。
4495 マッチが見つかると、その位置へカーソルを移動し、行番号を返す。
4496 マッチが見つからなかったときは0または-1を返し、カーソルは移動
4497 しない。エラーメッセージは表示されない。
4499 {start}、{middle}、{end}は正規表現である。|pattern|を参照。こ
4500 の正規表現に \( \) のペアを含めてはならない。\%( \) は含めても
4501 よい。{middle}はネストしたstart・endペアの中にないときのみマッ
4503 searchpair('\<if\>', '\<else\>', '\<endif\>')
4504 < ここで{middle}を空にすると"else"をスキップするようになる。
4506 {flags}には|search()|と同様に'b', 'c', 'n', 's', 'w', 'W' が使
4507 える。それに加えて以下のフラグが利用できる。
4508 'r' それ以上マッチが見つからなくなるまで繰り返す。つまり最
4509 も外側のペアを探す。'W' も自動的にオンになる。
4510 'm' マッチ位置の行番号でなくマッチの個数を返す。'r'を使っ
4512 Note: ほとんどつねに 'W' を使ってファイルの末尾で循環しないよ
4515 {start}、{middle}、{end}のマッチが見つかると、マッチの開始位置
4516 にカーソルを移動し、式{skip}を評価する。このマッチがコメントや
4517 文字列の内側にある場合など、無視したいものであれば式{skip}が
4519 {skip}を省略した、または空のときはどのマッチも無視しない。
4520 {skip}を評価している最中にエラーが発生すると、検索は異常終了し
4523 {stopline} と {timeout} については|search()|を参照。
4525 'ignorecase'の値が適用される。'magic'の値は無視され、オンのと
4528 検索はカーソル位置から開始する。検索方向の次の文字における
4529 {start}、{middle}、{end}のマッチが最初に見つかる。例: >
4534 < カーソルが"if 2"の"i"の上にある状態から下方に検索を開始すると
4535 "endif 2"にマッチする。"if 2"の直前の文字の上から検索を開始す
4536 ると"endif 1"にマッチする。これは、"if 2"が最初に見つかり、
4537 "if 2"から"endif 2"までがネストしたペアと見なされるためである。
4538 上方検索で、{end}が2文字以上であるときはパターンの最後に"\zs"
4539 をつけるとよいかもしれない。するとカーソルがendのマッチの内
4540 側にあるとき、対応するstartを見つけるようになる。
4542 例: Vimスクリプトの"endif"コマンドを見つけるには: >
4544 :echo searchpair('\<if\>', '\<el\%[seif]\>', '\<en\%[dif]\>', 'W',
4545 \ 'getline(".") =~ "^\\s*\""')
4547 < これを使うには、マッチを見つけたい"if"の上、またはそれ以降にカ
4548 ーソルを置くこと。Note バックスラッシュを二重にしなくてもよい
4549 ようにシングルクォート文字列を使っている。式skipにより、コメン
4550 トだけの行を無視するようにしている。コマンドの後のコメントは無
4551 視していない。また、行の途中の"en"や"if"という単語にマッチして
4553 もう1つの例: "}"に対応する"{"を検索する: >
4555 :echo searchpair('{', '', '}', 'bW')
4557 < これを使うには、マッチを見つけたい"}"の上、または前にカーソル
4558 を置くこと。構文ハイライトにより文字列と見なされるマッチを無視
4561 :echo searchpair('{', '', '}', 'bW',
4562 \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')
4565 searchpairpos({start}, {middle}, {end} [, {flags} [, {skip}
4566 [, {stopline} [, {timeout}]]]])
4567 |searchpair()|と同様だが、マッチの行番号と桁番号からなるリスト
4568 |List|を返す。このリストの最初の要素は行番号で、次の要素はマッ
4569 チの桁位置のバイトインデックスである。マッチが見つからなかった
4572 :let [lnum,col] = searchpairpos('{', '', '}', 'n')
4574 より大規模で役に立つ例に関しては|match-parens|を参照。
4576 searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *searchpos()*
4577 |search()|と同様だが、マッチの行番号と桁番号からなるリスト
4578 |List|を返す。このリストの最初の要素は行番号で、次の要素はマッ
4579 チの桁位置のバイトインデックスである。マッチが見つからなかった
4582 :let [lnum, col] = searchpos('mypattern', 'n')
4584 < フラグ'p'を指定すると、戻り値にサブパターンのマッチ番号を示す
4585 要素が加わる|search()-sub-match|。例: >
4586 :let [lnum, col, submatch] = searchpos('\(\l\)\|\(\u\)', 'np')
4587 < この例において、"submatch"は小文字|/\l|が見つかったとき2とな
4588 り、大文字|/\u|が見つかったとき3となる。
4590 server2client( {clientid}, {string}) *server2client()*
4591 {clientid}に返信文字列を送る。最後に文字列を送った{clientid}は
4592 expand("<client>")で取得できる。
4593 {|+clientserver|機能付きでコンパイルしたときのみ利用可能}
4595 このIDは次のコマンドを受け取る前に取得しなければならない。つま
4596 り、受け取ったコマンドから戻る前で、入力を待つコマンドを呼ぶ前。
4599 :echo server2client(expand("<client>"), "HELLO")
4601 serverlist() *serverlist()*
4602 利用可能なサーバ名のリストを返す。1行に1つの形式。
4603 サーバが1つもないとき、または情報を取得できないときは空文字列
4604 を返す。|clientserver|も参照。
4605 {|+clientserver|機能付きでコンパイルしたときのみ利用可能}
4609 setbufvar({expr}, {varname}, {val}) *setbufvar()*
4610 バッファ{expr}のオプションまたはローカル変数{varname}に{val}を
4612 グローバル・ウィンドウローカルオプションに対しても動作するが、
4613 グローバル・ウィンドウローカル変数に対しては動作しない。
4614 ウィンドウローカルオプションの場合、グローバルな値は変更されな
4616 {expr}の解釈の仕方については|bufname()|を参照。
4617 Note 変数名には"b:"をつけてはならない。
4619 :call setbufvar(1, "&mod", 1)
4620 :call setbufvar("todo", "myvar", "foobar")
4621 < サンドボックスの中ではこの関数は使用できない。
4623 setcmdpos({pos}) *setcmdpos()*
4624 コマンドラインの{pos}バイトの位置へカーソルを移動する。
4626 現在の位置を取得するには|getcmdpos()|を使う。
4627 コマンドラインを編集している最中のみ機能する。よって、
4628 |c_CTRL-\_e|、|c_CTRL-R_=|、|c_CTRL-R_CTRL-R|+'='と組み合
4629 わせて使うときだけ意味がある。|c_CTRL-\_e|と|c_CTRL-R_CTRL-R|
4630 +'='の場合、コマンドラインにその式をセットした後でカーソルを
4631 移動する。|c_CTRL-R_=|の場合、式を評価した後、結果のテキストを
4633 {pos}が大きすぎるときは行末にカーソルを移動する。{pos}が1より
4635 成功なら0、コマンドラインを編集しているとき以外には1を返す。
4637 setline({lnum}, {text}) *setline()*
4638 カレントバッファの{lnum}行目を{text}にする。
4639 {lnum}は|getline()|のときと同じように解釈される。
4640 {lnum}が最後の行の次の行の場合、新規行として{text}を追加する。
4641 成功したら0を返す。失敗したら(大抵{lnum}が無効な値のとき)1を返
4643 :call setline(5, strftime("%c"))
4644 < {line}がリスト|List|の場合、{lnum}行目とそれ以降の行にリストの
4646 :call setline(5, ['aaa', 'bbb', 'ccc'])
4648 :for [n, l] in [[5, 6, 7], ['aaa', 'bbb', 'ccc']]
4649 : call setline(n, l)
4651 < Note: マーク '[ と '] はセットされない。
4653 setloclist({nr}, {list} [, {action}]) *setloclist()*
4654 ウィンドウ{nr}のロケーションリストを作成・置き換え・追加する。
4655 {nr}が0のときはカレントウィンドウを対象にする。ロケーションリ
4656 ストウィンドウの場合、そこに表示しているロケーションリストが修
4657 正される。ウィンドウ番号{nr}が無効な場合、-1を返す。
4658 それ以外は|setqflist()|と同じ。
4659 |location-list| も参照。
4661 setmatches({list}) *setmatches()*
4662 |getmatches()| で取得したマッチのリストを復元する。成功なら
4663 0、失敗なら -1 を返す。リストを復元するに先立って、現在のマッ
4664 チはすべて消去される。|getmatches()| の例を参照。
4667 setpos({expr}, {list})
4668 {expr}の位置を設定する。{expr}として有効な値は次の通り:
4672 {list}は次の4個のの要素を持つリスト|List|でなければならない:
4673 [bufnum, lnum, col, off]
4675 "bufnum"はバッファ番号。0にするとカレントバッファを表す。カー
4676 ソル位置の設定はカレントバッファに対してのみ可能。他のバッファ
4677 のマークを設定するには、関数|bufnr()|を使ってファイル名をバッ
4681 "lnum"と"col"はバッファ内の位置。桁番号は1から始まる。"lnum"を
4684 数値"off"は'virtualedit'がオンのときのみ使われ、その文字の開始
4685 位置からの画面上の桁のオフセットとなる。例えば、<Tab>の中、ま
4686 たは最後の文字より後に設定したいときに使う。
4688 位置をセットできたときは 0 を、そうでなければ -1 を返す。
4689 {expr} が無効なときはエラーメッセージが出る。
4693 縦方向に移動するときの望ましい桁を復元しない。それには
4697 setqflist({list} [, {action}]) *setqflist()*
4698 {list}の要素によりQuickFixリストを作成・置き換え・追加する。
4700 辞書でない{list}の要素は無視される。各辞書は以下の要素を
4703 bufnr バッファ番号。有効なバッファ番号でなければなら
4705 filename ファイル名。"bufnr"がないとき、または無効であ
4708 pattern エラーの位置を特定するための検索パターン
4710 vcol 0でない場合: "col"は表示上の桁
4711 0の場合: "col"はバイトインデックス
4714 type エラータイプを示す1文字。'E', 'W'など。
4716 辞書の要素"col"、"vcol"、"nr"、"type"、"text"は省略可能である。
4717 "lnum"か"pattern"のどちらか一方のみがエラー行を特定するために
4718 使われる。"filename"と"bufnr"の両方ともない場合、または"lnum"
4719 と"pattern"の両方ともない場合、その要素はエラー行として扱われ
4720 ない。"pattern"と"lnum"の両方があるときは"pattern"が使われる。
4721 このリストは|getqflist()|が返すものと正確に同じではないことに
4724 {action}が'a'ならば{list}の要素を既存のQuickFixリストに追加す
4725 る。QuickFixリストがまだ存在しない場合は新規に作成される。
4726 {action}が'r'ならば{list}の要素で現在のQuickFixリストを置き換
4727 える。{action}が指定されないとき、または' 'のときは新しい
4732 この関数は'errorformat'の設定とは無関係にQuickFixリストを作る
4733 ために使える。その最初のエラーへジャンプするには":cc 1"などの
4738 setreg({regname}, {value} [,{options}])
4739 レジスタ{regname}に{value}をセットする。
4740 {options}が"a"を含んでいるとき、または{regname}が大文字のとき
4742 {options}は以下のレジスタの種類指定を含んでもよい:
4743 "c" または "v" |characterwise| モード
4744 "l" または "V" |linewise| モード
4745 "b" または "<CTRL-V>" |blockwise-visual| モード
4746 "b"または"<CTRL-V>"の直後に数値を続けると、それが選択範囲の幅
4747 となる。これを指定しない場合、選択範囲の幅は一番長い行の文字数
4748 となる(<Tab>は1文字と数えられる)。
4750 {options}にレジスタの設定が何も含まれていないとき、{value}が
4751 <NL>で終わっていない限り、デフォルトの文字指向モードが使われる。
4752 レジスタ'='の値を設定することはできない。
4756 :call setreg(v:register, @*)
4757 :call setreg('*', @%, 'ac')
4758 :call setreg('a', "1\n2\n3", 'b5')
4760 < 次の例は、この関数を使ってレジスタを退避・復元する例である。 >
4761 :let var_a = getreg('a', 1)
4762 :let var_amode = getregtype('a')
4764 :call setreg('a', var_a, var_amode)
4766 < 空文字列を追加すると、レジスタの種類を変更することができる: >
4767 :call setreg('a', '', 'al')
4769 settabwinvar({tabnr}, {winnr}, {varname}, {val}) *settabwinvar()*
4770 ウィンドウ{winnr}のオプションやローカル変数{varname}の値を
4772 タブ番号は1から始まる。カレントタブページを対象とする場合は
4774 {winnr}が0のときはカレントウィンドウが対象となる。
4775 グローバルオプションやバッファローカルオプションを設定すること
4776 もできるが、グローバル変数やバッファローカル変数を設定すること
4778 バッファローカルオプションを設定した場合、グローバル値は変更さ
4780 Note 変数名には"w:"をつけてはならない。
4781 内部的に、一時的にタブページ{tabnr}に移動する。そのためオート
4782 コマンドTabLeaveとTabEnterが発生する。
4784 :call settabwinvar(1, 1, "&list", 0)
4785 :call settabwinvar(3, 2, "myvar", "foobar")
4786 < この関数は|sandbox|の中では使用できない。
4788 setwinvar({nr}, {varname}, {val}) *setwinvar()*
4789 |settabwinvar()|と同様。カレントタブページを対象とする。
4791 :call setwinvar(1, "&list", 0)
4792 :call setwinvar(2, "myvar", "foobar")
4794 shellescape({string} [, {special}]) *shellescape()*
4795 シェルコマンドの引数として利用できるように{string}をエスケープ
4797 MS-WindowsとMS-DOSでは、'shellslash'が設定されていない場合、
4798 {string}をダブルクォートで囲み、{string}の中のダブルクォートを
4800 他のシステムでは、{string}をシングルクォートで囲み、"'"を
4802 {special} が指定され、0 でない数値または空でない文字列の場合
4803 (|non-zero-arg|)、"!", "%", "#", "<cword>" などの特殊なアイテ
4804 ムの前にはバックスラッシュがつく。コマンド |:!| に
4805 よってそのバックスラッシュは再び除かれる。
4806 'shell' の値の末尾が "csh" である場合、{special} が
4807 |non-zero-arg| ならば"!" の文字もエスケープされる。これは、csh
4808 と tcsh は シングルクォートの中であっても "!" を履歴置換と解釈
4810 <NL> 文字もエスケープされる。{special} が |non-zero-arg| であ
4811 り 'shell' の末尾が "csh" である場合、これは2回エスケープされ
4814 :exe '!dir ' . shellescape(expand('<cfile>'), 1)
4815 < これはカーソル下のファイルを dir コマンドで表示する。
4816 |system()| を使う場合の例: >
4817 :call system("chmod +w -- " . shellescape(expand("%")))
4820 simplify({filename}) *simplify()*
4821 ファイル名を、意味を変えずにできるだけ簡略化する。MS-Windowsで
4822 のショートカットやUnixでのシンボリックリンクは解決される。
4823 {filename}の最初のパスコンポーネントがカレントディレクトリを指
4824 す場合、結果にそのまま残される。末尾のパス区切り文字も取り除か
4827 simplify("./dir/.././/file/") == "./file/"
4828 < Note: "dir/.."の組み合わせは、"dir"が検索可能なディレクトリで
4829 あるか、存在しないときのみ取り除かれる。Unixでは、"dir"が同じ
4830 ディレクトリ内にあるシンボリックリンクであるときも取り除かれる。
4831 パス名を簡略化する前に全てのシンボリックリンクを解決させるには
4836 {expr} の正接(サイン)をラジアンで |Float| で返す。{expr} は
4837 |Float| または |Number| に評価されなければならない。
4843 {|+float| 機能つきでコンパイルされたときのみ有効}
4846 sort({list} [, {func}]) *sort()* *E702*
4847 {list}の要素をその場で(in-place)ソートする。{list}を返す。リス
4848 トを変更したくない場合は、最初にコピーを作っておくこと: >
4849 :let sortedlist = sort(copy(mylist))
4850 < ソートの際には、各要素の文字列表現を使う。
4851 数値は文字列より後になり、リストは数値より後になる。
4852 カレントバッファのテキストをソートするには|:sort|を使うこと。
4853 {func}に1を指定すると、大文字・小文字を区別しなくなる。
4854 {func}に|Funcref|または関数名を指定すると、その関数を使って要
4855 素を比較する。その関数は2つの要素を引数として受け取り、それら
4856 が等しいときは0、1番目の引数を2番目より後にするなら1以上、1番
4857 目の方を前にするなら-1以下を返す。例: >
4858 func MyCompare(i1, i2)
4859 return a:i1 == a:i2 ? 0 : a:i1 > a:i2 ? 1 : -1
4861 let sortedlist = sort(mylist, "MyCompare")
4862 < この例の場合、より短く次のように書くことができる。ただしオーバー
4864 func MyCompare(i1, i2)
4870 {word}と同値でsound-foldされた単語を返す。カレントウィンドウの
4871 'spelllang'で設定された言語のうち、soundfoldingに対応する最初の
4872 言語が使用される。'spell'がオンでなければならない。
4873 soundfoldingができない場合、{word}がそのまま返される。
4874 この関数はスペリング候補を作るために使われる。Note この方法は
4878 spellbadword([{sentence}])
4879 引数なしの場合: カーソル下またはカーソル以降のスペルミスした単
4880 語を返す。その単語の先頭へカーソルを移動する。カレント行にスペ
4881 ルミスした単語が見つからない場合は空文字列を返し、カーソルは移
4884 引数ありの場合: {sentence}の中のスペルミスしている最初の単語を
4885 返す。スペルミスしている単語がない場合は空文字列を返す。
4892 "local" 他の地域でのみ有効な単語
4895 echo spellbadword("the quik brown fox")
4898 カレントウィンドウに対するスペリング情報が適用される。オプショ
4899 ン'spell'がオンでなければならない。'spelllang'の値が使用される。
4902 spellsuggest({word} [, {max} [, {capital}]])
4903 {word}の正しいスペルの候補のリストを返す。{max}を指定すると、
4904 候補の数の最大値となる。{max}を指定しないと、25個までの候補を
4907 {capital}に0でない値を指定すると、先頭が大文字の候補だけを返す。
4908 これは'spellcapcheck'とのマッチの後に使う。
4910 {word}はスペルの間違った単語で、後に他のテキストが続いてもよい。
4911 これにより、分割された2つの単語を連結することができる。候補も
4912 また続きのテキストを含んでいるので、これによって行を置き換える
4915 {word}は正しい単語でもよい。すると似た単語が返ってくるだろう。
4916 {word}自身は候補に含まれないが、大文字化されたものが含まれてい
4919 カレントウィンドウのスペリング情報が使われる。オプション
4920 'spell'がオンでなければならず、'spelllang'と'spellsuggest'の値
4924 split({expr} [, {pattern} [, {keepempty}]]) *split()*
4925 {expr}を分割して|List|にする。{pattern}を省略した場合、または
4926 {pattern}が空文字列の場合は、{expr}を空白文字で区切った各文字
4928 {pattern}を指定すると、{pattern}がマッチする位置で文字列を分割
4930 {keepempty}に非0を指定しない限り、最初または最後の要素が空文字
4932 それ以外の空文字列は、{pattern}が1文字以上にマッチすれば、また
4933 は{keepempty}が非0ならばそのままリストの要素となる。
4935 :let words = split(getline('.'), '\W\+')
4937 :for c in split(mystring, '\zs')
4938 < 区切り文字を削除せず、そのままにしておきたい場合は、'\zs'を
4940 :echo split('abc:def:ghi', ':\zs')
4941 < ['abc:', 'def:', 'ghi'] ~
4942 最初の要素が空であるかもしれないテーブルを分割するには: >
4943 :let items = split(line, ':', 1)
4944 < これの逆を行う関数は|join()|である。
4947 sqrt({expr}) *sqrt()*
4948 浮動小数点数 {expr} の非負平方根を |Float| で返す。
4949 {expr} は |Float| または |Number| に評価されなければならな
4950 い。{expr} が負の場合、結果は NaN (Not a Number) になる。
4956 "nan" はシステムのライブラリに依存するので、異なるかもしれな
4958 {|+float| 機能つきでコンパイルされたときのみ有効}
4961 str2float( {expr}) *str2float()*
4962 文字列 {expr} を浮動小数点数に変換する。これは式の中で浮動小数
4963 点数を使っているときと同じようにはたらく
4964 (|floating-point-format| を参照)。しかしこちらの方がゆるやか
4965 である。例えばこちらでは "1e40" も許されるが、式の中では
4966 "1.0e+40" と書かなければならない。
4967 数値の後ろにある文字列は黙って無視される。
4968 小数点数はロケールの設定にかかわらずつねに '.' である。コンマ
4969 を発見すると、そこで数値は終りになる。つまり "12,345.67" は
4970 12.0 に変換される。3桁ごとのカンマ区切りを取り除くには
4971 |substitute()| が使える: >
4972 let f = str2float(substitute(text, ',', '', 'g'))
4973 < {|+float| 機能つきでコンパイルされたときのみ有効}
4975 str2nr( {expr} [, {base}]) *str2nr()*
4977 {base}は変換の底。8、10、16のいずれか。
4978 {base}を省略すると10となる。そのため、文字列の先頭に0があると
4979 き、デフォルトの文字列・数値変換とは異なり、8進数とは解釈され
4981 {base}が16のとき、文字列の先頭の"0x"と"0X"は無視される。それ以
4986 strftime({format} [, {time}])
4987 結果は文字列で、{format}に従って日付や時間がフォーマットされた
4988 ものになる。{time}が与えられた場合にはそれを使うが、省略された
4989 場合には現在時刻を使用する。受け付け可能な文字列{format}は使用
4990 するシステムに依存するので、ポータブルとは言えない。フォーマッ
4991 トについてはCの関数strftime()のマニュアルを参照。結果は最大80
4992 文字に制限される。|localtime()|と|getftime()|も参照。
4993 ここで使われる言語はコマンド|:language|で変更できる。
4995 :echo strftime("%c") Sun Apr 27 11:49:23 1997
4996 :echo strftime("%Y %b %d %X") 1997 Apr 27 11:53:25
4997 :echo strftime("%y%m%d %T") 970427 11:53:55
4998 :echo strftime("%H:%M") 11:55
4999 :echo strftime("%c", getftime("file.c"))
5001 < この関数はどのシステムでも利用できるとは限らない。利用できるか
5003 :if exists("*strftime")
5005 stridx({haystack}, {needle} [, {start}]) *stridx()*
5006 結果は数値で、{heystack}の中で文字列{needle}が最初に現れる位置
5007 のバイトインデックスを表す。{start}を指定すると、インデックス
5008 {start}の位置から検索を開始する。
5009 2番目のマッチを探すには次のようにする: >
5010 :let comma1 = stridx(line, ",")
5011 :let comma2 = stridx(line, ",", comma1 + 1)
5013 検索パターンについては|match()|を使う。
5014 {haystack}の中に{needle}がないときは-1を返す。
5017 :echo stridx("An Example", "Example") 3
5018 :echo stridx("Starting point", "Start") 0
5019 :echo stridx("Starting point", "start") -1
5020 < *strstr()* *strchr()*
5021 stridx()はCの関数strstr()と同じように動作する。{needle}が1文字
5022 のときはstrchr()と同じように動作する。
5025 string({expr}) {expr}を文字列に変換して返す。{expr}が数値、浮動小数点数、文字
5026 列、それらの複合の場合は、この戻り値を|eval()|でパースして復元
5031 浮動小数点数 123.123456 or 1.123456e8
5032 Funcref function('name')
5034 辞書 {key: value, key: value}
5035 Note 文字列中のシングルクォート(')は二重化される。
5039 strlen({expr}) 結果は数値で、文字列{expr}の長さ。
5040 マルチバイト文字の個数を数えるには次のようなことをする(合成文
5043 :let len = strlen(substitute(str, ".", "x", "g"))
5045 引数が数値の場合は、まず文字列に変換される。
5051 strpart({src}, {start}, {len})
5052 結果は文字列で、{src}の{start}番目の文字から始まる、長さ{len}
5053 の部分文字列。存在しない文字を含むように範囲を指定しても、エ
5054 ラーにはならない。単に文字が省略されるだけである。
5055 {len}を省略すると、{start}から{src}の末尾までの部分文字列を返
5057 strpart("abcdefg", 3, 2) == "de"
5058 strpart("abcdefg", -2, 4) == "ab"
5059 strpart("abcdefg", 5, 4) == "fg"
5060 strpart("abcdefg", 3) == "defg"
5061 < 注意: 文字列の最初の文字を指定するためには、{start}は0でなけれ
5062 ばならない。カーソルのある位置から3文字を取得する例: >
5063 strpart(getline("."), col(".") - 1, 3)
5065 strridx({haystack}, {needle} [, {start}]) *strridx()*
5066 結果は数値で、{haystack}の中で文字列{needle}が最後に現れる位置
5068 {start}を指定すると、そのインデックス以降でのマッチは無視され
5069 る。前のマッチより前にあるものを見つけるには次のようにする: >
5070 :let lastcomma = strridx(line, ",")
5071 :let comma2 = strridx(line, ",", lastcomma - 1)
5073 検索パターンについては|match()|を使う。
5074 {haystack}の中に{needle}がないときは-1を返す。
5075 {needle}が空文字列のときは{haystack}の長さを返す。
5077 :echo strridx("an angry armadillo", "an") 3
5079 {needle}が1文字の場合はCの関数strrchr()と同じように動作する。
5083 結果は文字列で、{expr}内の表示不可能な文字を|'isprint'|で指定
5084 される、表示可能な文字に変換したもの。ウィンドウに表示すること
5087 < これはレジスタの中の改行を、改行として表示する代わりに"^@"と表
5090 submatch({nr}) *submatch()*
5091 |:substitute|の中の式でのみ使われる。マッチしたテキストの{nr}
5092 番目の部分マッチを返す。{nr}が0のときはマッチしたテキスト全体
5095 :s/\d\+/\=submatch(0) + 1/
5096 < この例は、行の中で最初の数値を検索し、それに1を加える。改行は
5100 substitute({expr}, {pat}, {sub}, {flags})
5101 結果は文字列で、{expr}内で最初に{pat}にマッチした部分を{sub}に
5102 置換えたコピーになる。これはコマンド":substitute"(一切のフラグ
5103 無し)のように働く。しかしマッチングは常にオプション'magic'が設
5104 定され、オプション'cpoptions'は空にして実行される(スクリプトを
5105 ポータブルにするため)。しかし'ignorecase'は適用される。
5107 {pat}がどう扱われるかについては|string-match|を参照。
5108 また、{sub}内の"~"は前回の{sub}に置換されない。
5109 {sub}内の幾つかのコードには|sub-replaced-special|の特殊な意味
5110 があることに注意。例えば、何かの文字列をリテラルの"\n"に置換え
5111 るためには、"\\\\n"か'\\n'を使う必要がある。
5112 {pat}が{expr}の何処にもマッチしなければ、{expr}が何の変更も受
5114 {flags}が"g"であれば{expr}内の{pat}にマッチする全ての部分が置
5115 換される。それを希望しない場合には{flags}は""にすべきである。
5117 :let &path = substitute(&path, ",\\=[^,]*$", "", "")
5118 < これはオプション'path'の最後のコンポーネントを削除する。 >
5119 :echo substitute("testing", ".*", "\\U\\0", "")
5122 synID({lnum}, {col}, {trans}) *synID()*
5123 結果は数値で、現在のウィンドウ内での位置{lnum}と{col}の位置の
5125 構文IDは|synIDattr()|と|synIDtrans()|に渡すことで、テキストに
5126 ついての構文情報を取得するのに使用できる。
5128 最左のカラムを指定するには{col}に1を、最初の行を指定するには
5129 {line}に1を指定する。'synmaxcol'が適用され、長すぎる行では0が
5132 {trans}が非ゼロならば、透過属性のアイテムは省略され、実際に表
5133 示されているアイテムが評価対象になる。これは実際に有効になって
5134 いるカラーを知りたい時に役に立つ。{trans}がゼロならば、透過属
5135 性のアイテムが返される。これはどのシ構文イテムが有効になってい
5136 るかを知りたい時に役に立つ(例:カッコの中とか)。
5137 警告: この関数は非常に遅い。ファイルを順方向に走査する時にだけ
5140 例(カーソルの下の構文アイテムの名前を表示する): >
5141 :echo synIDattr(synID(line("."), col("."), 1), "name")
5144 synIDattr({synID}, {what} [, {mode}])
5145 結果は文字列で、{synID}の属性{what}の内容を示す。これは構文
5146 アイテムの情報を取得するのに使用できる。
5147 {mode}には取得したいモードの属性に応じて、"gui"か"cterm"か
5148 "term"が指定できる。{mode}が省略されるか、無効な値が指定された
5149 場合、現在有効になっているハイライトモードが使用される(GUI、
5151 ハイライトグループにリンクされた属性を取得するにはsynIDtrans()
5155 "fg" 前景色(GUI:カラー名、cterm:文字列としてのカ
5158 "sp" 特殊な色 ("fg"同様) |highlight-guisp|
5159 "fg#" "fg"同様だが、"#RRGGBB"のフォーマットで
5160 "bg#" "bg"同様だが、"#RRGGBB"のフォーマットで
5161 "sp#" "sp"同様だが、"#RRGGBB"のフォーマットで
5165 "inverse" 反転(原文inverse)なら"1"(reverseと等価)
5166 "underline" 下線付きなら"1"
5167 "undercurl" 波線付きなら"1"
5169 例(カーソルの下の構文アイテムの名前を表示する): >
5170 :echo synIDattr(synIDtrans(synID(line("."), col("."), 1)), "fg")
5174 結果は数値で、{synID}を構文IDに変換したもの。キャラク
5175 タをハイライト表示している構文グループのIDである。
5176 ":highlight link"によって与えられるハイライトのリンクはこれに
5179 synstack({lnum}, {col}) *synstack()*
5180 カレントウィンドウの {lnum}, {col} の位置の構文アイテムのス
5181 タックを |List| にして返す。このリストの要素は |synID()|が
5183 リストの最初の要素が一番外側の領域で、続く要素がその中に内包さ
5184 れている。アイテム全体がハイライトされている、または最後の要素
5185 が transparent なアイテムである場合を除き、最後の要素が
5187 この関数は構文ファイルをデバッグするのに役に立つ。
5188 例(カーソル下の構文スタックを表示する): >
5189 for id in synstack(line("."), col("."))
5190 echo synIDattr(id, "name")
5193 system({expr} [, {input}]) *system()* *E677*
5194 シェルコマンド{expr}の実行結果を得る。
5195 {input}が与えられた場合は、この文字列はファイルに書き出され、
5196 コマンドの標準入力として渡される。この文字列はそのまま(as-is)
5197 書き出され、正しい改行文字を使うよう自分自身で気を付けなければ
5199 注意: |shellescape()| を使ってコマンドの引数をエスケープするこ
5200 と。{expr}内に改行が含まれるとコマンドが失敗する可能性がある。
5201 'shellquote'と'shellxquote'に入っている文字は問題を引き起こす
5203 対話的なコマンドを使用することはできない。
5205 :let files = system("ls " . shellescape(expand('%:h')))
5207 < システムに依存しないような戻り値にするために、シェルの出力をフ
5208 ィルタリングし、マッキントッシュにおいては<CR>を<NL>に変換し、
5209 DOS系のシステムにおいては<CR><NL>を<NL>に変換している。
5210 実行されるコマンドはいくつかのオプションを適用して構成される:
5211 'shell' 'shellcmdflag' 'shellxquote' {expr} 'shellredir' {tmp} 'shellxquote'
5212 ({tmp}は自動的に生成されるファイル名)
5213 UnixとOS/2ではコマンドの連結ができるように{expr}の両側に波括弧
5216 コマンドは「coocked」モードで実行される。そのためCTRL-Cでコマ
5217 ンドを中断できる(少なくともUnixでは)。
5219 エラーコードは|v:shell_error|に格納される。
5220 この関数は|restrict-mode|では失敗する。
5222 Note 上記のオプションに不正な値が入っていると、この関数の呼び
5223 出しが失敗する可能性がある。セキュリティエージェントアプリケー
5224 ションを使っていると失敗することがあるとも報告されている。
5225 ":!cmd"とは違い、ファイルが変更されているかのチェックは行わな
5227 明示的にチェックさせるには|:checktime|を使う。
5229 tabpagebuflist([{arg}]) *tabpagebuflist()*
5230 カレントタブページ内の各ウィンドウに表示されているバッファの番
5231 号を要素とするリスト|List|を返す。{arg}は対象とするタブページ
5232 の番号を指定する。省略したときはカレントタブページを対象とする。
5234 全タブページ中の全バッファのリストを得るには次のようにする: >
5236 for i in range(tabpagenr('$'))
5237 call extend(tablist, tabpagebuflist(i + 1))
5239 < 1つのバッファが複数のウィンドウに表示されている場合があること
5243 tabpagenr([{arg}]) *tabpagenr()*
5244 結果は数値で、カレントタブページの番号。最初のタブページの番号
5246 省略可能な引数{arg}に指定できる値は"$"のみであり、最後のタブペー
5247 ジの番号(つまりタブページの個数)を返す。
5248 この番号はコマンド|:tab|で指定できるものと同じである。
5251 tabpagewinnr({tabarg}, [{arg}]) *tabpagewinnr()*
5252 |winnr()|と同様だが、タブページ{arg}を対象とする。
5253 {tabarg}は対象とするタブページの番号を指定する。
5254 {arg}は|winnr()|の場合と同じように扱われる。すなわち:
5255 - 省略するとカレントウィンドウの番号を返す。これは、このタブペー
5257 - "$"とするとウィンドウ番号を返す。
5258 - "#"とすると前のウィンドウ番号を返す。
5260 tabpagewinnr(1) " タブぺージ1のカレントウィンドウ
5261 tabpagewinnr(4, '$') " タブページ4内のウィンドウの個数
5262 < {tabarg}が無効なときは0を返す。
5265 tagfiles() カレントバッファにおいて、タグを検索するときに使うファイルの名
5266 前からなるリスト|List|を返す。オプション'tags'を展開したもので
5270 taglist({expr}) *taglist()*
5271 正規表現{expr}にマッチするタグのリストを返す。そのリストの各要
5272 素は辞書であり、少なくとも次の要素を持つ:
5274 filename タグの定義があるファイルの名前。カレン
5277 cmd そのファイルの中でタグの位置を特定する
5279 kind タグの種類。種類は言語に依存する。この
5280 要素は、Exuberant ctagsかhdrtagによって
5283 static ファイル固有のタグ。より詳しくは
5285 タグファイルの内容によってはこれ以上の要素が存在することもある。
5286 例: アクセス、実装、継承、シグネチャ。これらのフィールドについ
5287 ての情報はctagsのドキュメントを参照。Cのソースにおいては、フィ
5288 ールド"struct"、"class"、"enum"が現れることがある。これらは、
5291 exコマンド'cmd'は検索パターンか、行番号か、行番号とバイト番号
5294 マッチするタグがない場合は空リストを返す。
5296 完全一致するタグを取得するには、{expr}にアンカー'^'と'$'をつけ
5297 ること。タグ検索の正規表現についてより詳しいことは
5300 Vimが使用するタグファイルについては|'tags'|を参照。様々な
5301 ctagsによって生成されるタグファイルのフォーマットについては
5302 |tags-file-format|を参照。
5304 *tempname()* *temp-file-name*
5306 結果は文字列で、存在しないファイルのファイル名を示す。これはテ
5307 ンポラリファイルの名前として使用可能である。少なくとも連続26回
5308 の呼出しまでは違う名前を生成することが保証される。例: >
5309 :let tmpfile = tempname()
5310 :exe "redir > " . tmpfile
5311 < Unix では、ファイルはプライベートなディレクトリに置かれる。
5313 MS-Windowsでは、'shellslash'がオンのときか'shellcmdflag'が'-'
5316 tolower({expr}) *tolower()*
5317 引数の文字列の大文字を小文字に変換してできた文字列を返す(文字
5318 列に|gu|を適用するのとちょうど同じ)。
5320 toupper({expr}) *toupper()*
5321 引数の文字列の小文字を大文字に変換してできた文字列を返す(文字
5322 列に|gU|を適用するのとちょうど同じ)。
5324 tr({src}, {fromstr}, {tostr}) *tr()*
5325 文字列{src}の中で、{fromstr}に含まれる全ての文字を{tostr}の対
5326 応する文字で置き換えた文字列を返す。つまり、{fromstr}の最初の
5327 文字が{tostr}の最初の文字に置き換えられる。2文字目以降も同様。
5328 Unixのコマンド"tr"とちょうど同じである。
5332 echo tr("hello there", "ht", "HT")
5333 < 戻り値は "Hello THere" となる。 >
5334 echo tr("<blob>", "<>", "{}")
5335 < 戻り値は "{blob}" となる。
5337 trunc({expr}) *trunc()*
5338 {expr} をゼロ方向に切りつめた整数を |Float| で返す。
5339 {expr} は |Float| または |Number| に評価されなければならない。
5348 {|+float| 機能つきでコンパイルされたときのみ有効}
5351 type({expr}) {expr}の型を示す数値を返す:
5358 マジックナンバーを使わずに、次のような使い方をすべきである: >
5359 :if type(myvar) == type(0)
5360 :if type(myvar) == type("")
5361 :if type(myvar) == type(function("tr"))
5362 :if type(myvar) == type([])
5363 :if type(myvar) == type({})
5364 :if type(myvar) == type(0.0)
5366 values({dict}) *values()*
5367 {dict}の全ての値からなるリスト|List|を返す。このリストの順序は
5370 virtcol({expr}) *virtcol()*
5371 結果は数値で、{expr}で与えられるファイルの位置の、スクリーン上
5372 での桁の位置を示す。返る値は、指定された位置にある文字の末尾が、
5373 スクリーン座標(の桁)でどこに存在するかである。<Tab>(タブ文字)
5374 が指定した位置にあった場合には、戻り値はそのタブの最後のカラム
5375 (桁)位置になる。具体的に、'ts'が8に設定された状態で第1桁に
5376 <Tab>があった場合、戻り値は8になる。
5377 バイト位置については |col()| を使う。
5378 {expr}の解釈の仕方については|col()|を参照。
5379 'virtualedit'がオンのときは[lnum, col, off]というリストを指定
5380 することもできる。"off"は文字の開始位置からのスクリーン座標で
5381 のオフセットである。例えば、<Tab>の中の位置や、行の最後の文字
5383 現在のモードに対して仮想編集がオンのときは、行末を越えた位置が
5384 返ってくることもある。|'virtualedit'|
5387 $ カーソル行の末尾(カーソル行に表示されている文字数
5389 'x マークxの位置(マークが設定されていない場合、0が返
5391 現在のファイルに対して設定されているマークだけが使用可能なこと
5394 virtcol(".") "foo^Lbar"の"^L"の位置にカーソル、戻り値5
5395 virtcol("$") "foo^Lbar"に対し、戻り値9
5396 virtcol("'t") " there"の'h'に'tを設定、戻り値6
5397 < 最初の桁は1となる。エラーの場合は0が返る。
5398 より高度な例(全ての行の長さの最大値を返す): >
5399 echo max(map(range(1, line('$')), "virtcol([v:val, '$'])"))
5401 visualmode([expr]) *visualmode()*
5402 結果は文字列で、カレントバッファ内で最後に使われたビジュアルモー
5403 ドを教えてくれる。初期状態では単に空文字列を返すだけだが、一度
5404 でもビジュアルモードが使われた場合、その種類によって"v"か"V"か
5405 "<CTRL-V>"(CTRL-Vの文字が1文字で)返される。これはそれぞれ文字
5406 選択、行選択、ブロック選択を意味している。
5408 exe "normal " . visualmode()
5409 < これは最後に使われたのと同じビジュアルモードに入る。また、スク
5410 リプトの動作を、最後に使われたビジュアルモードに応じて変更した
5412 ビジュアルモードにいるときは |mode()| を使ってビジュアルモード
5413 の種類を取得できる。(|:vmap| などの中などで)
5416 {expr}に0以外の数値か空文字列以外の文字列を指定した場合は、ビ
5417 ジュアルモードがクリアされ、以前の値を返す。Note " "と"0"は空
5418 文字列ではないことに注意。よってモードがクリアされる。リス
5419 ト、辞書、浮動小数点数は数値でも文字列でもないのでモードはクリ
5423 winbufnr({nr}) 結果は数値で、{nr}番目のウィンドウに関連付けられているバッファ
5424 の番号。{nr}が0の場合、現在のウィンドウに関連付けられている
5425 バッファの番号が返る。{nr}で存在しないウィンドウを指定した場合
5428 :echo "The file in the current window is " . bufname(winbufnr(0))
5431 wincol() 結果は数値で、ウィンドウの中でカーソルがある位置の仮想桁番号を
5432 表す。これはウィンドウの左側から数えたスクリーン上の桁である。
5435 winheight({nr}) *winheight()*
5436 結果は数値で、{nr}で示されるウィンドウの高さ(行数)を示す。{nr}
5437 が0ならば、現在のウィンドウの高さが返る。{nr}というウィンドウ
5438 が存在しない場合、-1が返る。存在しているウィンドウは、絶対に0
5441 :echo "The current window has " . winheight(0) . " lines."
5445 winline() 結果は数値で、ウィンドウの最上行から数えた行番号を返す。ウィン
5447 カーソルが移動するとファイルの表示が更新され、それによってスク
5451 winnr([{arg}]) 結果は現在のウィンドウを示す数値。最上位のウィンドウは1であ
5453 省略可能な引数{arg}に"$"を設定すると、最後のウィンドウの番号が
5455 {arg}に"#"を設定すると、最後にアクセスしたウィンドウの番号を返
5456 す(|CTRL-W_p|で移動するウィンドウと同じ)。
5457 以前のウィンドウがない場合、またはそれが他のタブページにある場
5459 この番号は|CTRL-W_w|と":wincmd w"で使える。|:wincmd|
5460 |tabpagewinnr()|も参照。
5463 winrestcmd() 現在のウィンドウサイズを復元するための一連の|:resize|コマンド
5464 を返す。これが返すコマンドは、ウィンドウを開閉せず、カレントウィ
5465 ンドウとカレントタブページが変更されていないときのみ正しく動作
5468 :let cmd = winrestcmd()
5469 :call MessWithWindowSizes()
5474 |winsaveview()|が返す辞書|Dictionary|を使ってカレントウィンド
5476 この値を手動で変更した場合、結果は予測できない。
5477 ウィンドウサイズが変更されていると、結果は必ずしも元通りになら
5481 winsaveview() カレントウィンドウの表示状態を復元するための情報を持つ辞書
5482 |Dictionary|を返す。この表示状態を復元するには|winrestview()|
5484 マッピング内でジャンプして、元の表示状態を戻したいときに使われ
5486 折り畳み情報は保存しない。オプション'foldenable'によって一時的
5487 に折り畳みをオフにし、移動中に折り畳みが開かれないようにするこ
5492 coladd カーソル位置の桁オフセット。
5493 'virtualedit'がオンのとき使われる。
5496 topfill 削除行。diffモードでのみ
5499 Note オプションの値は保存されない。
5502 winwidth({nr}) *winwidth()*
5503 結果は数値で、ウィンドウ{nr}の幅。{nr}が0のときはカレントウィ
5504 ンドウの幅を返す。ウィンドウ{nr}が存在しないときは-1を返す。
5507 :echo "The current window has " . winwidth(0) . " columns."
5508 :if winwidth(0) <= 50
5509 : exe "normal 50\<C-W>|"
5513 writefile({list}, {fname} [, {binary}])
5514 |List| {list}をファイル{fname}に書き込む。リストの各要素は改行
5515 文字(NL)で区切られる。各要素は文字列か数値でなければならない。
5516 {binary}が"b"のときはバイナリモードとなり、最後の要素の後にNL
5517 が追加されない。最後の要素が空であると、ファイルの最後の行が
5520 CR文字を加えるには、{list}をwritefile()に渡す前に行わねばなら
5522 既存のファイルは上書きされる(上書き可能ならば)。
5523 書き込みが失敗したときは-1を返す。そうでなければ0を返す。ファ
5524 イルを作成できないときや、書き込みが失敗したときはエラーメッセ
5527 バイト単位でファイルをコピーするには次のようにする: >
5528 :let fl = readfile("foo", "b")
5529 :call writefile(fl, "foocopy", "b")
5533 1. コンパイル時に|+feature-list|とした時にだけサポートされる機能。例: >
5535 2. ある状態の時にだけサポートされる機能。例: >
5536 :if has("gui_running")
5538 3. 適用済みパッチ。最初に|v:version|によってVimのバージョンを確認する。
5539 機能"patch123"はパッチ123が適用されていることを示す。例(バージョン6.2.148
5541 :if v:version > 602 || v:version == 602 && has("patch148")
5542 < Note 148が適用されていても、147が抜けていることもありうるので注意。
5544 all_builtin_terms 総ての組込みターミナルを有効にしてコンパイル
5546 arabic アラビア語をサポート |Arabic|
5547 arp ARPをサポート (Amiga)
5548 autocmd オートコマンドをサポート |autocommand|
5549 balloon_eval |balloon-eval| をサポート
5550 balloon_multiline 複数行バルーンをサポート
5552 browse |:browse|をサポートし、browseが恐らく動作する
5553 builtin_terms 幾つかの組込みターミナルが有効
5554 byte_offset 'statusline'において'o'がサポートされる
5555 cindent 'cindent'をサポート
5556 clientserver リモート呼び出しをサポート |clientserver|
5557 clipboard 'clipboard'をサポート
5558 cmdline_compl |cmdline-completion| コマンドライン補完をサポート
5559 cmdline_hist |cmdline-history| コマンドライン履歴をサポート
5560 cmdline_info 'showcmd'と'ruler'をサポート
5561 comments |'comments'|をサポート
5562 cryptv 暗号化をサポート |encryption|
5563 cscope |cscope|をサポート
5564 compatible Vi互換度を非常に高めてコンパイルされている
5566 dialog_con コンソールダイアログのサポート
5567 dialog_gui GUIダイアログのサポート
5568 diff Compiled with |vimdiff| and 'diff' support.
5569 digraphs digraphsをサポート
5570 dnd レジスタ"~をサポート |quote_~|.
5571 dos32 32ビットDOSバージョン (DJGPP)
5573 ebcdic EBCDIC文字集合のマシン用
5574 emacs_tags Emacs式のタグファイルをサポート
5575 eval 式評価をサポート。もちろん常に真。
5576 ex_extra 拡張exコマンドをサポート |+ex_extra|.
5577 extra_search |'incsearch'|と|'hlsearch'|をサポート
5579 file_in_path |gf|と|<cfile>|をサポート
5580 filterpipe 'shelltemp'がオフのとき、シェルの読み込み・書き込み・
5582 find_in_path includeファイル内の検索をサポート |+find_in_path|
5583 float 浮動小数点数 |Float| サポート
5584 fname_case ファイル名の大文字小文字が区別される(Amiga,MS-DOS,
5585 そしてWindowsでは区別されないので偽)
5586 folding |folding| 折り畳みをサポート
5587 footer GUIのフッタをサポート |gui-footer|
5588 fork system()の代わりにfork()/exec()を用いている
5589 gettext 翻訳メッセージをサポート |multi-lang|
5591 gui_athena AthenaのGUIが有効である
5592 gui_gtk GTK+のGUIが有効である
5593 gui_gnome Gnomeサポート(gui_gtkも定義される)
5594 gui_gtk2 GTK+ 2のGUIが有効である (gui_gtkも定義される)
5595 gui_mac マッキントッシュのGUIが有効である
5596 gui_motif MotifのGUIが有効である
5597 gui_photon PhotonのGUIが有効である
5598 gui_win32 Win32のGUIが有効である
5599 gui_win32s Win32sのGUIが有効である (Windows 3.1)
5600 gui_running VimがGUIモードで起動している、もしくは間もなくする
5601 hangul_input ハングル入力サポート
5603 insert_expand インサートモード時にCTRL-Xの展開がサポートされる
5604 jumplist |jumplist| をサポート
5605 keymap 'keymap' をサポート
5606 langmap 'langmap'サポート
5607 libcall |libcall()| をサポート
5608 linebreak 'linebreak', 'breakat'そして'showbreak'をサポート
5609 lispindent lisp式のインデントをサポート
5610 listcmds バッファリスト用のコマンド|:files|と引数リスト用のコマ
5612 localmap ローカルなマッピングと短縮入力をサポート|:map-local|
5614 macunix Unixファイル用のマッキントッシュバージョン(OS-X)
5616 mksession |:mksession|をサポート
5617 modify_fname ファイル名変換子をサポート |filename-modifiers|
5619 mouseshape 'mouseshape'をサポート
5620 mouse_dec DECのターミナルマウスをサポート
5621 mouse_gpm gpmをサポート (Linuxのコンソールマウス)
5622 mouse_netterm nettermのマウスをサポート
5623 mouse_pterm qnx ptermのマウスをサポート
5624 mouse_sysmouse sysmouse (*BSD コンソールマウス)をサポート
5625 mouse_xterm xtermのマウスをサポート
5626 multi_byte 'encoding' をサポート
5627 multi_byte_encoding 'encoding' がマルチバイトエンコーディングになる
5628 multi_byte_ime IMEによる入力をサポート
5629 multi_lang 複数言語をサポート
5630 mzscheme MzSchemeインターフェイスをサポート |mzscheme|.
5631 netbeans_intg |netbeans|をサポート
5632 netbeans_enabled |netbeans|をサポートし、現在使用している
5633 ole Win32にてOLEオートメーションをサポート
5635 osfiletype osfiletypesをサポート |+osfiletype|
5636 path_extra 'path'と'tags'の上方・下方検索をサポート
5637 perl Perlインターフェイスをサポート
5638 postscript PostScriptファイルの印刷をサポート
5639 python Pythonインターフェイスをサポート
5641 quickfix |quickfix|をサポート
5642 reltime |reltime()|をサポート
5643 rightleft 'rightleft'をサポート
5644 ruby Rubyインターフェイスをサポート
5645 scrollbind 'scrollbind'をサポート
5646 showcmd 'showcmd'をサポート
5648 smartindent 'smartindent'をサポート
5649 sniff SniFFインターフェイスをサポート
5650 startuptime |--startuptime| をサポート
5651 statusline 'statusline', 'rulerformat'そして'titlestring'と
5652 'iconstring'の特殊フォーマットをサポート
5653 sun_workshop Sun |workshop|をサポート
5654 spell スペルチェックをサポート |spell|
5656 syntax_items 現在のバッファに有効なシンタックスが設定されている
5657 system fork()/exec()の代わりにsystem()が使用されている
5658 tag_binary タグファイル内のバイナリサーチ |tag-binary-search|
5659 tag_old_static 旧式の静的tagsをサポート |tag-old-static|
5660 tag_any_white タグファイル内の空白文字をサポート |tag-any-white|.
5661 tcl TCLインターフェースをサポート
5662 terminfo termcapの代わりにterminfoをサポート
5663 termresponse |t_RV|と|v:termresponse|をサポート
5664 textobjects |text-objects|をサポート
5665 tgetent tgetentをサポート。termcapかterminfoファイルが使用可能
5666 title ウィンドウタイトルをサポート |'title'|.
5667 toolbar |gui-toolbar|をサポート
5669 user_commands ユーザ定義コマンドをサポート
5670 viminfo viminfoをサポート
5671 vim_starting Vimの初期化プロセス中は真となる
5672 vertsplit ウィンドウの垂直分割をサポート |:vsplit|
5673 virtualedit オプション'virtualedit'をサポート
5674 visual ビジュアルモードをサポート
5675 visualextra 拡張Visualモードをサポート |blockwise-operators|
5677 vreplace コマンド|gR|と|gr|をサポート
5678 wildignore オプション'wildignore'をサポート
5679 wildmenu オプション'wildmenu'を指定してコンパイル
5680 windows 複数ウィンドウをサポート
5681 winaltkeys オプション'winaltkeys'を指定してコンパイル
5682 win16 Win16バージョン(Windows 3.1)
5683 win32 Win32バージョン(Windows 95/98/ME/NT/2000/XP)
5684 win64 Win64バージョン(Windows 64 bit)
5685 win32unix Win32バージョン。Unixファイルを使用 (Cygwin)
5686 win95 Win32バージョン。MS-Windows 95/98/ME用。
5687 writebackup オプション'writebackup'が起動時にonになる
5688 xfontset X fontsetをサポート |xfontset|
5690 xsmp Xセッションマネージメントをサポート
5691 xsmp_interact 対話的Xセッションマネージメントをサポート
5692 xterm_clipboard xtermのクリップボードサポート
5693 xterm_save xtermのスクリーンの保存復帰をサポート
5699 |pattern|で説明されている正規表現パターンは通常、バッファ内の行に対してマッチ
5700 を検索するために使われる。文字列内でマッチを見つけるために使うときも、ほとんど
5701 は同じように動作する。違いは、文字列が1つの行であるかのように扱われる事である。
5702 文字列が文字"\n"だけを含むとき、これは改行とはみなされない。この"\n"はパターン
5703 内の"\n"や"."にマッチする。例: >
5704 :let a = "aaaa\nxxxx"
5705 :echo matchstr(a, "..\n..")
5708 :echo matchstr(a, "a.x")
5712 "^"は文字列の最初の文字でだけマッチし、"$"は最後の文字でだけマッチすることに注
5715 ==============================================================================
5716 5. 関数定義 *user-functions*
5718 ユーザは自分で新しい関数を定義することができる。その関数は組込み関数とまったく
5719 同じように呼び出せる。関数は一連のExコマンドを実行する。ノーマルモードコマンド
5720 はコマンド|:normal|によって実行できる。
5722 関数名は組込み関数との混同を避ける為、大文字で始まらなければならない。他のスク
5723 リプトで同じ関数名を使用してしまうことを避ける為に、露骨に短い名前は避けるべき
5724 である。関数名を例えば"HTMLcolor()"のように、スクリプトの名前から始めるという
5727 波括弧変数というものもある(|curly-braces-names|を参照)。また、オートロード
5728 |autoload|機構を使うと、関数が呼ばれたときだけ定義することができる。
5731 スクリプトローカルな関数の名前は"s:"で始めなければならない。スクリプトローカル
5732 な関数は、そのスクリプトの中の関数から、またはそのスクリプト内で定義されたユー
5733 ザ定義コマンド、オートコマンドからしか呼ぶことができない。そのスクリプト内で定
5734 義されたマッピングにより呼ぶこともできるが、スクリプトの外部でマッピングが展開
5735 された場合は"s:"の代わりに|<SID>|をつけなければならない。
5737 *:fu* *:function* *E128* *E129* *E123*
5738 :fu[nction] 総ての関数と、その引数を表示する。
5740 :fu[nction] {name} 関数{name}の定義を表示する。
5741 {name}は辞書|Dictionary|の要素の|Funcref|であってもよ
5745 :fu[nction] /{pattern} {pattern}にマッチする名前の関数を表示する。"File"で終
5750 'verbose'が 0 でないとき、これらのコマンドで関数を表示すると、それがどこで定義
5753 :verbose function SetFileTypeSH
5754 function SetFileTypeSH(name)
5755 Last set from /usr/share/vim/vim-7.0/filetype.vim
5757 より詳しくは|:verbose-cmd|を参照。
5760 :fu[nction][!] {name}([arguments]) [range] [abort] [dict]
5761 {name}という名前で新しい関数を定義する。関数名はアル
5762 ファベットと数字と'_'からなり、通常の関数はアルファベッ
5763 トの大文字、スクリプトローカル関数は"s:"で始まらなけれ
5766 {name}は辞書|Dictionary|の要素の|Funcref|であってもよ
5768 :function dict.init(arg)
5769 < "dict"は既に定義されている辞書でなければならない。その
5770 要素"init"がまだ存在しないならば追加される。存在する場
5771 合は、既存の関数を上書きするためには[!]をつけなければ
5772 ならない。この値は番号つきの関数を指す|Funcref|である。
5773 この関数は|Funcref|を通してのみ呼ぶことができ、そこへの
5776 この名前で定義される関数が既に定義済みで[!]が使用され
5777 なかった場合、エラーとなる。[!]が使用されていれば、そ
5778 れまで存在していた関数は、速やかに新しいものへ置換えら
5781 引数{arguments}については|function-argument|を参照。
5783 *a:firstline* *a:lastline*
5784 引数[range]を追加した場合、関数は「範囲」を管理するこ
5785 とができる。「範囲」は"a:firstline"と"a:lastline"に
5786 よって渡される。[range]がなかった場合、":{range}call"
5787 が「範囲」を指定されて実行されると、1行1行について、カー
5788 ソルをその行の先頭に置いた状態で関数を呼び出すことにな
5789 る。|function-range-example|を参照。
5791 引数[abort]を追加すると、関数の実行中にエラーに遭遇し
5794 引数[dict]を追加すると、この関数は辞書|Dictionary|の要
5795 素を通してしか呼べなくなる。そしてその辞書にローカル変
5796 数"self"が定義される。|Dictionary-function|を参照。
5798 *function-search-undo*
5799 関数の実行によって、最後に使用されたサーチパターン、及
5800 びredoコマンドの"."の内容は変更されない。したがって、
5801 関数内で|:nohlsearch| を行っても、関数から戻ると検索結
5804 *:endf* *:endfunction* *E126* *E193*
5805 :endf[unction] 関数定義の終了。このコマンド1つで1行とすること。他のコ
5808 *:delf* *:delfunction* *E130* *E131*
5809 :delf[unction] {name} 関数{name}を削除する。
5810 {name}は辞書|Dictionary|の要素の|Funcref|であってもよ
5813 < この例は"dict"から要素"init"を削除する。この関数への参
5815 *:retu* *:return* *E133*
5816 :retu[rn] [expr] 関数から戻る。"[expr]"が与えられた場合、それは評価され
5817 関数の戻り値として呼出し側に渡される。"[expr]"が与えら
5818 れない場合、数値0が呼出し側に渡される。
5819 関数内に実行されない命令があるかどうかはチェックされな
5820 いことに留意すること。つまり、たとえ":return"命令の後
5821 に何か命令があったとしても、警告も何も与えられない。
5823 |:try|と|:finally|の間で":return"が実行された場合、
5824 ":finally"から対応する|:endtry|までのコマンドがまず実
5825 行される。":try"がネストしている場合、それらの全てに対
5826 してこのプロセスが適用される。そして最も外側の
5829 *function-argument* *a:var*
5830 引数は、与えられた名前によって定義される。関数のなかでは"a:name"("a:"を引数に
5831 接頭)のようにして参照することができる。
5832 *a:0* *a:1* *a:000* *E740* *...*
5833 引数はカンマで区切ることで、最大20まで与えることができる。最後の引数を"..."に
5834 することで、可変長の引数を使用できる。関数の中では"a:1"や"a:2"のようにして可変
5835 長の引数にアクセスできる。"a:0"は可変長引数が幾つあるかを示している(0であるこ
5836 と、つまり引数がそれ以上ないこともある)。"a:000"は全引数を持つリスト|List|を示
5837 している。Note "a:1"は"a:000[0]"と同じである。
5839 a: のスコープとこの変数は固定されており、変更できない。
5840 しかしリスト|List|か辞書|Dictionary|の場合は、その要素を変更できる。よって関数
5841 にリスト|List|を渡し、そこに要素を追加させることができる。関数にリストや辞書を
5842 変更させたくない場合は|:lockvar|を使うこと。
5844 "..."が使われていない時は、引数の数は名前付きの引数の個数を示す。"..."を使った
5847 関数を引数無しで定義することも可能である。その時でも()は付けなければならない。
5848 関数の本体は、宣言の次の行から始まり、対応する|:endfunction|までになる。関数の
5849 中で別の関数を定義することも可能である。
5853 関数の中で変数を使うこともできる。これらは関数から戻ると消滅するローカル変数と
5854 して振舞う。グローバル変数にアクセスするためには"g:"を付ける必要がある。
5857 :function Table(title, ...)
5861 : echo a:0 . " items:"
5867 この関数は次のように呼ぶことが出きる: >
5868 let lines = Table("Table", "line1", "line2")
5869 let lines = Table("Empty Table")
5871 一つ以上の値を返したい場合には、グローバル変数の名前を渡すようにする: >
5872 :function Compute(n1, n2)
5874 : return ["fail", 0]
5876 : return ["ok", a:n1 / a:n2]
5879 この関数は次のように呼ぶことができる: >
5880 :let [success, div] = Compute(102, 6)
5886 *:cal* *:call* *E107* *E117*
5887 :[range]cal[l] {name}([arguments])
5888 関数を呼び出す。関数の名前と引数は|:function|によって指定され
5889 るものである。引数は最大20まで使用可能。戻り値は破棄される。
5890 「範囲」を受け付ける関数に「範囲」を指定しなかった場合、関数は
5891 カーソルの現在位置について一度だけ呼び出される。
5892 「範囲」を受け付けない関数に「範囲」を指定した場合、その範囲の
5893 一行ずつについて関数が呼び出される。その時カーソルは当該行の先
5894 頭に設定される。カーソルは「範囲」の最下行の左端になる(恐らく
5895 最後の関数呼出しの結果、動いた先である)。引数は各呼出しについ
5896 て繰り返し評価される。それは次の例で確かめることができる:
5897 *function-range-example* >
5898 :function Mynumber(arg)
5899 : echo line(".") . " " . a:arg
5901 :1,5call Mynumber(getline("."))
5903 "a:firstline"と"a:lastline"はとにかく定義されるので、「範囲」
5904 の最初や最後で何か違った事をするのにも用いることができる。
5908 :function Cont() range
5909 : execute (a:firstline + 1) . "," . a:lastline . 's/^/\t\\ '
5913 この関数は「範囲」の最初の行を除いた総ての行の先頭に、継続のた
5916 この関数の戻り値からさらに間接参照が行われる場合、その参照先に
5918 :4,8call GetDict().method()
5919 < GetDict()には範囲が渡されるが、method()には渡されない。
5922 関数の再帰的な使用はオプション|'maxfuncdepth'|によって制限することができる。
5925 *autoload-functions*
5926 たくさんの関数または巨大な関数を使うときは、それらが使用されたときだけ自動的に
5927 定義されるようにすることができる。これには2つの方法がある: オートコマンドによ
5928 る方法と、'runtimepath'内の"autoload"ディレクトリによる方法である。
5933 これはユーザマニュアルのセクション|41.14|で説明されている。
5935 オートコマンドは、長いVimスクリプトファイルのプラグインに対して有用である。自動
5936 コマンドを定義し、すぐに|:finish|でそのスクリプトを抜ける。こうするとVimの起動
5937 が速くなる。その後オートコマンドにより|:finish|コマンドをスキップする変数を定義
5940 定義すべき関数名にマッチするパターンを指定してオートコマンドイベント
5941 FuncUndefinedを使う。例: >
5943 :au FuncUndefined BufNet* source ~/vim/bufnetfuncs.vim
5945 ファイル"~/vim/bufnetfuncs.vim"は"BufNet"で始まる関数を定義しなければならない。
5951 これはユーザマニュアルのセクション|41.15|で説明されている。
5953 "autoload"ディレクトリのスクリプトを使う方法はより簡単である。しかし完全に正し
5954 いファイル名を使う必要がある。オートロードされる関数は次のような名前を持つ: >
5956 :call filename#funcname()
5958 このような関数が呼ばれ、それがまだ定義されていなかった場合、Vimは'runtimepath'
5959 内の"autoload"ディレクトリから"filename.vim"というスクリプトファイルを探す。
5960 例えば"~/.vim/autoload/filename.vim"のように。そしてこのファイルは次のような関
5963 function filename#funcname()
5967 このファイル名と関数の # の前の部分は完全に一致しなければならない。そして定義
5968 された関数は呼ばれた関数と完全に同じ名前でなければならない。
5970 サブディレクトリを使うこともできる。関数名の中の # はパスのセパレータのように
5971 解釈される。つまり、次の関数を呼ぶと: >
5973 :call foo#bar#func()
5975 Vimは'runtimepath'からファイル"autoload/foo/bar.vim"を探す。
5977 これはまだ定義されていない変数を参照するときにも使える: >
5979 :let l = foo#bar#lvar
5981 しかしこのオートロードスクリプトがすでに読み込まれている場合、未知の変数があっ
5982 てもこのスクリプトは再読み込みされない。
5984 この変数に値を代入するときは、何も特別なことはない。この方法は、オートロードス
5985 クリプトが読み込まれる前に設定を渡すために使うことができる: >
5987 :let foo#bar#toggle = 1
5988 :call foo#bar#func()
5990 オートロードスクリプト内で定義されるはずの関数を呼んだがスクリプト内で関数が定
5991 義されなかった場合、その関数を呼ぶたびにそのスクリプトがsourceされる。そして毎
5994 また、2つのスクリプト間で、互いに自分が定義される前に相手を呼ぶような関数があ
5996 トップレベルでオートロード機能を使うのは避けること。
5998 Hint: たくさんのファイルからなるスクリプトを配布する場合には、|vimball|ユーティ
5999 リティを使うとそれらをまとめることができる。ユーザマニュアルの
6000 |distribute-script|も参照。
6002 ==============================================================================
6003 6. 波括弧変数 *curly-braces-names*
6005 変数を使える文脈ではいつでも「波括弧」変数を使うことができる。これは有効な変数
6006 名であり、次のように、1個以上の式を波括弧{}で囲む: >
6007 my_{adjective}_variable
6009 Vimはこれを見つけると、まず波括弧の中の式を評価し、その値をもとの位置に置きか
6010 え、全体を変数名として再解釈する。よって上の例では、変数"adjective"に"noisy"が
6011 代入されていたとすると、この変数は"my_noisy_variable"となる。あるいは、
6012 "adjective"に"quiet"が代入されていたとすれば"my_quiet_variable"となる。
6014 これの応用の1つは、オプション値によって支配される変数の集合を作ることである。
6016 echo my_{&background}_message
6018 は現在の'background'の値に応じて"my_dark_message"か"my_light_message"の中身を
6022 echo my_{adverb}_{adjective}_message
6024 echo my_{ad{end_of_word}}_message
6025 ここで"end_of_word"は"verb"か"jective"のどちらかである。
6027 しかし、波括弧の中の式を評価した結果が有効な変数名とならなければならない。
6031 というのは、展開の結果が"ca + bd"となるからで、これは有効な名前ではない。
6033 *curly-braces-function-names*
6034 同様の方法で評価した名前により関数を定義したり呼び出したりできる。
6036 :let func_end='whizz'
6037 :call my_func_{func_end}(parameter)
6039 この例は関数"my_func_whizz(parameter)"を呼びだす。
6041 ==============================================================================
6042 7. コマンド *expression-commands*
6044 :let {var-name} = {expr1} *:let*
6045 内部変数{var-name}に式{expr1}の結果をセットする。変数
6046 の型は{expr1}によって決定される。{var-name}という変数
6047 がまだ存在しない場合、新たに作成される。
6049 :let {var-name}[{idx}] = {expr1} *E689*
6050 リストの要素に式{expr1}の結果をセットする。{var-name}
6051 はリストを参照し、{idx}はそのリストの有効なインデック
6052 スでなければならない。ネストしたリストに対してはインデ
6054 このコマンドはリストに要素を追加するためには使えない。
6055 文字列の i バイト目をセットするためにも使えない。それ
6057 :let var = var[0:2] . 'X' . var[4:]
6061 :let {var-name}[{idx1}:{idx2}] = {expr1} *E708* *E709* *E710*
6062 リスト|List|の一部を式{expr}の値で置き換える。{expr}の
6063 値は正しい個数の要素を持つリストでなければならない。
6065 {idx2}を省略するとリストの末尾となる。
6066 指定された範囲の一部がリストの末尾を越える場合、要素が
6069 *:let+=* *:let-=* *:let.=* *E734*
6070 :let {var} += {expr1} ":let {var} = {var} + {expr1}"と同様。
6071 :let {var} -= {expr1} ":let {var} = {var} - {expr1}"と同様。
6072 :let {var} .= {expr1} ":let {var} = {var} . {expr1}"と同様。
6073 {var}がセットされていないときや、{var}と{expr1}の型が
6077 :let ${env-name} = {expr1} *:let-environment* *:let-$*
6078 環境変数{env-name}に式{expr1}の結果をセットする。型は
6080 :let ${env-name} .= {expr1}
6081 環境変数{env-name}に{expr1}を付け加える。その環境変数
6082 が存在しないときは"="と同様にはたらく。
6084 :let @{reg-name} = {expr1} *:let-register* *:let-@*
6085 式{expr1}の結果をレジスタ{reg-name}に書きこむ。
6086 {reg-name}は単一の文字でかつ、書きこむことのできるレジ
6087 スタでなければならない(|registers|を参照)。"@@"は名前
6088 無しレジスタとして使用でき、"@/"はサーチパターンとして
6090 {expr1}の結果が<CR>か<NL>で終了していた場合、レジスタ
6091 は行単位で設定され、そうでなければキャラクタ単位で設定
6093 次のコマンドにより最後に検索したパターンをクリアするこ
6096 < これは空文字列を検索するのとは異なる。空文字列を検索す
6099 :let @{reg-name} .= {expr1}
6100 レジスタ{reg-name}に{expr1}を付け加える。このレジスタ
6101 が空のときは、そこに{expr1}をセットする。
6103 :let &{option-name} = {expr1} *:let-option* *:let-&*
6104 オプション{option-name}に式{expr}の値をセットする。文
6105 字列や数値の値はそのオプションの型に変換される。
6106 ウィンドウやバッファについてローカルなオプションに対し
6107 ては、その効果は|:set|コマンドを使ったときと同様で、ロー
6108 カルな値とグローバルな値の両方が変更される。
6110 :let &path = &path . ',/usr/local/include'
6112 :let &{option-name} .= {expr1}
6113 文字列のオプションの場合: その値に{expr}を付け加える。
6114 |:set+=|とは違い、コンマを挿入しない。
6116 :let &{option-name} += {expr1}
6117 :let &{option-name} -= {expr1}
6118 数値または切替のオプションの場合: {expr1}を足す・引く。
6120 :let &l:{option-name} = {expr1}
6121 :let &l:{option-name} .= {expr1}
6122 :let &l:{option-name} += {expr1}
6123 :let &l:{option-name} -= {expr1}
6124 上と同様だが、オプションのローカルな値だけをセットする
6125 (ローカルな値があるならば)。|:setlocal|と同様にはたら
6128 :let &g:{option-name} = {expr1}
6129 :let &g:{option-name} .= {expr1}
6130 :let &g:{option-name} += {expr1}
6131 :let &g:{option-name} -= {expr1}
6132 上と同様だが、オプションのグローバルな値だけをセットす
6133 る(グローバルな値があるならば)。|:setglobal|と同様には
6136 :let [{name1}, {name2}, ...] = {expr1} *:let-unpack* *E687* *E688*
6137 {expr1}の値はリスト|List|でなければならない。そのリス
6138 トの最初の要素が{name1}に代入され、2番目の要素が
6140 nameの個数がリスト|List|の要素の個数に一致しなければな
6142 前述のように各nameは":let"コマンドの要素の1つになるこ
6145 :let [s, item] = GetItem(s)
6146 < 詳細: 最初に{expr1}が評価され、それから順番に代入が行
6147 われる。{name2}が{name1}に依存するかどうかは問題になる。
6151 :let [i, x[i]] = [1, 2]
6155 :let [{name1}, {name2}, ...] .= {expr1}
6156 :let [{name1}, {name2}, ...] += {expr1}
6157 :let [{name1}, {name2}, ...] -= {expr1}
6158 上と同様だが、リスト|List|の各要素に対し連結・足し算・
6161 :let [{name}, ..., ; {lastname}] = {expr1}
6162 |:let-unpack|と同様だが、リスト|List|の要素数がnamesの
6163 数より多くてもよい。余った要素のリストが{lastname}に代
6164 入される。要素の余りがないとき{lastname}は空リストにな
6167 :let [a, b; rest] = ["aval", "bval", 3, 4]
6169 :let [{name}, ..., ; {lastname}] .= {expr1}
6170 :let [{name}, ..., ; {lastname}] += {expr1}
6171 :let [{name}, ..., ; {lastname}] -= {expr1}
6172 上と同様だが、リスト|List|の各要素に対して連結・足し算
6175 :let {var-name} .. 変数{var-name}の値を一覧表示する。変数の名前を複数指定
6176 することができる。以下の特別な名前が認識される: *E738*
6185 :let 全変数の値を一覧表示する。値の前に変数の型が示される:
6191 :unl[et][!] {name} ... *:unlet* *:unl* *E108* *E795*
6192 内部変数{name}を削除する。複数の変数名を指定すると、そ
6193 れらが全て削除される。名前はリスト|List|や辞書
6194 |Dictionary|の要素でもよい。
6195 [!]をつけると存在しない変数に対するエラーメッセージを
6197 リスト|List|から1個以上の要素を削除することができる: >
6198 :unlet list[3] " 4番目の要素を削除
6199 :unlet list[3:] " 4番目から最後までの要素を
6201 < 辞書からは一度に1個の要素を削除することができる: >
6204 グローバル変数とスクリプトローカル変数をクリーンアップ
6205 するために特に便利である(これらはスクリプト終了時に検
6206 出されない)。関数ローカルな関数は、その関数から抜ける
6209 :lockv[ar][!] [depth] {name} ... *:lockvar* *:lockv*
6210 内部変数{name}をロックする。ロックすると、それ以降変更
6212 ロックされた変数を削除することはできる: >
6214 :let v = 'asdf' " 失敗!
6217 ロックされた変数を変更しようとするとエラーメッセージ
6218 "E741: Value of {name} is locked"が表示される。
6220 [depth]はリスト|List|や辞書|Dictionary|をロックすると
6221 きに意味がある。どれだけ深くロックするかを指定する:
6222 1 リストや辞書それ自身をロックする。要素
6225 2 要素の値もロックする。その要素がリスト
6228 3 2と同様だが、リスト・辞書内のリスト・
6229 辞書に対してもあてはまる。1レベル深い。
6230 [depth]の既定値は2であり、{name}がリストまたは辞書であ
6233 深さを無限にするには[!]を使い、[depth]を省略する。しか
6234 しループを捕捉するために深さの最大値は100に設定されて
6237 Note 2つの変数が同じリスト|List|を参照している場合、片
6238 方の変数をロックすると、もう一方の変数を介してアクセス
6241 :let l = [0, 1, 2, 3]
6244 :let cl[1] = 99 " 代入できない!
6246 これを回避するにはリストのコピーを作るとよい。
6250 :unlo[ckvar][!] [depth] {name} ... *:unlockvar* *:unlo*
6251 内部変数{name}をアンロックする。|:lockvar|の逆を行う。
6254 :if {expr1} *:if* *:endif* *:en*
6255 :en[dif] {expr1}が非ゼロと評価された場合に、対応する":else"か
6258 バージョン4.5から5.0まで間のVimは、":if"と":endif"の間
6259 の総てのExコマンドは無視する。この2つのコマンドは将来
6260 の拡張性を、下位互換と同時に提供するためのものである。
6261 ネスティング(入れ子)が可能である。":else"や":elseif"は
6262 無視され、"else"部分は一切実行されないことに注意。
6264 あなたはこれを、旧バージョンとの互換性を保ったまま使用
6267 : version-5-specific-commands
6269 < しかしそれでも"endif"を見つけるために後続のコマンドを
6270 パースする必要がある。古いVimで新しいコマンドを使うと
6271 問題が起こることがある。例えば":silent"が":substitute"
6272 コマンドと認識されるなど。その場合には、":execute"を使
6275 : execute "silent 1,$delete"
6278 NOTE: ":append"と":insert"コマンドは":if"と":endif"の
6281 *:else* *:el* *E581* *E583*
6282 :el[se] 対応する":if"ブロックが実行されなかった場合には、これ
6283 に対応する":else"か":endif"までのコマンドが実行され
6286 *:elseif* *:elsei* *E582* *E584*
6287 :elsei[f] {expr1} ":else" ":if"の省略形。":endif"を付け加える(入れ子にす
6290 :wh[ile] {expr1} *:while* *:endwhile* *:wh* *:endw*
6291 *E170* *E585* *E588* *E733*
6292 :endw[hile] {expr1}が非ゼロとして評価される間、":while"と
6293 ":endwhile"の間のコマンドを繰り返し実行する。
6294 ループの内側でエラーが生じた場合、endwhileの直後から実
6298 :while lnum <= line("$")
6300 :let lnum = lnum + 1
6303 注意: ":append"や":insert"コマンドは":while"ループの内側では正
6306 :for {var} in {list} *:for* *E690* *E732*
6307 :endfo[r] *:endfo* *:endfor*
6308 {list}の各要素に対し、":for"と":endfor"の間のコマンド
6309 を繰り返す。変数{var}に各要素の値がセットされる。
6310 ループの内側のコマンドでエラーが検出されたときは
6311 "endfor"の後から実行が継続される。
6312 ループの内側で{list}を変更するとどの要素が使われるかに
6313 影響を与える。それを望まない場合はコピーを作ること: >
6314 :for item in copy(mylist)
6315 < コピーを作らないと、Vimは現在の要素に対してコマンドを
6316 実行する前に、リストの次の要素への参照を保存する。その
6317 ため副作用なしに現在の要素を削除することができる。それ
6318 以降の要素を変更すると、それが見つからなくなる。つまり
6319 以下の例は動作する(リストを空にする非効率な方法): >
6321 call remove(mylist, 0)
6323 < Note リストを並べ替える(例えばsort()やreverse()で)と予
6325 Note {var}の型が変わってしまうのを避けるために、リスト
6326 の各要素の型は同じでなければならない。ループの末尾でこ
6327 の変数をunletすれば要素の型が同一でなくてもよくなる: >
6328 for item in ["foo", ["bar"]]
6330 unlet item " これがないと E706 になる
6333 :for [{var1}, {var2}, ...] in {listlist}
6335 上の":for"と同様だが、{listlist}の各要素がリストでなけ
6336 ればならない点が異なる。そのリストの各要素が{var1},
6338 :for [lnum, col] in [[1, 3], [2, 5], [3, 8]]
6339 :echo getline(lnum)[col]
6342 *:continue* *:con* *E586*
6343 :con[tinue] ":while"または":for"ループの内側で使われたときは、その
6345 ループの内側の|:try|と|:finally|の間で使われた場合、
6346 |:finally|から|:endtry|までの間のコマンドがまず実行さ
6347 れる。ループの内側で":try"がネストしている場合、全ての
6348 ":try"に対してこのプロセスが適用される。最も外側の
6349 ":endtry"の後ループの開始位置まで戻る。
6351 *:break* *:brea* *E587*
6352 :brea[k] ":while"または":for"ループの内側で使われたときは、対応
6353 する":endwhile"または":endfor"の後のコマンドまでスキッ
6355 ループの内側の|:try|と|:finally|の間で使われた場合、
6356 |:finally|から|:endtry|までの間のコマンドがまず実行さ
6357 れる。ループの内側で":try"がネストしている場合、全ての
6358 ":try"に対してこのプロセスが適用される。最も外側の
6359 ":endtry"の後ループの後までジャンプする。
6361 :try *:try* *:endt* *:endtry* *E600* *E601* *E602*
6362 :endt[ry] ":try"と":endtry"の間のコマンド(":source"コマンド、関
6363 数呼び出し、オートコマンド実行を含めた全てのコマンド実
6366 エラーや割り込みが検出された場合、後に|:finally|コマン
6367 ドがあるならば、":finally"の後から実行が継続される。そ
6368 うでければ、または":endtry"に達した後は次の動的に囲ん
6369 でいる":try"に対応する":finally"などが探される。その後
6370 スクリプトは実行を停止する。(関数定義に引数"abort"がつ
6373 :try | edit too much | finally | echo "cleanup" | endtry
6374 :echo "impossible" " 実行されない。上のコマンドにより
6377 さらに、(動的に)":try"と":endtry"の内側にあるエラーや
6378 割り込みは例外に変換される。そしてそれは|:throw|コマン
6379 ドによって投げたときと同様に捕捉できる(|:catch|を参照)。
6380 この場合はスクリプトの実行は停止しない。
6382 割り込み例外には"Vim:Interrupt"という値が使われる。
6383 Vimコマンドにおけるエラーは"Vim({command}):{errmsg}"と
6384 いう形式の値に変換される。その他のエラーは
6385 "Vim:{errmsg}"という形式のエラーに変換される。ここで
6386 {command}はコマンドの完全な名前であり、{errmsg}はその
6387 例外が捕捉されなかった場合に表示されるメッセージで、常
6390 :try | sleep 100 | catch /^Vim:Interrupt$/ | endtry
6391 :try | edit | catch /^Vim(edit):E\d\+/ | echo "error" | endtry
6393 *:cat* *:catch* *E603* *E604* *E605*
6394 :cat[ch] /{pattern}/ {pattern}にマッチする例外が発生し、より前の|:catch|
6395 で捕捉されなかった場合、このコマンドから次の|:catch|,
6396 |:finally|, |:endtry|までのコマンドが実行される。その
6397 ような例外が発生しなかった場合、そのコマンドはスキップ
6399 {pattern}が省略された場合は全てのエラーが捕捉される。
6401 :catch /^Vim:Interrupt$/ " 割り込み (CTRL-C) を捕捉
6402 :catch /^Vim\%((\a\+)\)\=:E/ " 全Vimエラーを捕捉
6403 :catch /^Vim\%((\a\+)\)\=:/ " 例外と割り込みを捕捉
6404 :catch /^Vim(write):/ " :writeにおける全エラーを捕捉
6405 :catch /^Vim\%((\a\+)\)\=:E123/ " エラーE123を捕捉
6406 :catch /my-exception/ " ユーザ定義例外を捕捉
6410 {pattern}を囲むのに/以外の文字を使うことができる。ただ
6411 しその文字は特別な意味(例: '|'や'"'など)を持っていては
6412 ならず、{pattern}の内側に現れてはならない。
6413 NOTE: エラーメッセージの本文によって":catch"することは
6414 確実ではない。メッセージはロケールによって異なるからで
6417 *:fina* *:finally* *E606* *E607*
6418 :fina[lly] |:try|と":finally"の間を抜ける前に必ず、このコマンドか
6419 ら対応する|:endtry|の間のコマンドが実行される。つまり
6420 正常に進んだ場合、|:continue|, |:break|, |:finish|,
6421 |:return|を使った場合、エラー・割り込み・例外が発生し
6422 た場合(|:throw|を参照)のいずれの場合でも。
6424 *:th* *:throw* *E608*
6425 :th[row] {expr1} {expr1}を評価し、例外として投げる。|:try|と|:catch|の
6426 間で":throw"が使われた場合、{expr1}にマッチする最初の
6427 |:catch|までのコマンドはスキップされる。そのような
6428 ":catch"がない場合、または":catch"と|:finally|の間で
6429 ":throw"が使われた場合、":finally"から|:endtry|までの
6430 コマンドが実行される。":throw"が":finally"の後で実行さ
6431 れた場合、":endtry"までのコマンドはスキップされる。
6432 ":endtry"において、動的に囲んでいる次の":try"(これは関
6433 数呼び出しやスクリプトsourceも含めて探される)から対応
6434 する":catch"までに対しこのプロセスが再び適用される。例
6435 外が捕捉されない場合、コマンドの処理は終了する。
6437 :try | throw "oops" | catch /^oo/ | echo "caught" | endtry
6440 :ec[ho] {expr1} .. 各{expr1}をスペースで区切って表示する。最初の{expr1}の
6443 改行が必要な場合 "\n" を使用する。カーソルを第1桁に
6445 色強調を行うにはコマンド|:echohl|を使用する。
6446 コメント文を同じ行に続けることはできない。
6448 :echo "the value of 'shell' is" &shell
6450 このコマンドの後、再描画を行うと表示したメッセージが消
6451 えてしまう。Vim は一連のコマンドが完了するまで再描画を
6452 後回しにするため、この現象は頻繁に発生する。例えば、
6453 ":echo" より前に実行したコマンドが後で再描画を引き起こ
6454 し、メッセージが消えてしまうということがある(再描画は
6455 しばしばユーザが何か入力するまで後回しにされる)。この
6456 問題を避けるには、|:redraw| を使って強制的に再描画する
6458 :new | redraw | echo "there is a new window"
6462 :echon {expr1} .. 改行を付けずに、{expr1}を表示する。|:comment|も参照。
6463 色強調を行うにはコマンド|:echohl|を使用する。
6464 コメント文を同じ行に続けることはできない。
6466 :echon "the value of 'shell' is " &shell
6468 Vimコマンドの":echo"と、外部のシェルコマンドである
6470 :!echo % --> filename
6471 < ":!"の引数は展開される。|:_%|を参照。 >
6472 :!echo "%" --> filename or "filename"
6473 < 前の例のように働く。ダブルクォートが表示されるかどうか
6474 は、使用している'shell'に依存する。 >
6475 :echo % --> 何も表示されない
6476 < '%'は式として不当な文字である。 >
6479 :echo expand("%") --> filename
6480 < '%'を展開するために関数expand()を呼び出している。
6483 :echoh[l] {name} 次の|:echo|, |:echon|, |:echomsg|"コマンドから、ハイラ
6484 イトグループ{name}を適用する。|input()|のプロンプトに
6486 :echohl WarningMsg | echo "Don't panic!" | echohl None
6487 < 使用した後にはグループを"None"に戻すことを忘れないよう
6488 に。さもないとそれ以降のechoの表示総てがハイライトされ
6492 :echom[sg] {expr1} .. 式を本当のメッセージとして表示し、そのメッセージをメッ
6493 セージ履歴|message-history|に保存する。
6494 |:echo|コマンド同様に、引数の間にスペースが挿入される。
6495 しかし印字不可能な文字は解釈されずに表示される。
6496 |:echo|とはかなり異なり、むしろ|:execute|に近い方法で
6497 解析がされる。なんらかを表示する前に、まず最初に全ての
6498 式が評価し、連結する。式を評価した値は数値か文字列でな
6499 ければならない。辞書やリストはエラーとなる。
6500 強調を行うには|:echohl|コマンドを使う。
6502 :echomsg "It's a Zizzer Zazzer Zuzz, as you can plainly see."
6503 < 画面を再描画したときメッセージが消去されてしまうのを避
6504 ける方法については|:echo-redraw|を参照。
6506 :echoe[rr] {expr1} .. 式をエラーメッセージとして表示し、そのメッセージを
6507 メッセージ履歴|message-history|に保存する。スクリプト
6508 や関数の中で使用されたときは行番号が付け加えられる。
6509 |:echo|コマンドと同様に引数の間にスペースが挿入される。
6510 try条件文の中で使用されたときは、このメッセージがエラ
6511 ー例外として投げられる。(|try-echoerr|を参照)
6513 :echoerr "This script just failed!"
6515 単にメッセージを強調させたい場合には|:echohl|を使うこ
6516 と。ビープを鳴らしたいときには次のようにする: >
6517 :exe "normal \<Esc>"
6520 :exe[cute] {expr1} .. {expr1}の評価結果の文字列をExコマンドとして実行する。
6521 複数の引数は連結され、間にスペースが挿入される。
6522 {expr1}は処理されたコマンドとして扱われ、コマンドライ
6524 コメント文を同じ行に続けることはできない。
6526 :execute "buffer " nextbuf
6527 :execute "normal " count . "w"
6529 ":execute"は'|'を受けつけないコマンドに、次のコマンドを
6530 続けて実行させるのにも使用できる。例: >
6531 :execute '!ls' | echo "theend"
6532 < (訳注:普通の使い方では":!ls"の後には'|'を使って、Exコ
6534 また":execute"は、Vimスクリプト内でコマンド":normal"の
6535 引数に制御文字を書くことを避けるために役に立つ。 >
6536 :execute "normal ixxx\<Esc>"
6537 < これで<Esc>文字を表す。|expr-string|を参照。
6539 ファイル名の中の特殊文字を正しくエスケープするように
6540 注意すること。Vim コマンドに与えるファイル名をエス
6541 ケープするには |fnameescape()| を使う。|:!| コマンドに
6542 与えるときは |shellescape()| を使う。
6544 :execute "e " . fnameescape(filename)
6545 :execute "!ls " . shellescape(expand('%:h'), 1)
6547 注意:executeに渡す文字列としては、"while"や"if"系のコ
6548 マンドが始まったり終ったりするだけのようなものは不適格
6549 である。よって次のような例は認められない: >
6550 :execute 'while i > 5'
6551 :execute 'echo "test" | break'
6553 文字列の中に完全な"while"や"if"コマンドが含まれること
6555 :execute 'while i < 5 | echo i | let i = i + 1 | endwhile'
6559 ":execute"や":echo"そして":echon"は、同一行に直接コメ
6560 ントを続けることはできない。何故ならそれらのコマンドに
6561 とって'"'は文字列の始まりに見えてしまうからである。し
6562 かし'|'の後にコメントを書くことは可能である。例: >
6563 :echo "foo" | "this is a comment
6565 ==============================================================================
6566 8. 例外処理 *exception-handling*
6568 Vimスクリプト言語は例外処理機構を備えている。この節では例外処理をどのように行
6571 例外はエラー発生時や割り込み発生時にVimによって投げられる。それについては
6572 |catch-errors|と|catch-interrupt|を参照。ユーザはコマンド|:throw|によって明示
6573 的に例外を投げることができる。|throw-catch|を参照。
6576 TRY 条件文 *try-conditionals*
6578 例外を捕捉したり、例外を引き金として後始末のコードを実行することができる。try
6579 条件文を使う事によってcatch節(これが例外を捕捉する)やfinally節(後始末のために
6581 try条件文はコマンド|:try|によって始まり、対応するコマンド|:endtry|によって終了
6582 する。その間でコマンド|:catch|によりcatch節を定めたり、コマンド|:finally|によ
6583 ってfinally節を定めることができる。catch節は1個もなかったり、複数個あってもよ
6584 い。しかしfinally節は1個までしか持てない。finally節の後にcatch節があってはなら
6585 ない。catch節とfinally節の前の部分はtryブロックと呼ばれる。
6605 try条件文により、コードから発生する例外を監視したり、適切な対応を取ることができる。
6606 tryブロック内で発生した例外は捕捉される。tryブロックとcatch節内で発生した例外
6608 tryブロックの実行中に例外が発生しなかった場合は、制御は(もしあれば)finally節に
6609 移動する。その実行後に、スクリプトは":endtry"の後の行から実行を継続する。
6610 tryブロックの実行中に例外が発生した場合は、tryブロックの残りの行はスキップされる。
6611 例外はコマンド":catch"の引数として指定された正規表現に照合される。最初にマッチ
6612 した":catch"の後のcatch節が実行される。他のcatch節は実行されない。catch節は次
6613 に":catch", ":finally", ":endtry"が現れたところで終了する(どれでもよい)。
6614 ":endtry"に達すると、スクリプトは次の行から通常通り実行が続けられる。
6615 発生した例外が、コマンド":catch"で指定されたどの正規表現にもマッチしないとき、
6616 その例外はそのtry条件文で捕捉されず、どのcatch節も実行されない。finally節があ
6617 るならば実行される。finally節の実行中は例外は後回しにされ、":endtry"のときに実
6618 行される。そして":endtry"の後のコマンドは実行されず、例外は他のどこかで捕捉さ
6619 れる。|try-nesting|を参照。
6620 catch節の実行中に新たな例外が発生した場合は、そのcatch節の残りの行は実行されな
6621 い。新しい例外は同じtry条件文のどの":catch"コマンドの正規表現にも照合されず、
6622 どのcatch節も実行されない。しかしfinally節があるならばそこが実行され、その間そ
6623 の例外は保留される。":endtry"の後のコマンドは実行されない。新しい例外は他のど
6624 こかで捕捉される。|try-nesting|を参照。
6625 finally節の実行中に例外が発生した場合は、そのfinally節の残りの行は実行されない。
6626 tryブロックやそのcatch節のどこかで例外が発生してからそのfinally節が実行されて
6627 いた場合は、元の(保留されていた)例外は破棄される。":endtry"の後のコマンドは実
6628 行されない。finally節で発生した例外は伝播し、他のどこかで捕捉される。
6631 完全なtry条件文を囲む":while"ループ内で、tryブロックやcatch節において":break"
6632 や":continue"が実行されたときもfinally節が実行される。
6633 また、関数の中やsourceされたスクリプト中で、tryブロックやtry条件文のcatch節に
6634 おいて":return"や":finish"が実行されたときもfinally節が実行される。finally節の
6635 実行中は":break", ":continue", ":return", ":finish"は保留され、":endtry"に達し
6636 たとき再開される。しかしこれらは、そのfinally節内で例外が発生したときは破棄さ
6638 完全なtry条件節を囲む":while"ループ内での":break"や":continue"、またはfinally
6639 節内で":return"や":finish"に出会ったときは、finally節の残りはスキップされ、通
6640 常通り":break", "continue", ":return", "finish"が実行される。もしそのfinally節
6641 の前に、tryブロックやcatch節内で例外が発生したり、":break", ":continue",
6642 ":return", ":finally"が行われていた場合は、それらの保留されていた例外やコマン
6645 例として |throw-catch| と |try-finally| を参照。
6648 try条件文のネスト *try-nesting*
6650 try条件文は任意にネストされられる。つまり、try条件文のtryブロック・catch節・
6651 finally節のなかに別の完全なtry条件文を書くことができる。内側のtry条件文がtryブ
6652 ロックで発生した例外を捕捉しなかったときや、catch節・finally節で新たな例外が発
6653 生したときは、外側のtry条件文がそのルールにしたがって例外を捕捉する。内側の
6654 try条件文が外側の条件文のtryブロックの中にある場合はcatch節が判定されるが、そ
6655 うでない場合はfinally節のみが実行される。これはネストの仕方には関係ない。つま
6656 り、内側のtry条件文が直接外側のtry条件文に含まれていてもよいし、外側がスクリプ
6657 トをsourceしたり、内側のtry条件文を含む関数を呼び出していてもよい。
6659 有効なtry条件文のどれも例外を捕捉しなかったときは、それらのfinally節が実行され
6660 る。その後、スクリプトの実行は停止する。":throw"コマンドにより明示的に投げられ
6661 た例外が捕捉されなかった場合は、エラーメッセージが表示される。Vimによって暗黙
6662 的に投げられたエラーや割り込み例外については、通常通りエラーメッセージや割り込
6665 例として |throw-catch| を参照。
6668 例外処理コードの検査 *except-examine*
6670 例外処理のコードはトリッキーになりがちである。何が起こっているか知りたいときは
6671 スクリプトファイルをsourceするときに'verbose'を13に設定するか、コマンド修飾子
6672 ":13verbose"を使う。すると例外が発生・破棄・捕捉・完了したときには表示されるよ
6673 うになる。冗長度のレベルを14異常にすると、finally節において保留されているもの
6674 も表示されるようになる。この情報はデバッグモードでも表示される
6675 (|debug-scripts|を参照)。
6678 例外の生成と捕捉 *throw-catch*
6680 任意の数値や文字列を例外として投げることができる。コマンド|:throw|を使い、投げ
6684 < *throw-expression*
6685 式を引数に指定することもできる。まずその式が評価され、その結果が投げられる: >
6686 :throw 4705 + strlen("string")
6687 :throw strpart("strings", 0, 6)
6689 ":throw"コマンドの引数を評価している最中に例外が発生することもありうる。その例
6690 外が捕捉されない限り、その式の評価は破棄される。
6691 よって、その":throw"コマンドは例外を投げることができない。
6707 :throw Foo("arrgh") + Bar()
6709 この例を実行すると"arrgh"が投げられ、Bar()が実行されないため"in Bar"は表示され
6711 :throw Foo("foo") + Bar()
6712 "in Bar"を表示し、4711を投げる。
6714 式を引数として受け取る他のコマンドでも、式の評価中に捕捉されない例外が発生する
6715 とコマンドが破棄される。そして例外はそのコマンドを呼び出した位置へ伝播する。
6724 この例で、"then"と"else"のどちらも表示されない。
6727 例外は、1個以上の|:catch|コマンドを持つtry条件文で捕捉することができる。これに
6728 ついては|try-conditionals|を参照。各":catch"コマンドで捕捉される値は、引数にて
6729 正規表現で指定できる。マッチする例外が捕捉されると、その後に続くcatch節が実行
6733 :function! Foo(value)
6737 : echo "Number thrown"
6739 : echo "String thrown"
6746 最初のFoo()の呼び出しは"Number thrown"を表示し、2番目の呼び出しは"String
6747 thrown"を表示する。例外は、順番に":catch"コマンドに照合される。最初にマッチし
6748 たcatch節だけが実行される。そのため、より限定的な":catch"を先に書くべきである。
6749 次の順序で書くと無意味になってしまう: >
6752 : echo "String thrown"
6754 : echo "Number thrown"
6756 最初の":catch"は常にマッチするため、2番目のcatch節は決して実行されない。
6759 一般的な正規表現により例外を捕捉した場合、その正確な値には変数|v:exception|に
6763 : echo "Number thrown. Value is" v:exception
6765 また、どこで例外が発生したかも知りたいだろう。これは|v:throwpoint|に保持されて
6766 いる。Note "v:exception"と"v:throwpoint"は最も直近に捕捉された例外に対し、それ
6771 : if v:exception != ""
6772 : echo 'Caught "' . v:exception . '" in ' . v:throwpoint
6774 : echo 'Nothing caught'
6802 Caught "4711" in function Foo, line 4
6803 Caught "oops" in function Foo, line 10
6806 実用的な例: 次のコマンド":LineNumber"は、それが呼び出されたスクリプトや関数中
6809 :function! LineNumber()
6810 : return substitute(v:throwpoint, '.*\D\(\d\+\).*', '\1', "")
6812 :command! LineNumber try | throw "" | catch | echo LineNumber() | endtry
6815 try条件文によって捕捉されないはそれを囲むtry条件文によって捕捉することができる
6824 : echo "inner finally"
6830 内側のtry条件文はこの例外を捕捉せず、finally節が実行されるだけである。そしてこ
6831 の例外は外側のtry条件文で捕捉される。この例を実行すると"inner finally"と"foo"
6835 例外を捕捉した後、新しい例外を投げて他のcatch節で捕捉させることができる: >
6845 : echo "Caught foo, throw bar"
6853 : echo "Caught" v:exception
6856 これを実行すると"Caught foo, throw bar"と"Caught bar"が表示される。
6859 Vimスクリプト言語には本物のrethrowはないが、代わりに"v:exception"を使うことが
6866 : echo "Rethrow" v:exception
6871 Note この方法はVimのエラーや割り込み例外を"rethrow"するためには使えない。Vimの
6872 内部例外を偽装することはできないからである。それを行おうとするとエラー例外が発
6873 生する。その状況を表す自分自身の例外を投げるべきである。独自のエラー例外値を含
6874 むVimのエラー例外を発生させたい場合には、コマンド|:echoerr|を使うことができる: >
6880 : echoerr v:exception
6888 Vim(echoerr):Vim:E492: Not an editor command: asdf ~
6893 しばしばスクリプト中でグローバルな設定を変更し、最後に元の設定を復元することが
6894 ある。しかしユーザがCTRL-Cを押してスクリプトを中断すると、設定が一貫しない状態
6895 になってしまう。スクリプトの開発段階においても、エラーが発生したり、明示的に例
6896 外を投げたが捕捉されなかった場合に、同じことが起こりうる。この問題は、try条件
6897 文を使ってfinally節で設定を復元することで解決できる。finally節は、通常の制御フ
6898 ロー・エラー時・明示的な":throw"時・割り込み時に実行されることが保証されている。
6899 (Note try条件文の内側で発生したエラーと割り込みは例外に変換される。これらが捕
6900 捉されなかったときには、finally節の実行の後にスクリプトの実行が停止する。)
6904 : let s:saved_ts = &ts
6907 : " Do the hard work here.
6910 : let &ts = s:saved_ts
6914 関数やスクリプトの一部でグローバルな設定を変更し、その関数・スクリプトの失敗時・
6915 通常終了時に設定を復元する必要があるときは、必ず局所的にこの手法を使うべきであ
6919 ":continue", ":break", ":return", ":finish"などによってtryブロックやcatch節を
6939 : echo "still in while"
6943 上の例を実行すると"first", "cleanup", "second", "cleanup", "end"と表示される:
6951 : echo "Foo still active"
6954 :echo Foo() "returned by Foo"
6956 上の例を実行すると"cleanup"と"4711 returned by Foo"が表示される。finally節に余
6957 計な":return"を書く必要はない。(そうすると戻り値が上書きされてしまう)
6959 *except-from-finally*
6960 finally節で":continue", ":break", ":return", ":finish", ":throw"を使うことは可
6961 能である。しかしそうするとtry条件文の後始末を破棄してしまうことになるので推奨
6962 されていない。しかし、当然、finally節の中で割り込みとエラー例外が発生すること
6964 finally節におけるエラーにより、割り込みが正しく動作しなくなる例: >
6968 : echo "Press CTRL-C for interrupt"
6976 :echo "Script still running"
6979 失敗する可能性のあるコマンドをfinally節に書く必要があるときは、それらのコマン
6980 ドにより発生するエラーを捕捉したり無視したりすることについて考えること。
6981 |catch-errors| と |ignore-errors| を参照。
6984 エラーを変更する *catch-errors*
6986 特定のエラーを捕捉するには、監視したいコードをtryブロックに入れ、そのエラーメ
6987 ッセージに対するcatch節を加えるだけでよい。try条件節が存在すると全てのエラーは
6988 例外に変換される。そのため、メッセージはまったく表示されず、|v:errmsg|は設定さ
6989 れない。":catch"コマンドに対する正しい正規表現を作るには、エラー例外のフォーマ
6990 ットがどのようなものか知っていなければならない。
6991 エラー例外は次のフォーマットを持つ: >
6993 Vim({cmdname}):{errmsg}
6997 {cmdname}は失敗したコマンド名である。2番目の形式はコマンド名が不明のとき用いら
6998 れる。{errmsg}は、そのエラーがtry条件文の外で発生したときに通常表示されるエラー
6999 メッセージである。エラーメッセージは必ず大文字の"E"で始まり、その後に2,3桁のエ
7006 通常次のエラーメッセージが表示される >
7007 E108: No such variable: "novar"
7008 これはtry条件文の中では例外に変換される >
7009 Vim(unlet):E108: No such variable: "novar"
7013 通常次のエラーメッセージが表示される >
7014 E492: Not an editor command: dwim
7015 これはtry条件文の中では例外に変換される >
7016 Vim:E492: Not an editor command: dwim
7018 ":unlet"の全てのエラーを次によって捕捉できる >
7019 :catch /^Vim(unlet):/
7020 また、全てのミススペルされたコマンドのエラーは次で捕捉できる >
7023 複数のコマンドによって同一のエラーメッセージが表示される場合もある: >
7027 は両方とも次のエラーメッセージを表示する。
7028 E128: Function name must start with a capital: nofunc
7029 これはtry条件節の中では例外に変換される。それぞれ >
7030 Vim(function):E128: Function name must start with a capital: nofunc
7032 Vim(delfunction):E128: Function name must start with a capital: nofunc
7033 となる。どのコマンドによって発生したかに関係なくこのエラーを捕捉するには、次の
7035 :catch /^Vim(\a\+):E128:/
7037 複数のエラーメッセージを表示するコマンドもある: >
7040 E121: Undefined variable: novar
7041 E15: Invalid expression: novar
7042 最初のエラーメッセージのみが例外の値として使われる。それが最も限定的なメッセー
7043 ジだからである(|except-several-errors|を参照)。これは次のようにして捕捉できる
7045 :catch /^Vim(\a\+):E121:/
7047 "nofunc"という名前に関係したエラー全てを捕捉するには >
7050 コマンド":write"と":read"による全てのVimエラーを捕捉するには >
7051 :catch /^Vim(\(write\|read\)):E\d\+:/
7053 全てのVimエラーを捕捉するには次の正規表現を使う >
7054 :catch /^Vim\((\a\+)\)\=:E\d\+:/
7057 NOTE: エラーメッセージの本文によって捕捉しようとしてはならない >
7058 :catch /No such variable/
7059 こうすると英語の環境では動作するが、コマンド |:language|により他の言語を使って
7060 いるユーザの環境では動作しなくなる。しかし、コメントとしてメッセージテキストを
7062 :catch /^Vim(\a\+):E108:/ " No such variable
7064 エラーを無視する *ignore-errors*
7066 特定のコマンドで発生したエラーを捕捉すれば、エラーを無視することができる: >
7073 しかしこの単純な形は使わないよう強く推奨されている。なぜなら、これはあなたが望
7074 むより多くの例外を捕捉してしまうからである。":write"コマンドを使うと自動コマン
7075 ドが実行され、書き込みとは関係ないエラーが発生する可能性がある。例えば: >
7077 :au BufWritePre * unlet novar
7079 このようなエラーの中には、スクリプトの作者が責任を追わないものもある: つまり、
7080 スクリプトのユーザがそのようなオートコマンドを定義している場合である。その
7081 場合、上の例のようにすると、ユーザからエラーを隠してしまうことになる。エラーを
7082 無視するには、次のようにした方がよい >
7086 :catch /^Vim(write):/
7089 これは書き込みエラーだけを捕捉する。つまり、あなたが意図的に無視したいエラーだ
7092 オートコマンドを発生させないような1つのコマンドに対しては、":silent!"を使えば
7093 エラーを例外に変換すること自体を抑制させることができる: >
7095 これはtry条件文が有効なときも機能する。
7098 割り込みを捕捉する *catch-interrupt*
7100 有効なtry条件文内では、割り込み(CTRL-C)は例外"Vim:Interrupt"に変換される。これ
7101 を他の例外と同様に捕捉することができる。するとそのスクリプトは停止しない。
7113 : let command = input("Type a command: ")
7117 : elseif command == "END"
7119 : elseif command == "TASK1"
7121 : elseif command == "TASK2"
7124 : echo "\nIllegal command:" command
7127 : catch /^Vim:Interrupt$/
7128 : echo "\nCommand interrupted"
7129 : " 例外捕捉。次のプロンプトから継続する。
7133 ここでCTRL-Cを押すとタスクに割り込むことができる。その後スクリプトは新しいコマ
7134 ンドを要求する。プロンプトでCTRL-Cを押すとスクリプトが終了する。
7136 スクリプト中の特定の行でCTRL-Cが押されたとき何が起こるかをテストするにはデバッ
7137 グモードを使い、その行の上で|>quit|や|>interrupt|コマンドを使う。
7149 は全てをエラー例外・割り込み例外・|:throw|コマンドにより明示的に投げられた例外
7150 の捕捉する。これは、スクリプトのトップレベルで、予期しないことを捕捉するために
7158 :catch /MyException/
7162 :catch /^Vim:Interrupt$/
7163 : echo "Script interrupted"
7165 : echo "Internal error (" . v:exception . ")"
7166 : echo " - occurred at " . v:throwpoint
7170 Note: 全てを捕捉すると、期待していた以上のものを捕捉してしまうかもしれない。そ
7171 れゆえ、":catch"コマンドの引数に正規表現を指定することにより、自分が本当に制御
7172 できる問題だけを捕捉することが強く推奨されている。
7173 全てを捕捉してしまうと、CTRL-Cを押してスクリプトを中断することがほぼ不可能になっ
7184 例外とオートコマンド *except-autocmd*
7186 オートコマンドの実行中に例外を使うこともできる。例: >
7189 :autocmd User x throw "Oops!"
7190 :autocmd User x catch
7191 :autocmd User x echo v:exception
7192 :autocmd User x endtry
7193 :autocmd User x throw "Arrgh!"
7194 :autocmd User x echo "Should not be displayed"
7202 上の例を実行すると"Oops!"と"Arrgh!"が表示される。
7204 *except-autocmd-Pre*
7205 いくつかのコマンドでは、それ自身が実行される前にオートコマンドが実行される。
7206 例外が発生し、それが一連のオートコマンドの中で捕捉されない場合、一連の自動コマ
7207 ンドと、その引き金となったコマンドは破棄され、例外がそのコマンドを呼んだ位置へ
7211 :autocmd BufWritePre * throw "FAIL"
7212 :autocmd BufWritePre * echo "Should not be displayed"
7217 : echo "Caught:" v:exception "from" v:throwpoint
7220 ここで":write"コマンドは現在編集しているファイルを書き込まない('modified'を確
7221 認すればわかる)。BufWritePreのオートコマンドで発生した例外により、":write"が破
7222 棄されたためである。そしてその例外は捕捉され、次を表示する: >
7224 Caught: FAIL from BufWrite Auto commands for "*"
7226 *except-autocmd-Post*
7227 いくつかのコマンドでは、それ自身が実行された後でオートコマンドが実行される。引
7228 き金となったコマンド自身が失敗して、それが有効なtry条件文の内側にあった場合、
7229 自動コマンドはスキップされ、エラー例外が発生する。その例外は、コマンドを呼んだ
7233 :autocmd BufWritePost * echo "File successfully written!"
7236 : write /i/m/p/o/s/s/i/b/l/e
7243 Vim(write):E212: Can't open file for writing (/i/m/p/o/s/s/i/b/l/e)
7245 引き金となったコマンドが失敗したときでさえもオートコマンドを実行したいという場
7246 合は、catch節の中でそのイベントを引き起こすことできる。
7249 :autocmd BufWritePre * set noreadonly
7250 :autocmd BufWritePost * set readonly
7253 : write /i/m/p/o/s/s/i/b/l/e
7255 : doautocmd BufWritePost /i/m/p/o/s/s/i/b/l/e
7258 ":silent!"を使うこともできる: >
7262 :autocmd BufWritePost * if v:errmsg != ""
7263 :autocmd BufWritePost * let x = "after fail"
7264 :autocmd BufWritePost * endif
7266 : silent! write /i/m/p/o/s/s/i/b/l/e
7271 上の例は"after fail"を表示する。
7273 引き金となったコマンドが失敗しなかった場合、オートコマンドから発生した例外は、
7274 元のコマンドを呼んだ位置から捕捉できる: >
7276 :autocmd BufWritePost * throw ":-("
7277 :autocmd BufWritePost * echo "Should not be displayed"
7285 *except-autocmd-Cmd*
7286 いくつかのコマンドでは、通常の処理を一連のオートコマンドで置き換えることができ
7287 る。そのコマンド列で発生した例外は元のコマンドの呼び出し位置で捕捉できる。
7288 例: ":write"コマンドでは、例外が発生したとき、呼び出し側は実際にファイルが
7289 書き込まれたのかどうかを知ることができない。これを教える必要があるときは、なん
7295 : autocmd BufWriteCmd * if &modified
7296 : autocmd BufWriteCmd * let cnt = cnt + 1
7297 : autocmd BufWriteCmd * if cnt % 3 == 2
7298 : autocmd BufWriteCmd * throw "BufWriteCmdError"
7299 : autocmd BufWriteCmd * endif
7300 : autocmd BufWriteCmd * write | set nomodified
7301 : autocmd BufWriteCmd * if cnt % 3 == 0
7302 : autocmd BufWriteCmd * throw "BufWriteCmdError"
7303 : autocmd BufWriteCmd * endif
7304 : autocmd BufWriteCmd * echo "File successfully written!"
7305 : autocmd BufWriteCmd * endif
7310 :catch /^BufWriteCmdError$/
7312 : echo "Error on writing (file contents not changed)"
7314 : echo "Error after writing"
7316 :catch /^Vim(write):/
7317 : echo "Error on writing"
7320 バッファに変更を行った後でこのスクリプトを数回sourceすると、1回目は次のように
7322 File successfully written!
7324 Error on writing (file contents not changed)
7329 *except-autocmd-ill*
7330 異なるイベントに対するオートコマンドにわたってtry条件文を展開することはできな
7333 :autocmd BufWritePre * try
7335 :autocmd BufWritePost * catch
7336 :autocmd BufWritePost * echo v:exception
7337 :autocmd BufWritePost * endtry
7342 例外の階層と付加情報つき例外 *except-hier-param*
7344 プログラミング言語の中には例外クラスを階層化したり、例外クラスのオブジェクトに
7345 付加的な情報を渡すことができるものがある。これと似たことをVimでもできる。
7346 階層構造を持った例外を投げるには、各部分をコロンで区切った完全なクラス名を投げ
7347 ればよい。例えば、数学ライブラリ内でオーバーフローが発生したときに
7348 "EXCEPT:MATHERR:OVERFLOW"を投げる。
7349 例外クラスに付加的な情報を与えたいときは、それを括弧の中に書く。例えば、
7350 "myfile"の書き込み中にエラーが発生したときに文字列"EXCEPT:IO:WRITEERR(myfile)"
7352 ":catch"コマンドにおいて適切な正規表現を使えば、階層の基底クラスや派生クラスを
7353 捕捉できる。括弧の中の付加情報は、":substitute"コマンドを使って|v:exception|か
7357 :function! CheckRange(a, func)
7359 : throw "EXCEPT:MATHERR:RANGE(" . a:func . ")"
7363 :function! Add(a, b)
7364 : call CheckRange(a:a, "Add")
7365 : call CheckRange(a:b, "Add")
7368 : throw "EXCEPT:MATHERR:OVERFLOW"
7373 :function! Div(a, b)
7374 : call CheckRange(a:a, "Div")
7375 : call CheckRange(a:b, "Div")
7377 : throw "EXCEPT:MATHERR:ZERODIV"
7382 :function! Write(file)
7384 : execute "write" fnameescape(a:file)
7385 : catch /^Vim(write):/
7386 : throw "EXCEPT:IO(" . getcwd() . ", " . a:file . "):WRITEERR"
7394 :catch /^EXCEPT:MATHERR:RANGE/
7395 : let function = substitute(v:exception, '.*(\(\a\+\)).*', '\1', "")
7396 : echo "Range error in" function
7398 :catch /^EXCEPT:MATHERR/ " catches OVERFLOW and ZERODIV
7402 : let dir = substitute(v:exception, '.*(\(.\+\),\s*.\+).*', '\1', "")
7403 : let file = substitute(v:exception, '.*(.\+,\s*\(.\+\)).*', '\1', "")
7405 : let file = dir . "/" . file
7407 : echo 'I/O error for "' . file . '"'
7410 : echo "Unspecified error"
7414 エラー時やCTRL-Cを押したときにVim自身によって投げられる例外は平坦な階層になっ
7415 ている: つまりこれらは全て"Vim"クラスに入っている。ユーザは接頭辞"Vim"をつけた
7416 例外を投げることはできない。これらはVim用に予約されている。
7417 Vimのエラー例外は失敗したコマンドの名前(わかっているならば)という付加情報がつ
7418 いている。|catch-errors|を参照。
7423 例外制御のコンセプトは、例外を引き起こしたコマンドは即座に異常終了し、制御が
7424 finally節またはcatch節に移るという前提に基づいている。
7426 Vimスクリプト言語では、エラーの後もスクリプトや関数が処理を続行する場合がある。
7427 "abort"フラグのない関数や、":silent!"をつけて実行されたコマンドでは、制御は次
7428 の行、そして関数の外へ移り、制御フローは最外側の":endwhile"や":endif"の次の行へ
7429 移る。一方、エラーは例外と同様に捕捉できるべきである(つまり、即座に異常終了す
7432 この問題は、try条件文が有効なときだけエラーを例外に変換し、(":silent!"で抑制さ
7433 れていない限り)即座に異常終了することで解決される。(エラー)例外は有効なtry条件
7434 文でのみ捕捉可能であるため、これはなんら制約とはならない。エラーを捕捉せずに即
7435 座に終了してほしいなら、単にcatch節を持たないtry条件文を使えばよい。(finally節
7436 を指定すれば、終了の前に後始末処理を行うことができる)
7438 有効なtry条件文がないとき、即座の異常終了でなく、通常の異常終了と継続が行われ
7439 る。これによってVim6.1以前用に書かれたスクリプトの互換性を保証している。
7441 しかし、有効なtry条件文の中から、例外処理コマンドを使っていない既存のスクリプ
7442 トをsourceする(またはその関数の1つを呼ぶ)と、エラー発生時に既存のスクリプトの
7443 制御フローが変わるかもしれない。エラー発生時に即座に異常終了し、新しい方のスク
7444 リプト内でエラーを捕捉できる。しかしsourceされたスクリプトが":silent!"コマンド
7445 でエラーメッセージを抑制していた場合(それが適切なスクリプトなら|v:errmsg|を見
7446 ることでエラーを確認している)、実行パスは変わらない。そのエラーは例外に変換さ
7447 れない(|:silent|を参照)。これが起こる残りのただ1つの原因は、エラーに関心を払っ
7448 ていなく、エラーメッセージを表示させるスクリプトである。おそらく新しいスクリプ
7449 トからそのようなコードを使いたいとは思わないだろう。
7452 例外処理コマンドにおける構文エラーは、それが属するtry条件文のどの":catch"コマ
7453 ンドでも決して捕捉されない。しかしfinally節は実行される。
7460 : echo "in catch with syntax error"
7462 : echo "inner catch-all"
7464 : echo "inner finally"
7467 : echo 'outer catch-all caught "' . v:exception . '"'
7469 : echo "outer finally"
7474 outer catch-all caught "Vim(catch):E54: Unmatched \("
7476 元の例外は破棄され、代わりにエラー例外が投げられる。
7478 訳注: throw 4711により例外が発生したが、その後の catch /\(/ に構文エラーがある
7479 訳注: ためエラー例外が発生し、最初の例外は破棄された。
7481 *except-single-line*
7482 コマンド":try", ":catch", ":finally", ":endtry"は1行の中に書くことができる。し
7483 かし構文エラーがあったとき"catch"の行を認識するのが難しくなるので、避けた方が
7486 :try | unlet! foo # | catch | endtry
7487 この例は":unlet!"の後に余計な文字があるためエラー例外を発生させる。そして
7488 ":catch"と":endtry"が認識されないため、この例外は破棄され、"E488: Trailing
7489 characters"のメッセージが表示される。
7491 *except-several-errors*
7492 1つのコマンドにより複数のエラーが発生した場合、普通は最初のエラーメッセージが
7493 最も限定的であるため、それがエラー例外に変換される。
7497 E121: Undefined variable: novar
7498 E15: Invalid expression: novar
7499 try条件文の中のエラー例外の値は次になる: >
7500 Vim(echo):E121: Undefined variable: novar
7501 < *except-syntax-error*
7502 しかし、同じコマンドにおいて通常のエラーの後に構文エラーが検出されたときは、構
7507 E108: No such variable: "novar"
7508 E488: Trailing characters
7509 try条件文の中のエラー例外の値は次になる: >
7510 Vim(unlet):E488: Trailing characters
7511 この理由は、構文エラーによってユーザが予期していない実行パスになってしまうかも
7514 try | unlet novar # | catch | echo v:exception | endtry
7516 echo "outer catch:" v:exception
7518 これは"outer catch: Vim(unlet):E488: Trailing characters"を表示し、次にエラー
7519 メッセージ "E600: Missing :endtry"が表示される。|except-single-line|を参照。
7521 ==============================================================================
7522 9. 例 *eval-examples*
7526 :" 関数 Nr2Bin() は数値の2進文字列表現を返す。
7531 : let r = '01'[n % 2] . r
7537 :" 関数 String2Bin() は文字列中の各文字を2進文字列に変換して、ハイフン(-)で
7539 :func String2Bin(str)
7541 : for ix in range(strlen(a:str))
7542 : let out = out . '-' . Nr2Bin(char2nr(a:str[ix]))
7550 :echo String2Bin("32")
7555 行をソート(並べ替え)する (by Robert Webb) ~
7557 以下は、指定した比較関数を使って行をソートする例である。 >
7560 : let lines = getline(1, '$')
7561 : call sort(lines, function("Strcmp"))
7562 : call setline(1, lines)
7565 ワンライナーにすると次のようになる: >
7566 :call setline(1, sort(getline(1, '$'), function("Strcmp")))
7570 Vimにはsscanf()に相当する関数が無い。行の一部を取り出す必要がある場合には、
7571 matchstr()やsubstitute()を使えば実現できる。以下の例は、"foobar.txt, 123, 45"
7572 というような行から、ファイル名と行番号とカラム番号を取り出す方法を示している。
7575 :let mx='\(\f\+\),\s*\(\d\+\),\s*\(\d\+\)'
7576 :" 正規表現全体にマッチする部分を取り出す
7577 :let l = matchstr(line, mx)
7579 :let file = substitute(l, mx, '\1', '')
7580 :let lnum = substitute(l, mx, '\2', '')
7581 :let col = substitute(l, mx, '\3', '')
7583 入力は変数"line"、結果は"file"と"lnum"と"col"に格納される(このアイデアは
7587 辞書からscriptnamesを取り出す ~
7588 *scriptnames-dictionary*
7589 コマンド|:scriptnames|により今までにsourceされた全てのスクリプトファイルのリス
7590 トを取得することができる。これと等価な関数や変数は存在しない(めったに必要にな
7591 らないからである)。そのような場合には次のコードが利用できる: >
7592 " ":scriptnames" の出力を変数scriptnames_outputに入れる。
7593 let scriptnames_output = ''
7594 redir => scriptnames_output
7598 " 出力を行のリストに分割し、各行をパースする。辞書"scripts"に要素を追加
7601 for line in split(scriptnames_output, "\n")
7605 let nr = matchstr(line, '\d\+')
7606 " ファイル名を取得。スクリプト番号" 123: "を削除。
7607 let name = substitute(line, '.\+:\s*', '', '')
7609 let scripts[nr] = name
7612 unlet scriptnames_output
7614 ==============================================================================
7615 10. +eval機能が無効 *no-eval-feature*
7617 コンパイル時に|+eval|機能が無効とされている場合、総ての式評価(eval)コマンドは
7618 提供されない。その場合、Vimスクリプトが総ての種類のエラーを引き起こすことを避
7619 ける為、":if"と":endif"は解釈される。":if"とそれに対応する":endif"に挟まれた内
7620 容は無視される。":if"の後に続く引数も無視される。この":if"コマンドはネスティン
7621 グが可能である。しかし必ず行の先頭に書かれている必要がある。":else"コマンドは
7624 |+eval|機能が存在しなかった場合、どのようにコマンドが実行を免れるかの例: >
7627 : echo "Expression evaluation is compiled in"
7629 : echo "You will _never_ see this message"
7632 ==============================================================================
7633 11. サンドボックス *eval-sandbox* *sandbox* *E48*
7635 オプション 'foldexpr', 'includeexpr', 'indentexpr', 'statusline', 'foldtext'
7636 はサンドボックスの中で評価される。これによって、悪質な副作用を持つ式からの保護
7637 がなされている。これによって、これらのオプションがモードラインから設定された場合
7638 にある種の安全性がもたらされている。tagsファイルからのコマンドが実行されたとき
7639 とコマンドラインでのCTRL-R =に対してもサンドボックスが使われる。
7640 コマンド|:sandbox|に対してもサンドボックスが使われる。
7642 サンドボックス内では以下の事が禁止される:
7644 - マッピング、オートコマンド、関数、ユーザ定義コマンドの定義・変更
7645 - ある種のオプションの設定 (|option-summary|を参照)
7646 - ある種のVim定義済変数(v:)の設定 (|v:var|を参照) *E794*
7649 - 他のバッファへの移動・ファイルを開く
7650 - Python, Perl等のコマンドの実行
7651 これは100%安全と保証するものではない。しかし、ある種の攻撃を防ぐ事はできるはずで
7655 :san[dbox] {cmd} サンドボックス内で{cmd}を実行する。モードラインから設
7656 定された可能性のあるオプションを評価するために使える。
7660 いくつかのオプションは式を含んでいる。その式を評価するときはセキュリティ上の危
7661 険性を回避するためにサンドボックス内で行わねばならない。しかしサンドボックスに
7662 は制限があるので、これはそのオプションが安全でない場所で設定されたときのみ行わ
7663 れる。ここで「安全でない」とは次の場合をいう:
7664 - カレントディレクトリの .vimrc や .exrc を source するとき
7668 Note サンドボックス内でオプションの値を退避し、それから復元した場合、そのオプ
7669 ションはやはりサンドボックス内で設定されたものとマークされる。
7671 ==============================================================================
7672 12. テキストロック *textlock*
7674 いくつか状況においては、バッファを変更する・他のウィンドウへジャンプするなど、
7675 Vimの現在の処理を混乱させたり破壊してしまうような動作は禁止される。これはVimが
7676 実際に他の何かをしているときに起こることに対して当てはまる。例えば、
7677 'balloonexpr'の評価は、マウスカーソルがある位置に留まっているどんなときにでも
7680 テキストロックが有効になっているときは、以下の事が禁止される:
7684 - ウィンドウを閉じる。Vimを終了する。
7688 vim:tw=78:ts=8:ft=help:norl: