Google
WWW を検索 vimdoc を検索

Vim documentation: eval

main help file
*eval.txt*      For Vim バージョン 7.2.  Last change: 2009 Nov 17


                VIMリファレンスマニュアル    by Bram Moolenaar


Vimスクリプト                           *expression* *expr* *E15* *eval*

Vimスクリプトの利用についてはユーザマニュアルの41章|usr_41.txt|でも解説されて
いる。

注意:Vimスクリプトはコンパイル時に無効化できる。もしそうなっているとこのドキュ
メントに書かれている事は有効ではない。|+eval||no-eval-feature|を参照。

1.  変数                |variables|
    1.1 変数の型
    1.2 関数への参照                    |Funcref|
    1.3 リスト                          |Lists|
    1.4 辞書                            |Dictionaries|
    1.5 変数について補足                |more-variables|
2.  式の文法            |expression-syntax|
3.  内部変数            |internal-variables|
4.  組み込み関数        |functions|
5.  関数定義            |user-functions|
6.  波括弧{}変数        |curly-braces-names|
7.  コマンド            |expression-commands|
8.  例外処理            |exception-handling|
9.  例                  |eval-examples|
10. +eval機能が無効     |no-eval-feature|
11. サンドボックス      |eval-sandbox|
12. テキストロック      |textlock|

{Vi にはこれらのコマンドは存在しない}

==============================================================================
1. 変数                                                 *variables*

1.1 変数の型
                                                        *E712*
変数には6種類の型がある:

数値            32ビット符合有整数  |expr-number| *Number*
                例: -123 0x10 0177

浮動小数点数    浮動小数点数  |floating-point-format| *Float*
                {|+float| 機能つきでコンパイルされたときのみ}
                例: 123.456  1.15e-6  -1.1e3

文字列          終端がNUL文字である8ビットの符号無し文字(バイト)
                |expr-string| 例: "ab\txx\"--"  'x-z''a,c'

Funcref         関数への参照 |Funcref|.
                例: function("strlen")

リスト          要素の順序つきの列 |List|.
                例: [1, 2, ['a', 'b']]

辞書            順序を持たない連想配列: 各要素はキーと値を持つ。|Dictionary|
                例: {'blue': "#0000ff", 'red': "#ff0000"}

数値と文字列は文脈に応じて相互に変換される。

数値から文字列への変換は数字のASCII表現によって行なわれる。例:
        数値 123        -->     文字列 "123"
        数値 0          -->     文字列 "0"
        数値 -1         -->     文字列 "-1"

文字列から数値への変換は最初の数字を用いて数値に変換する。16進表記"0xf9"や8進
表記"017"も認識される。文字列が数字で始まらない場合結果は0となる。例:
        文字列 "456"    -->     数値 456
        文字列 "6bar"   -->     数値 6
        文字列 "foo"    -->     数値 0
        文字列 "0xf1"   -->     数値 241
        文字列 "0100"   -->     数値 64
        文字列 "-8"     -->     数値 -8
        文字列 "+8"     -->     数値 0

文字列を強制的に数値に変換するには0を足す:
        :echo "0100" + 0
        64

先頭の0によって8進数とみなされるのを防いだり、異なる基数を使うには|str2nr()|
使う。

ブール(真理値)演算には数値が使われる。0は偽を意味し、非0は真を表す。

Note 次のコマンドをみると
        :if "foo"
"foo"は0に変換され、それは偽を意味する。文字列が空ではないか調べるためには
strlen()を使用して次のようにする。
        :if strlen("foo")
                                *E745* *E728* *E703* *E729* *E730* *E731*
リスト、辞書、Funcrefは自動的に変換されない。

                                                        *E805* *E806* *E808*
数値と浮動小数点数をまぜると浮動小数点数になる。それ以外には浮動小数点数への自
動的な変換は存在しない。文字列から浮動小数点数へは str2float () を使い、浮動小
数点数から文字列へは printf()を、浮動小数点数から数値へは float2nr() を使う。

                                                *E706* *sticky-type-checking*
変数の型を変えようとするとエラーになる。このエラーを避けるには、まず|:unlet|
る必要がある。しかし文字列と数値は同値であると見なされる。同じく、浮動小数点数
と数値も同値であるとみなされる。例:
        :let l = "string"
        :let l = 44             " 型が文字列から数値に変わる
        :let l = [1, 2, 3]      " エラー! l はまだ数値である
        :let l = 4.4            " 型が数値から浮動小数点数に変わる
        :let l = "string"       " エラー!


1.2 関数への参照
                                        *Funcref* *E695* *E718*
関数|function()|は関数への参照を返す。関数への参照は、式の中で関数名が要求され
る場所で使うと参照先の関数を呼び出す。例:

        :let Fn = function("MyFunc")
        :echo Fn()
                                                        *E704* *E705* *E707*
関数参照の変数名は、大文字、"s:"、"w:"、"t:"、"b:"のいずれかで始めなければなら
ない。関数参照と参照先の関数の名前を同じにすることはできない。

関数を定義して、それへの参照を直接辞書に入れるための特別な形式がある。例:
        :function dict.init() dict
        :   let self.val = 0
        :endfunction

この辞書のキーは小文字で始めなければならない。実際の関数名はここでは使われない。
|numbered-function|も参照。

|:call|コマンドでも関数参照を使うことができる:
        :call Fn()
        :call dict.init()

参照先の関数名は|string()|で得られる。
        :let func = string(Fn)

関数参照を呼び出すには|call()|を使い、引数にはリスト型の変数を使う:
        :let r = call(Fn, mylist)


1.3 リスト
                                                        *List* *Lists* *E686*
リストとは順序を保つ要素の列である。要素はどんな型でもよい。要素へはインデック
ス番号を使ってアクセスする。列の任意の位置に要素を追加したり削除することができ
る。


リストの作成
                                                        *E696* *E697*
リストを作るには、[]の中にコンマで区切って要素を書く。
例:
        :let mylist = [1, two, 3, "four"]
        :let emptylist = []

要素はどんな式でもよい。要素としてリストを指定すると、リストのリストができる:

        :let nestlist = [[11, 12], [21, 22], [31, 32]]

最後の要素の後に余分なコンマがあると無視される。


リストのインデックス
                                                        *list-index* *E684*
リストの要素にアクセスするには、リスト名の後に[]を書き、その中にインデックスを
書く。インデックスは0基点(つまり最初の要素のインデックスは0)である。
        :let item = mylist[0]           " 最初の要素(1)を取得
        :let item = mylist[2]           " 3番目の要素(3)を取得

取得した要素がリストならば、さらに続けてインデックスを書くことができる:
        :let item = nestlist[0][1]      " 最初のリストの2番目の要素(12)を取得

負のインデックスを指定すると、リストの末尾から数えられる。インデックス-1は最後
の要素を示し、-2は最後から2番目を指す
        :let last = mylist[-1]          " 最後の要素("four")を取得

無効なインデックスによるエラーを回避するには関数|get()|を使う。するとインデッ
クスが無効な場合は、0かまたは自分で指定した既定値が返る:
        :echo get(mylist, idx)
        :echo get(mylist, idx, "NONE")


リストの連結

2つのリストを連結するには演算子"+"を使う:
        :let longlist = mylist + [5, 6]
        :let mylist += [7, 8]

1個の要素を先頭または末尾に付け加えるには、[]で囲んでリストにして連結する。リ
ストの特定の要素を変更するには後述の|list-modification|を参照。


部分リスト

リストの一部分を取り出すには、[]の中に始点と終点のインデックスを書き、コロンで
区切る:
        :let shortlist = mylist[2:-1]   " リスト[3, "four"]を得る

始点のインデックスを省略すると0となる。終点のインデックスを省略すると-1となる
        :let endlist = mylist[2:]       " 2番目から最後まで: [3, "four"]
        :let shortlist = mylist[2:2]    " 1個の要素からなるリスト: [3]
        :let otherlist = mylist[:]      " リストのコピーを作る

終点のインデックスが始点のインデックスよりも前になってしまった場合は空リストと
なる。エラーメッセージは表示されない。

終点のインデックスがリストの長さより大きい場合は、長さ-1を指定したときと同じに
なる:
        :let mylist = [0, 1, 2, 3]
        :echo mylist[2:8]               " 結果: [2, 3]

NOTE: mylist[s:e]と書くと変数"s:e"をインデックスとして使ったと解釈される。":"
の前に1文字の変数を使うときは十分注意すること。必要ならこのようにスペースを入
れるとよい: mylist[s : e].


リストの同一性
                                                        *list-identity*
変数"aa"がリストであり、それを別の変数"bb"に代入したとすると、両方とも同じ変数
を参照するようになる。よってリスト"aa"を変更すると"bb"も変更される:
        :let aa = [1, 2, 3]
        :let bb = aa
        :call add(aa, 4)
        :echo bb
        [1, 2, 3, 4]

リストのコピーを作るには関数|copy()|を使う。前述の通り[:]を使ってもできる。こ
れは浅いコピーである。つまりリストの要素であるリストに変更を加えると、コピーさ
れたリスト内の同じ要素も変更される:
        :let aa = [[1, 'a'], 2, 3]
        :let bb = copy(aa)
        :call add(aa, 4)
        :let aa[0][1] = 'aaa'
        :echo aa
        [[1, aaa], 2, 3, 4]
        :echo bb
        [[1, aaa], 2, 3]

完全に独立したコピーを作るには|deepcopy()|を使う。これは再帰的にリストの要素の
コピーを作る。ただし深さは100レベルまでである。

2つの変数が同じリストを指しているかは演算子"is"で判定できる。"isnot"はその逆で
ある。一方、"=="は2つのリストが同じ値を持っているかを判定する。
        :let alist = [1, 2, 3]
        :let blist = [1, 2, 3]
        :echo alist is blist
        0
        :echo alist == blist
        1

Note リストの比較について注意: 2つのリストは、同じ長さを持ち、全要素が"=="の意
味で等しいとき、等しいとみなされる。ただ、1つ例外がある: 数値と文字列を比較す
るとそれらは異なるとみなされる。変数に対して"=="で比較したときに行われるような
自動的な型変換は行われない。例:
        echo 4 == "4"
        1
        echo [4] == ["4"]
        0

つまり、リストの比較は数値や文字列の比較よりも厳格である。単純な値もリストに入
れることによりこの方法で比較することができる:

        :let a = 5
        :let b = "5"
        :echo a == b
        1
        :echo [a] == [b]
        0


リストのアンパック

リストの要素を個々の変数としてアンパックするには、[]の中に変数を書く:
        :let [var1, var2] = mylist

変数の個数とリストの要素数が一致しないときはエラーになる。リストにある余分な要
素をまとめて受け取るには、";"と受け取る変数名を書いておく:
        :let [var1, var2; rest] = mylist

上の例は次とほぼ同じである:
        :let var1 = mylist[0]
        :let var2 = mylist[1]
        :let rest = mylist[2:]

要素が 2 つしかないときでもエラーにはならない。"rest"は空リストになる。


リストの変更
                                                        *list-modification*
リストの中の特定の要素を変更するには次のように|:let|を使う:
        :let list[4] = "four"
        :let listlist[0][3] = item

始点と終点を指定してリストの一部分を変更することができる。代入する値は、少なく
とも削除する範囲の要素数と同じ数だけ必要である:
        :let list[3:5] = [3, 4, 5]

リストに要素を追加したり削除するには関数を使う。いくつか例を示す:
        :call insert(list, 'a')         " 先頭に要素'a'を挿入する
        :call insert(list, 'a', 3)      " 要素'a'をlist[3]の前に挿入する
        :call add(list, "new")          " 文字列の要素を最後に追加する
        :call add(list, [1, 2])         " 1個の要素としてリストをを追加する
        :call extend(list, [1, 2])      " 2個の要素からなるリストを連結する
        :let i = remove(list, 3)        " 要素3を削除する
        :unlet list[3]                  " 同上
        :let l = remove(list, 3, -1)    " 要素3から最後までを削除する
        :unlet list[3 : ]               " 同上
        :call filter(list, 'v:val !~ "x"')  " 要素'x'を削除

要素の順番を変更する:
        :call sort(list)                " リストをアルファベット順にソート
        :call reverse(list)             " 要素の順序を反転させる


for ループ

|:for|ループは、1つの変数に対してリストの各要素を順番に代入し、コマンドを実行
していく。例:
        :for item in mylist
        :   call Doit(item)
        :endfor

上の例は次と同じ:
        :let index = 0
        :while index < len(mylist)
        :   let item = mylist[index]
        :   :call Doit(item)
        :   let index = index + 1
        :endwhile

Note リストの全要素が同じ型でなければならない。そうでないとエラー|E706|にな
る。ループの最後でループ変数を|:unlet|すれば、異なる型でも扱える。

やりたいことがリストの各要素を変更するだけなら、forループを使うより関数|map()|
を使った方がよりシンプルになる。

|:let|コマンドと同じように、|:for|は変数のリストをループ変数にすることができる。
この場合、引数はリストのリストでなければならない。
        :for [lnum, col] in [[1, 3], [2, 8], [3, 0]]
        :   call Doit(lnum, col)
        :endfor

これはリストの各要素に対して|:let|コマンドを実行するかのように実行される。また
この場合も引数の型は全て同じでないとエラーになる。

引数の残りを1個のリスト変数に代入することもできる:
        :for [i, j; rest] in listlist
        :   call Doit(i, j)
        :   if !empty(rest)
        :      echo "remainder: " . string(rest)
        :   endif
        :endfor


リスト操作関数
                                                *E714*
以下はリスト操作に使える関数である:
        :let r = call(funcname, list)   " 引数リストをつけて関数を呼び出す
        :if empty(list)                 " リストが空かどうか判定する
        :let l = len(list)              " リストの要素数
        :let big = max(list)            " リスト中の最大値
        :let small = min(list)          " リスト中の最小値
        :let xs = count(list, 'x')      " 'x'の出現回数を数える
        :let i = index(list, 'x')       " 最初に'x'が現れる位置のインデックス
        :let lines = getline(1, 10)     " バッファから10行を取得
        :call append('$', lines)        " バッファに行を追加する
        :let list = split("a b c")      " 文字列を分割してリストにする
        :let string = join(list, ', ')  " リストの要素を連結して文字列にする
        :let s = string(list)           " リストの文字列表現
        :call map(list, '">> " . v:val')  " 各要素の前に">> "をつける

機能を組み合わせると、処理を単純に記述できることを覚えておくとよい。例えば、リ
スト中の全ての数値の和を求める例:
        :exe 'let sum = ' . join(nrlist, '+')


1.4 辞書
                                                *Dictionaries* *Dictionary*
辞書とは連想配列である。各要素はキーと値を持つ。要素はキーによって特定できる。
要素は特に順序を持たずに保持される。


辞書の作成
                                                *E720* *E721* *E722* *E723*
辞書を作るには、{}の中にコンマで区切って要素を書く。各要素のキーと値はコロンで
区切る。それぞれのキーは1度しか現れてはならない。例:
        :let mydict = {1: 'one', 2: 'two', 3: 'three'}
        :let emptydict = {}
                                                        *E713* *E716* *E717*
キーは必ず文字列である。数値を使うこともできるが、自動的に文字列に変換される。
よって文字列'4'のキーと数値4のキーは同一の要素を参照する。
entry.  Note 文字列'04'と数値04は異なることに注意。なぜなら数値04は文字列'4'に
変換されるからである。

値はどんな式でもよい。辞書を値にすると、ネストした辞書ができる:
        :let nestdict = {1: {11: 'a', 12: 'b'}, 2: {21: 'c'}}

最後の要素の後に余分なコンマがあると無視される。


要素にアクセスする

通常、要素にアクセスするには[]の中にキーを書く:
        :let val = mydict["one"]
        :let mydict["four"] = 4

また、この書き方で既存の辞書に要素を追加できる。この点はリストと異なる。

キー名がアルファベット、数字、アンダースコアだけからなる場合は、以下の形式が使
える|expr-entry|:
        :let val = mydict.one
        :let mydict.four = 4

要素はリストや辞書を含むどんな型でもよいため、インデックス参照とキー参照を続け
て書くことができる:
        :echo dict.key[idx].key


辞書からリストへの変換

辞書の全要素に対してループを行いたい場合がある。そのためには辞書をリストに変換
し、そのリストに対して|:for|ループを行う。

多くの場合はキーに対してループを行う。これには関数|keys()|を使う:
        :for key in keys(mydict)
        :   echo key . ': ' . mydict[key]
        :endfor

このキーのリストはソートされていない。ソートさせるには関数|sort()|を使う:
        :for key in sort(keys(mydict))

値に対してループを行うには関数|values()|を使う:
        :for v in values(mydict)
        :   echo "value: " . v
        :endfor

キーと値両方を得るには関数|items()|を使う。この関数は、キーと値の2個の要素から
なるリストのリストを返す:
        :for [key, value] in items(mydict)
        :   echo key . ': ' . value
        :endfor


辞書の同一性
                                                        *dict-identity*
辞書のコピーを作るにはリストと同様に|copy()||deepcopy()|を使う必要がある。そ
うでなく代入を行うと同一の辞書を参照するようになる:
        :let onedict = {'a': 1, 'b': 2}
        :let adict = onedict
        :let adict['a'] = 11
        :echo onedict['a']
        11

2つの辞書は、全てのキー・値のペアが等しいとき等しいとみなされる。より詳しくは
|list-identity|を参照。


辞書の変更
                                                        *dict-modification*
辞書の要素を変更したり、新しい要素を追加するには|:let|を使う:
        :let dict[4] = "four"
        :let dict['one'] = item

辞書から要素を取り除くには|remove()||:unlet|を使う。以下のように辞書からキー
"aaa"を取り除くには3つの方法がある:
        :let i = remove(dict, 'aaa')
        :unlet dict.aaa
        :unlet dict['aaa']

2つの辞書を併合させるには|extend()|を使う:
        :call extend(adict, bdict)
上のコマンドはbdictの全ての要素をadictに追加する。キーが重複した要素はbdictの
要素により上書きされる。この動作は3番目の引数により変更できる。
Note 辞書の要素間に順序は定まっていない。そのため":echo adict"としたとき、もと
もとadictにあった要素が先に、bdictから追加された要素が後に表示されると考えては
ならない。

辞書から条件を指定して要素を取り除くには|filter()|が使える:
        :call filter(dict, 'v:val =~ "x"')
このコマンドは"dict"から'x'にマッチしない要素を全て取り除く。


関数を辞書に入れる
                                        *Dictionary-function* *self* *E725*
関数が"dict"属性つきで定義されると、特殊な方法で呼び出すことができる。例:
        :function Mylen() dict
        :   return len(self.data)
        :endfunction
        :let mydict = {'data': [0, 1, 2, 3], 'len': function("Mylen")}
        :echo mydict.len()

これはオブジェクト指向プログラミングのメソッドに似ている。この辞書の要素は
|Funcref|である。暗黙に定義されるローカル変数"self"は、この関数を呼び出した辞
書を参照している。

"dict"属性をつけないでFuncrefを辞書に入れることもできる。しかしその場合、変数
"self"は定義されない。

                                *numbered-function* *anonymous-function*
関数に名前をつける必要をなくすために、関数を定義して直接辞書に代入することがで
きる:
        :let mydict = {'data': [0, 1, 2, 3]}
        :function mydict.len() dict
        :   return len(self.data)
        :endfunction
        :echo mydict.len()

こうすると関数に番号がふられ、dict.lenがこの関数を参照する|Funcref|となる。こ
の関数は|Funcref|を通してのみ呼び出せる。参照している|Funcref|がなくなると、こ
の関数は自動的に削除される。

番号つき関数に必ずしも"dict"属性は必要ではない。
訳注: It is not necessary to use the "dict" attribute for a numbered function.


辞書操作関数
                                                        *E715*
以下は辞書操作に使える関数である:
        :if has_key(dict, 'foo')        " 辞書がキー"foo"の要素を持つなら真
        :if empty(dict)                 " 辞書が空なら真
        :let l = len(dict)              " 辞書の要素数
        :let big = max(dict)            " 辞書中の最大値
        :let small = min(dict)          " 辞書中の最小値
        :let xs = count(dict, 'x')      " 'x'の出現回数を数える
        :let s = string(dict)           " 辞書の文字列表現
        :call map(dict, '">> " . v:val')  " 各要素の前に">> "をつける


1.5 変数について補足
                                                        *more-variables*

変数や式の結果の型を知りたいのならば、関数|type()|を使う。

オプション'viminfo'にフラグ'!'が含まれるならば、大文字で始まり小文字を含まない
名前のグローバル変数は、viminfoファイル|viminfo-file|に格納される。

オプション'sessionoptions'が"global"を含むなら、大文字で始まり少なくとも一文字
以上の小文字を含む名前のグローバル変数は、sessionファイル|session-file|に格納
される。

変数名                  何処に保存されるか
my_var_6                されない
My_Var_6                sessionファイル
MY_VAR_6                viminfoファイル


波括弧を使って変数名を構成できる。詳細は|curly-braces-names|を参照。

==============================================================================
2. 式の文法                                             *expression-syntax*

式文法一覧、優先順位の低いものから高い順に:

|expr1| expr2 ? expr1 : expr1   if-then-else 条件式

|expr2| expr3 || expr3 ..       論理和

|expr3| expr4 && expr4 ..       論理積

|expr4| expr5 == expr5          等しい
        expr5 != expr5          等しくない
        expr5 >  expr5          より大きい
        expr5 >= expr5          大きいか等しい
        expr5 <  expr5          より小さい
        expr5 <= expr5          小さいか等しい
        expr5 =~ expr5          正規表現にマッチする
        expr5 !~ expr5          正規表現にマッチしない

        expr5 ==? expr5         文字列として等しい(大文字/小文字区別無し)
        expr5 ==# expr5         文字列として等しい(大文字/小文字区別有り)
        etc.                    上記の各式は大小文字の区別を、?を付加すると行
                                わず、#を付加すると行う

        expr5 is expr5          同一の |List| のインスタンス
        expr5 isnot expr5       異なる |List| のインスタンス

|expr5| expr6 +  expr6 ..       足し算またはリストの連結
        expr6 -  expr6 ..       引き算
        expr6 .  expr6 ..       文字列の連結

|expr6| expr7 *  expr7 ..       掛け算
        expr7 /  expr7 ..       割り算
        expr7 %  expr7 ..       剰余(割った余り)

|expr7| ! expr7                 論理否定
        - expr7                 単項のマイナス(訳注:-1等)
        + expr7                 単項のプラス

|expr8| expr8[expr1]            文字列のバイト、またはリストの要素
        expr8[expr1 : expr1]    文字列の部分文字列、またはリストの部分リスト
        expr8.name              辞書 |Dictionary| の要素
        expr8(expr1, ...)       |Funcref| 変数による関数呼び出し

|expr9| number                  数定数
        "string"                文字列定数。バックスラッシュは特別な意味を持つ
        'string'                リテラル文字列定数。'を含めるには2重にする
        [expr1, ...]            リスト |List|
        {expr1: expr1, ...}     辞書 |Dictionary|
        &option                 オプション変数
        (expr1)                 式の入れ子
        variable                内部変数
        va{ria}ble              波括弧付きの内部変数
        $VAR                    環境変数
        @r                      レジスタ'r'の値
        function(expr1, ...)    関数呼出し
        func{ti}on(expr1, ...)  波括弧付きの内部変数

".." はその演算が、その後に他の演算を続ける事が出来ることを示している。
例:
        &nu || &list && &shell == "csh"

一つのレベルにある全ての式は左から右に解釈される。


expr1                                                   *expr1* *E109*
-----

expr2 ? expr1 : expr1

'?'より前の式は数値として評価される。その結果が非0であった場合、'?'と':'に挟ま
れた式の値がこの式全体の値となり、逆に0であった場合は':'以降の式の値が全体の値
となる。
例:
        :echo lnum == 1 ? "先頭" : lnum

始めの式が"expr2"であるから、そこに別の?:を含むことはできない。残り二つの式に
ついては以下のように再帰的な?:の利用が許される。
例:
        :echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum

読み易くするために、行継続|list-continuation|を利用することが推奨される:
        :echo lnum == 1
        :\      ? "top"
        :\      : lnum == 1000
        :\              ? "last"
        :\              : lnum

':'の前には必ずスペースを入れること。そうでないと"a:1"のような変数の使用と間違
えてしまう可能性がある。


expr2 and expr3                                         *expr2* *expr3*
---------------

                                                *expr-barbar* *expr-&&*
演算子"||"と"&&"は左右に一つずつ引数を取る。引数は数値に変換される。結果は:

          入力                             出力            
n1              n2              n1 || n2        n1 && n2  
零              零              零              零
零              非零            非零            零
非零            零              非零            零
非零            非零            非零            非零

演算子は続けて書く事ができる。例:

        &nu || &list && &shell == "csh"

Note "&&"は"||"よりも高い優先順位を持っている。これは次の事を意味する:

        &nu || (&list && &shell == "csh")

結果が確定した時点で残りの式は省略され、解釈されない。これはC言語で行なわれる
ことに似ている。例:

        let a = 1
        echo a || b

これはaが非零で戻り値は絶対に非零であるから、変数bが宣言されていなくても有効で
ある。次のも同様に:

        echo exists("b") && b == "yes"

これもbが宣言されているいないに関わらず有効である。後半の項はbが定義されている
時にだけ評価される。


expr4                                                   *expr4*
-----

expr5 {cmp} expr5

2つの式expr5を比較し、結果が偽なら0を、真なら1を返す。

                                *expr-==*  *expr-!=*  *expr->*   *expr->=*
                                *expr-<*   *expr-<=*  *expr-=~*  *expr-!~*
                                *expr-==#* *expr-!=#* *expr->#*  *expr->=#*
                                *expr-<#*  *expr-<=#* *expr-=~#* *expr-!~#*
                                *expr-==?* *expr-!=?* *expr->?*  *expr->=?*
                                *expr-<?*  *expr-<=?* *expr-=~?* *expr-!~?*
                                *expr-is*
                'ignorecase'次第   大小文字考慮    大小文字無視
等しい                  ==              ==#             ==?
等しくない              !=              !=#             !=?
より大きい              >               >#              >?
より大きいか等しい      >=              >=#             >=?
より小さい              <               <#              <?
より小さいか等しい      <=              <=#             <=?
正規表現マッチ          =~              =~#             =~?
正規表現非マッチ        !~              !~#             !~?
同一のインスタンス      is
異なるインスタンス      isnot

例:
"abc" ==# "Abc"   0と評価される
"abc" ==? "Abc"   1と評価される
"abc" == "Abc"    'ignorecase'が設定されていれば1と、でなければ0と評価

                                                        *E691* *E692*
リスト|List|はリストとだけ比較可能で、==系、!=系、is、isnotのみ利用できる。
これらはそれぞれのリストの値を再帰的に比較する。大文字小文字無視にすると要素を
比較するときに大文字小文字を無視する。

                                                        *E735* *E736*
辞書|Dictionary|は辞書とだけ比較可能で、==系、!=系、is、isnotのみ利用できる。
これらは辞書のキー/値を再帰的に比較する。大文字小文字無視にすると要素を
比較するときに大文字小文字を無視する。

                                                        *E693* *E694*
|Funcref||Funcref|とだけ比較可能で、"equal"と"not equal"のみ利用できる。大文
字小文字は常に区別される。

リスト|List|に対して"is"や"isnot"を使うと、それらの式が同じリストのインスタン
スを参照しているか判定される。リストのコピーと元のリストは異なると判定される。
リスト以外に対して"is"は"equal"と同じで、"isnot"は"not equal"と同じである。た
だし"is"、"isnot"は型が異なると値が等しくない点が"=="とは異なる。「4 == '4'」
は真で、「4 is '4'」は偽である。

文字列と数値を比較した場合、文字列が数値に変換され、数値として比較される。これ
は"0 == 'x'"が、'x'が数値としては0であることから、真となることを意味する。

文字列同士を比較した場合、strcmp()やstricmp()によって比較される。これは数値的
に(バイトの値で)比較されるのであって、必ずしも言語に基づく文字種の違いではな
い。

'#'を付けた演算子を使うか、省略形かつ'ignorecase'が設定されていない場合、比較
はstrcmp()で行なわれる。大文字・小文字は区別される。

'?'を付けた演算子を使うか、省略形かつ'ignorecase'が設定されている場合、比較は
stricmp()で行なわれる。大文字・小文字は区別されない。

'smartcase' は適用されない。

"=~"と"!~"演算子は右側の引数を正規表現のパターンとして、左側の引数に対してマッ
チを試みる。正規表現のパターンに関しては|pattern|を参照。このマッチは'magic'
設定され'cpoptions'が空であるように振舞い、実際の'magic''cpoptions'に何が設
定されているには依存しない。これがスクリプトをポータブルにしてくれる。正規表現
中のバックスラッシュが重複してしまうのを避けるには、シングルクォーテーションの
文字列を使用する。詳細は|literal-string|を参照。
文字列は単一行として扱われるので、複数行のパターン(\nを含むもの)はマッチしな
い。しかしながらリテラルなヌル文字(NL)を、普通の文字として代用することはでき
る。例:
        "foo\nbar" =~ "\n"      1として評価される
        "foo\nbar" =~ "\\n"     0として評価される


expr5 and expr6                                         *expr5* *expr6*
---------------
expr6 +  expr6 ..       足し算、またはリストの連結      *expr-+*
expr6 -  expr6 ..       引き算                          *expr--*
expr6 .  expr6 ..       文字列の連結                    *expr-.*

リストに対しては"+"のみ可能で、expr6は両方ともリストでなければならない。結果は
2つのリストを連結した新しいリスト。

expr7 *  expr7 ..       掛け算                          *expr-star*
expr7 /  expr7 ..       割り算                          *expr-/*
expr7 %  expr7 ..       剰余(割った余り)                *expr-%*

"."を除く全ての演算子は自動的に文字列を数値に変換する。

"+"と"."の違いに注意:
        "123" + "456" = 579
        "123" . "456" = "123456"

'.' は '+' と '-' と等しい優先順位を持つので、次の式は:
        1 . 90 + 90.0
次のように解釈される:
        (1 . 90) + 90.0
これはエラーにならない。というのは、"190" は自動的に数値 190 に変換さ
れ、それと浮動小数点数 90.0 との和になる。しかし次の式は:
        1 . 90 * 90.0
次のように解釈される:
        1 . (90 * 90.0)
'.' は '*' より優先順位が低いためである。これはエラーになる。というのは、浮動
小数点数と文字列を結合することになるからである。

数値をゼロで割った結果は、被除数によって次のようになる:
          0 / 0  = -0x80000000  (浮動小数点数の NaN のようなもの)
         >0 / 0  =  0x7fffffff  (正の無限大のようなもの)
         <0 / 0  = -0x7fffffff  (負の無限大のようなもの)
        (訳注: >0 は正の数、<0 は負の数の意味)
        (Vim 7.2 以前では常に 0x7fffffff だった)

'/'の右辺(除数)が0の場合、結果は0x7ffffffになる。
'%'の右辺(法)が0の場合、結果は0になる。

これらは全て|Funcref|には適用できない。

. と % は浮動小数点数には適用できない。 *E804*


expr7                                                   *expr7*
-----
! expr7                 論理否定                *expr-!*
- expr7                 単項マイナス            *expr-unary--*
+ expr7                 unary plus              *expr-unary-+*

'!'演算子では非零は0に、0は1になる。
'-'では数値の符号が反転される。
'+"では変化はない。

文字列はまず数値に変換される。

これら2つは繰り返したり混ぜたりできる。例:
        !-1         == 0
        !!8         == 1
        --9         == 9


expr8                                                   *expr8*
-----
expr8[expr1]            文字列またはリストの要素        *expr-[]* *E111*

expr8が数値か文字列ならば、この値は文字列 expr8 の第 expr1 番目のバイトからな
る 1 バイトの文字列となる。expr8は文字列、expr1は数として扱われる。ただし
expr8 がマルチバイト文字列である場合、この値は単なるバイトコードであり、1文字
とはならないかもしれないことに注意。マルチバイト文字列に対する代替方法は
|byteidx()| を参照。

インデックスが0の場合、先頭のキャラクタが得られることに注意。これはC言語のよう
に働く。注意:カラム番号は1から始まる。例えばカーソルの下の文字を得るためには、
次のようにする必要がある:
        :let c = getline(".")[col(".") - 1]

文字列の長さよりも大きなインデックスが指定された場合、結果は空文字列になる。負
数のインデックスを指定すると、結果は常に空文字列になる(後方互換性のため)。
最後のバイトを得るには[-1:]を使うこと。

expr8がリスト|List|ならばインデックスexpr1の要素が返る。取りうるインデックスの
値については|list-index|を参照。インデックスが範囲を超えている場合はエラーとな
る。例:
        :let item = mylist[-1]          " 最後の要素を取得

一般的には、インデックスが正でリストの長さ以上または、負でリストの長さ×-1より
小さいときエラーとなる。


expr8[expr1a : expr1b]  部分文字列または部分リスト      *expr-[:]*

expr8が数値か文字列ならば、expr1aバイトからexpr1bバイトまでの部分文字列となる
(両端を含む)。expr8は文字列として扱われ、expr1aとexpr1bは数値として扱われる。
Note マルチバイトのエンコーディングは認識しない。マルチバイト文字列のイン
デックスを計算する方法については |byteidx()| を参照。

expr1aが省略されたときは0となる。expr1bが省略されたときは文字列の長さ-1となる。

負数のインデックスを使うことによって文字列の末尾から取り出すことができる。-1は
最後の文字、-2は最後から2文字目…を表す。

インデックスがその文字の範囲外に出てしまったときは、その文字は省かれる。expr1b
がexpr1aより小さいときは空文字列となる。

例:
        :let c = name[-1:]              " 文字列の最後のバイト
        :let c = name[-2:-2]            " 文字列の最後から2バイト目
        :let s = line(".")[4:]          " 5バイト目から末尾まで
        :let s = s[:-3]                 " 最後の2文字を削除する

                                                        *sublist* *slice*
expr8がリストならば、インデックスexpr1aとexpr1bの間の要素からなる新しいリスト
となる。上で説明した文字列の場合と同様だが、インデックスが範囲を超えるとエラー
になる。例:
        :let l = mylist[:3]             " 最初の4個の要素
        :let l = mylist[4:4]            " 1個の要素からなるリスト
        :let l = mylist[:]              " リストの浅いコピー

|Funcref|に対してexpr8[expr1]やexpr8[expr1a : expr1b]を使うとエラーになる。


expr8.name              辞書|Dictionary|の要素          *expr-entry*

expr8が辞書|Dictionary|のとき、ドットをつけるとその後に書かれた名前が辞書のキ
ーと見なされる。例: expr8[name]。

名前は変数名と同じようにアルファベットと数字だけから構成されなければならない
が、数字で始まってもよい。波括弧は使えない。

ドットの前後に空白があってはならない。

例:
        :let dict = {"one": 1, 2: "two"}
        :echo dict.one
        :echo dict .2

Note ドットは文字列連結にも使われる。混乱を避けるために、文字列連結のドットの
周りには必ずスペースを入れること。


expr8(expr1, ...)       |Funcref| 関数呼び出し

expr8が|Funcref|型の変数のとき、その参照する関数を呼び出す。



                                                        *expr9*

------
number                  数定数                  *expr-number*

10進数、16進数(0xか0Xで始まる)、もしくは8進数(0で始まる)の数定数。

                                                *floating-point-format*
浮動小数点数は次の2つの形式で書ける:

        [-+]{N}.{M}
        [-+]{N}.{M}e[-+]{exp}

ここで {N} と {M} は数値である。{N} と{M} の両方とも省略してはなら
ず、数値のみを含めることができる。
[-+] は、省略可能なプラスまたはマイナス記号である。
{exp} は指数で、10 のベキ。
現在のロケールが何であれ、小数点にはドットのみを使える。コンマは使えない。
{|+float| 機能つきでコンパイルされたときのみ有効}

例:
        123.456
        +0.0001
        55.0
        -0.123
        1.234e03
        1.0E-6
        -3.1416e+88

次のものは無効である:
        3.              empty {M}
        1e40            missing .{M}

                                                        *float-pi* *float-e*
コピー&ペーストしておくのに便利な値:
A few useful values to copy&paste:
        :let pi = 3.14159265359
        :let e  = 2.71828182846

論理的根拠:
浮動小数点数が導入される前は、123.456 と書くと 123 と 456 の2つの数値と解釈
され、それらが文字列に変換されて結合されて "123456" という文字列になった。
これは無意味であり、Vim スクリプト内で意図的に使われているものが見つからな
かったので、浮動小数点数の普通の表記法を用いるため、この後方非互換性は許容され
た。

                                                *floating-point-precision*
浮動小数点数の精度と範囲は、Vim とリンクしたライブラリの "double" の意味によ
る。実行時にこれを変更することはできない。

浮動小数点数 |Float| は printf("%g, f) とするのと同様に、小数点以下6桁まで表示
される。表示する桁数は |printf()| を使えば変えられる。例:
        :echo printf('%.15e', atan(1))
        7.853981633974483e-01



文字列                                                  *expr-string* *E114*
------
"string"                文字列定数              *expr-quote*

ダブルクォートが使われていることに注意。

文字列定数には以下の特殊文字が使用できる:
\...    3桁の8進数字 (例 "\316")
\..     2桁の8進数字 (非数字が続かなければならない)
\.      1桁の8進数字 (非数字が続かなければならない)
\x..    2桁の16進数字 (例 "\x1f")
\x.     1桁の16進数字 (16進数字でないものが続かなければならない)
\X..    \x..に同じ
\X.     \x.に同じ
\u....  文字を4桁の16進数で表現したもので、実際の値は現在の'encoding'の値に依
        存する (例えば "\u02a4")
\U....  \u....に同じ
\b      バックスペース <BS>
\e      エスケープ <Esc>
\f      フォームフィード <FF>
\n      改行 <NL>
\r      改行(キャリッジリターン) <CR>
\t      タブ <Tab>
\\      円記号(バックスラッシュ)
\"      ダブルクォート
\<xxx>  "xxx"という名の特殊キー。 例 "\<C-W>" は CTRL-W.

Note "\xff"は値255の1バイトとなる。これはエンコーディングによっては無効な値か
もしれない。現在の'encoding'の値に応じた文字255を得るには"\u00ff"を使う。

Note "\000"と"\x00"は強制的に文字列の終端として扱われる。


リテラル文字列                                          *literal-string* *E115*
---------------
'string'                文字列定数              *expr-'*

Note シングルクォートが使われていることに注意。

この文字列は文字通りに扱われる。バックスラッシュは取り除かれないし、また特別な
意味を持ったりもしない。唯一の例外は、2つのシングルクォートで1つのシングルクォ
ートになることである。

シングルクォートの文字列は、バックスラッシュを2重にしなくてよいため、正規表現
パターンを表すのに便利である。以下の2つのコマンドは同値である:
        if a =~ "\\s*"
        if a =~ '\s*'


オプション                                      *expr-option* *E112* *E113*
------
&option                 オプション変数、ローカルなものが優先
&g:option               グローバルオプション変数
&l:option               ローカルオプション変数

例:
        echo "タブストップは " . &tabstop . " です"
        if &insertmode

ここにはあらゆるオプション名を使うことができる。|options|を参照。ローカル変数
を使おうとして、実際にはバッファローカルもウィンドウローカルも存在しない場合に
は、グローバル変数が利用される。


レジスタ                                                *expr-register* *@r*
--------
@r                      レジスタ'r'の値

名前付きレジスタの中身を1つの文字列として得る。必要なところには改行文字が挿入
されている。無名レジスタの中身を取得するには@"か@@を使う。利用可能なレジスタの
説明については|registers|を参照。

レジスタ'='を使うと、式の値でなく式そのものを得る。それを評価するには|eval()|
を使う。


入れ子                                                  *expr-nesting* *E110*
-------
(expr1)                 式の入れ子


環境変数                                                *expr-env*
--------------------
$VAR                    環境変数

環境変数の文字列。定義されていない環境変数を指定した場合、結果は空文字列。
                                                        *expr-env-expand*
Note $VARを直接使用した場合とexpand("$VAR")を使用した場合では、動作に違いがあ
ることに注意。直接使用した場合には、現在のVimのセッション中で既知の値に展開さ
れるだけである。expand()を使用した場合、まず最初にVimのセッション中で既知の値
に展開される。それが失敗した場合、変数の展開にシェルが使用されることになる。こ
れは遅くはなるが、シェルの知りうる総ての変数を展開することができる。例:
        :echo $version
        :echo expand("$version")
最初の一つは恐らく何も返ってこず、2つ目は$versionの値が返ってくるだろう(貴方の
シェルがサポートしていたとして)


内部変数                                                *expr-variable*
-----------------
variable                内部変数
以下の|internal-variables|を参照。


関数呼出                *expr-function* *E116* *E118* *E119* *E120*
-------------
function(expr1, ...)    関数呼出
以下の|functions|を参照。


==============================================================================
3. 内部変数                                     *internal-variables* *E121*
                                                                        *E461*
内部変数の名前には文字と、数字とアンダーバー('_')を使うことができる。しかし数
字で始めることはできない。波括弧を使うこともできる。
詳細は|curly-braces-names|を参照。

内部変数は":let"コマンドで作成される|:let|。":unlet"コマンドで明示的に内部変数
を破棄することができる|:unlet|。内部変数に使われてない名前か、既に破棄された内
部変数を使うとエラーとなる。

変数には幾つもの名前空間が存在する。実際にどれが利用されるかは、どのような前置
子が使われたかで決まる:

                (無し) 関数の中では関数ローカル、それ以外ではグローバル
|buffer-variable|    b:   現在のバッファにローカル
|window-variable|    w:   現在のウィンドウにローカル
|tabpage-variable|   t:   現在のタブページにローカル
|global-variable|    g:   グローバル
|local-variable|     l:   関数にローカル
|script-variable|    s:   |:source|されたVimスクリプトにローカル
|function-argument|  a:   関数の引数(関数内のみ)
|vim-variable|       v:   グローバル、Vimがあらかじめ定義

これらのスコープそのものに辞書を通じてアクセスできる。例えば、全てのスクリプト
ローカル変数を削除するには次のようにする:
        :for k in keys(s:)
        :    unlet s:[k]
        :endfor

                                                *buffer-variable* *b:var*
"b:"で始まる変数名は、カレントバッファに局所的な変数を意味する。このように一つ
一つのバッファ毎に、変数"b:foo"を別々に使用することができる。この種の変数は
バッファが掃除(wipe out)された時や、":bdelete"で削除された時に一緒に削除され
る。

1つのバッファローカル変数が定義済:
                                        *b:changedtick-variable* *changetick*
b:changedtick   現在のバッファに対する総変更の回数。変更を行うたびに増加する。
                これには一回のアンドゥ操作もカウントされる。この変数はバッファ
                に変更が行われた際にだけアクションを起こしたい時に利用できる。
                例:
                    :if my_changedtick != b:changedtick
                    :   let my_changedtick = b:changedtick
                    :   call My_Update()
                    :endif

                                                *window-variable* *w:var*
"w:"で始まる変数名は、カレントウィンドウにローカルな変数を意味する。これはウィ
ンドウを閉じるときに破棄される。

                                                *tabpage-variable* *t:var*
"t:"で始まる変数名は、カレントタブページにローカルな変数を意味する。これはタブ
ページを閉じるときに破棄される。{+windows 機能つきでコンパイルしたときのみ利用
可能}

                                                *global-variable* *g:var*
関数の中からグローバル変数へアクセスするには、"g:"を付けた名前を使用する。これ
が省略された場合は関数ローカルな変数にアクセスする。ただし"g:"自体は、関数の外
でも使うことができる。

                                                *local-variable* *l:var*
関数の中からそのローカル変数にアクセスするには何も前置しなければ良い。明示的に
"l:"を付けることも可能である。ただし"l:"をつけないと予約されている変数名と衝突
してしまうことがある。例: "count"とすると"v:count"を参照してしまう。"l:count"
とすればローカル変数countを参照できる。

                                                *script-variable* *s:var*
Vimスクリプト内では"s:"で始まる変数名を使うことができる。これはスクリプトにつ
いてローカルであり、スクリプトの外部からはアクセスできない。

スクリプトローカル関数は次の中で使われる:
- そのスクリプトをsourceしている間に実行されるコマンド
- そのスクリプト内で定義される関数
- そのスクリプト内で定義されるオートコマンド
- そのスクリプト内で定義される関数やオートコマンドで定義される関数やオートコマ
  ンド(再帰的)
- そのスクリプト内で定義されるユーザ定義コマンド
次の場面では使えない:
- そのスクリプトからsourceされる他のスクリプト
- マッピング
- メニュー
- など。

グローバル変数との衝突を避けるにはスクリプト変数を使う。
次の例を参照:

        let s:counter = 0
        function MyCounter()
          let s:counter = s:counter + 1
          echo s:counter
        endfunction
        command Tick call MyCounter()

ここで他のスクリプトから"Tick"を実行してみると、そのスクリプト内の変数
"s:counter"は変化せず、"Tick"が定義されたスクリプト内の"s:counter"だけが変化す
る。

これと同じことをするもう1つの例:

        let s:counter = 0
        command Tick let s:counter = s:counter + 1 | echo s:counter

関数呼び出しやユーザ定義コマンドを実行するとき、スクリプト変数のコンテキストは
その関数、コマンドが定義されたスクリプトとなる。

関数の中で関数を定義した場合、スクリプト変数も共有される。例:

        let s:counter = 0
        function StartCounting(incr)
          if a:incr
            function MyCounter()
              let s:counter = s:counter + 1
            endfunction
          else
            function MyCounter()
              let s:counter = s:counter - 1
            endfunction
          endif
        endfunction

このStartCounting()を呼ぶと、カウントアップかカウントダウンのどちらかを行う関
数MyCounter()を定義する。StartCounting()がどこで呼ばれたかに関係なく、
MyCounter()の中では変数s:counterにアクセスできる。

同じスクリプトが再度読み込まれた場合、同一のスクリプト変数が使われる。スクリプ
ト変数はVimが終了するまで存続する。以下の例はカウンタを保持する:

        if !exists("s:counter")
          let s:counter = 1
          echo "script executed for the first time"
        else
          let s:counter = s:counter + 1
          echo "script executed " . s:counter . " times now"
        endif

Note これはつまり、ファイルタイププラグインはバッファごとにスクリプト変数を1セッ
ト持つのではないということを意味する。そのような目的にはバッファローカル変数
|b:var|を使うこと。


Vimの定義済変数:                                *vim-variable* *v:var*

                                        *v:beval_col* *beval_col-variable*
v:beval_col     マウスポインタがある桁の桁番号。|v:beval_lnum|行目のバイトイン
                デックスである。オプション'balloonexpr'を評価している最中のみ
                有効。

                                        *v:beval_bufnr* *beval_bufnr-variable*
v:beval_bufnr   マウスポインタがあるバッファの番号。オプション'balloonexpr'
                評価している最中のみ有効。

                                        *v:beval_lnum* *beval_lnum-variable*
v:beval_lnum    マウスポインタがある行の行番号。オプション'balloonexpr'
                評価している最中のみ有効。

                                        *v:beval_text* *beval_text-variable*
v:beval_text    マウスポインタの下もしくは後ろにあるテキスト。Cプログラムのデ
                バッグのために有用。'iskeyword'が適用されるが、マウスポインタ
                の下より前にあるドットと"->"は含まれる。マウスポインタが']'の
                上にあるときは、そこから対応する'['とその前にあるテキストまで
                が含まれる。マウスポインタが1行に収まるビジュアル領域の上にあ
                るときはその選択領域となる。オプション'balloonexpr'を評価して
                いる最中のみ有効。

                                        *v:beval_winnr* *beval_winnr-variable*
v:beval_winnr   マウスポインタがあるウィンドウの番号。オプション'balloonexpr'
                を評価している最中のみ有効。

                                        *v:char* *char-variable*
v:char          'formatexpr'を評価しているときの引数。また、短縮入力 |map-<expr>|
                で <expr> を指定しているとき、タイプされた文字を保持する。

                        *v:charconvert_from* *charconvert_from-variable*
v:charconvert_from
                変換しようとしているファイルの文字エンコーディング名。オプショ
                ン'charconvert'を評価している最中のみ有効。

                        *v:charconvert_to* *charconvert_to-variable*
v:charconvert_to
                変換後のファイルの文字エンコーディング名。オプション
                'charconvert'を評価している最中のみ有効。

                                        *v:cmdarg* *cmdarg-variable*
v:cmdarg        2つの目的のために使われる:
                1. ファイルの読み書きコマンドに与えられる余分な引数。現在のと
                   ころ"++enc="と"++ff="がそれである。読み書きコマンドに対する
                   オートコマンドイベントが発生する前にこの変数が代入される。
                   その読み書きコマンドの後に直接この変数を連結できるように、
                   先頭にスペースがついている。Note: ここには"+cmd"引数は含ま
                   れていない。どちらにしろそれは実行されるからである。
                2. ":hardcopy"でPostScriptファイルを印刷するとき、これが
                   ":hardcopy"への引数になる。'printexpr'の中で使うことができ
                   る。

                                        *v:cmdbang* *cmdbang-variable*
v:cmdbang       v:cmdargと同じく読み書きコマンドを実行したとき設定される。読み
                書きコマンドに"!"が使われたときは1となり、使われていなければ0
                となる。Note オートコマンドの中でのみ利用可能なことに注意。ユー
                ザ定義コマンドでは|<bang>|を使えば同じことができる。

                                        *v:count* *count-variable*
v:count         最後に実行されたノーマルモードコマンドに渡されたコマンドの実行
                回数を返す。読出し専用。使用例:
        :map _x :<C-U>echo "the count is " . count<CR>
                Note: <C-U>は、カウントの後に':'をタイプした時に示される、行範
                囲指定を削除するために必要となる。
                "3d2w" のようにカウントが2個指定された場合、その数が掛けられる。
                よって "d6w" となる。
                オプション'formatexpr'を評価するためにも使われる。
                また"count"は、以前の版のVimとの互換性の為に動作する。

                                        *v:count1* *count1-variable*
v:count1        "v:count"と同じように、しかしカウントが指定されなかった時の省
                略値として存在する。

                                                *v:ctype* *ctype-variable*
v:ctype         文字に関する実行環境の現在のロケール設定。これを使えばVim
                スクリプト内で現在のロケール設定に対応できるようになる。技術的
                な詳細: LC_CTYPEに等しい。ロケールを使用していないときは"C"に
                なる。
                この変数を設定するには|:language|コマンドを使うこと。直接設定
                することはできない。
                |multi-lang|を参照。

                                        *v:dying* *dying-variable*
v:dying         通常時は0。致命的なシグナルを受信したとき1が代入される。複数
                のシグナルを受信すると値が増加していく。オートコマンド内でVim
                が正常に終了するかチェックするために使える。{Unix でのみ動作}
                例:
        :au VimLeave * if v:dying | echo "\nAAAAaaaarrrggghhhh!!!\n" | endif

                                        *v:errmsg* *errmsg-variable*
v:errmsg        最後に表示されたエラーメッセージ。この変数は代入することが許
                されている。例:
        :let errmsg = ""
        :next
        :if (errmsg != "")
        :  ...
                また"errmsg"は、以前の版のVimとの互換性の為に動作する。

                                        *v:exception* *exception-variable*
v:exception     最も直近に捕捉され、まだ終了していない例外の値。
                |v:throwpoint||throw-variables|を参照。
                例:
        :try
        :  throw "oops"
        :catch /.*/
        :  echo "caught" v:exception
        :endtry
                出力: "caught oops".

                                        *v:fcs_reason* *fcs_reason-variable*
v:fcs_reason    |FileChangedShell|イベントが発生した理由。オートコマンドの中で
                何をすべきかやv:fcs_choiceに何を代入すべきかを決めるために使う。
                値は次のどれかとなる:
                        deleted         もはやファイルが存在しない
                        conflict        ファイルの内容、モード、タイムスタンプ
                                        が変化しており、バッファが変更されてい
                                        る状態。
                        changed         ファイルの内容が変化している
                        mode            ファイルのモードが変化している
                        time            タイムスタンプだけが変化している

                                        *v:fcs_choice* *fcs_choice-variable*
v:fcs_choice    |FileChangedShell|イベントが発生した後に何をすべきかを表す。
                オートコマンドの中で、そのバッファに対して何をすべきかを指示す
                るために使う。
                        reload          バッファを読み直す(バッファが削除され
                                        ている場合には効果がない)。
                        ask             何をすべきかをユーザに問い合わせる。こ
                                        れはこのオートコマンドがない場合と同じ
                                        である。ただしタイムスタンプだけが変化
                                        しているときは何もしない。
                        <empty>         何もしない。オートコマンドの中だけで必
                                        要なことは全て行ってしまっているという
                                        場合にこの値を代入する。
                既定値は<empty>。これら意外の(無効な)値が代入されたときは空の
                ときと同じ動作になり、警告メッセージは表示されない。

                                        *v:fname_in* *fname_in-variable*
v:fname_in      入力ファイルの名前。以下のオプションを評価している最中のみ
                有効:
                        オプション      このファイル名の意味
                        'charconvert'   変換するファイル
                        'diffexpr'      元のファイル
                        'patchexpr'     元のファイル
                        'printexpr'     印刷するファイル
                また、オートコマンドイベント|SwapExists|が発生したときスワップ
                ファイル名が代入される。

                                        *v:fname_out* *fname_out-variable*
v:fname_out     出力ファイルの名前。以下のオプションを評価している最中のみ
                有効:
                        オプション      このファイル名の意味
                        'charconvert'   変換した結果のファイル (*)
                        'diffexpr'      diffの出力
                        'patchexpr'     パッチを当てた結果のファイル
                (*) 書き込みコマンド(":w file"など)を実行する際の変換では
                v:fname_inと同じになる。読み込みコマンド(":e file"など)を実行
                する際の変換では一時ファイル名になり、v:fname_inと異なる。

                                        *v:fname_new* *fname_new-variable*
v:fname_new     新しい方のファイル名。'diffexpr'を評価している最中のみ有効。

                                        *v:fname_diff* *fname_diff-variable*
v:fname_diff    diff(patch)ファイルの名前。'patchexpr'を評価している最中のみ有
                効。

                                        *v:folddashes* *folddashes-variable*
v:folddashes    'foldtext'用。閉じた折り畳みのレベルを表すダッシュ。
                サンドボックス|sandbox|の中では読出し専用。|fold-foldtext|

                                        *v:foldlevel* *foldlevel-variable*
v:foldlevel     'foldtext'用。閉じた折り畳みのレベル。
                サンドボックス|sandbox|の中では読出し専用。|fold-foldtext|

                                        *v:foldend* *foldend-variable*
v:foldend       'foldtext'用。閉じた折り畳みの最後の行。
                サンドボックス|sandbox|の中では読出し専用。|fold-foldtext|

                                        *v:foldstart* *foldstart-variable*
v:foldstart     'foldtext'用。閉じた折り畳みの最初の行。
                サンドボックス|sandbox|の中では読出し専用。|fold-foldtext|

                                        *v:insertmode* *insertmode-variable*
v:insertmode    オートコマンドイベント|InsertEnter||InsertChange|用。
                値は次のどれか:
                        i       インサートモード
                        r       置換モード
                        v       ビジュアル置換モード

                                                *v:key* *key-variable*
v:key           辞書|Dictionary|の現在の要素のキー。|map()||filter()|で使わ
                れる式を評価している最中のみ有効。
                読出し専用。

                                                *v:lang* *lang-variable*
v:lang          メッセージに関する実行環境の現在のロケール設定。これを使えば
                Vimスクリプト内で現在のロケール設定に対応できるようになる。
                技術的な詳細: LC_MESSAGESに等しい。この値はシステムに依存する。
                この変数を設定するには|:language|コマンドを使うこと。直接設定
                することはできない。
                文字エンコーディングに使うのと違う言語でメッセージを表示させた
                い場合は|v:ctype|と異なる値でもよい。|multi-lang|を参照。

                                                *v:lc_time* *lc_time-variable*
v:lc_time       時刻のメッセージに関する実行環境の現在のロケール設定。これを使
                えばVimスクリプト内で現在のロケール設定に対応できるようになる。
                技術的な詳細: LC_TIMEに等しい。この値はシステムに依存する。こ
                の変数を設定するには|:language|コマンドを使うこと。直接設定す
                ることはできない。

                                                *v:lnum* *lnum-variable*
v:lnum          'foldexpr''indentexpr'に使うための行番号。また'guitablabel'
                と'guitabtooltip'の文脈ではタブページ番号になる。これらの式のど
                れかを評価しているときのみ有効。サンドボックス|sandbox|の中で
                は読出し専用。

                                        *v:mouse_win* *mouse_win-variable*
v:mouse_win     |getchar()|でマウスクリックイベントを取得したとき、この変数に
                ウィンドウ番号が代入されている。|winnr()|と同じく番号は1から始
                まる。マウスがクリックされなかったときは0となる。

                                        *v:mouse_lnum* *mouse_lnum-variable*
v:mouse_lnum    |getchar()|でマウスクリックイベントを取得したとき、この変数に
                行番号が代入されている。物理行ではなく論理行。マウスがクリック
                されていないときは0となる。

                                        *v:mouse_col* *mouse_col-variable*
v:mouse_col     |getchar()|でマウスクリックイベントを取得したとき、この変数に
                桁番号が代入されている。|virtcol()|と同じく画面上の桁番号。マ
                ウスがクリックされていないときは0となる。

                                        *v:oldfiles* *oldfiles-variable*
v:oldfiles      起動時に |viminfo| から読み込まれたファイルの名前のリスト。
                これらはマークを記憶しているファイルである。リストの長さの上限
                はオプション 'viminfo' の引数 ' によって決まる(既定では 100)。
                |:oldfiles| と |c_#<| を参照。
                このリストは変更可能であるが、後で |viminfo| ファイルに書き込ま
                れるものには影響しない。文字列以外の値を使うと問題を引き起こす
                だろう。
                {+viminfo 機能つきでコンパイルされたときのみ有効}

                                        *v:operator* *operator-variable*
v:operator      ノーマルモードにおいて最後に実行したオペレータコマンド。基本的に
                1文字である。例外は <g> や <z> で始まるコマンドで、その場合は2文
                字になる。|v:prevcount| と |v:register| と組み合わせて使うとよ
                い。オペレータ待機モードをキャンセルして、それからオペレータを
                使いたいときに便利である。例:
                        :omap O <Esc>:call MyMotion(v:operator)<CR>
                この値は他のオペレータが入力されるまでセットされてい
                る。よって空になると期待してはいけない。
                |:delete|, |:yank| などの Ex コマンドに対しては v:operator は
                セットされない。
                読出し専用。

                                        *v:prevcount* *prevcount-variable*
v:prevcount     最後のノーマルモードコマンドに与えられたカウントの値。前のコマ
                ンドのv:countの値である。ビジュアルモードやオペレータ待機モー
                ドをキャンセルし、その後にカウントを使う場合に便利である。
                例:
                        :vmap % <Esc>:call MyFilter(v:prevcount)<CR>
                読出し専用。

                                        *v:profiling* *profiling-variable*
v:profiling     通常時は0。":profile start"を実行すると1が代入される。
                |profiling|を参照。

                                        *v:progname* *progname-variable*
v:progname      Vimを起動したときのプログラム名(パスは除かれる)。"view"、
                "evim"などの名前やシンボリックリンクなどで起動した場合に特別な
                初期化を行うのに便利。
                読出し専用。

                                        *v:register* *register-variable*
v:register      最後のノーマルモードコマンドに指定されたレジスタの名前。レジス
                タが指定されなかったときは空。|getreg()| |setreg()|

                                        *v:scrollstart* *scrollstart-variable*
v:scrollstart   画面のスクロールの原因となったスクリプトや関数を説明する
                文字列。空であるときのみ代入される。よってこの変数には最初の原
                因だけが記録されている。原因がキーボードから入力されたコマンド
                の場合は"Unknown"が代入される。
                スクリプトを実行したとき現れたhit-enterプロンプトの原因を探る
                ために便利。

                                        *v:servername* *servername-variable*
v:servername    |x11-clientserver|に登録されている名前。
                読出し専用。


v:searchforward                 *v:searchforward* *searchforward-variable*
                検索方向: 前方検索の後なら1、後方検索の後なら0。|quote/| で示す
                方法によって最終検索パターンを直接セットしたときは0(前方検索)
                にセットされる。関数から戻るとき、この値は呼び出し前の値に復元
                される。
                |function-search-undo|
                読み書き両用。

                                        *v:shell_error* *shell_error-variable*
v:shell_error   最後に実行したシェルコマンドの結果。シェルコマンドの実行時にな
                にかエラーがあったならば、非零の値を取る。問題がなければ零にな
                る。これはシェルがエラーコードをVimに通知する時のみ働く。コマ
                ンドが実行されなかった時には、値として-1が良く使われる。読出し
                専用。
                例:
        :!mv foo bar
        :if v:shell_error
        :  echo 'could not rename "foo" to "bar"!'
        :endif
                また"shell_error"は、以前の版のVimとの互換性の為に動作する。

                                        *v:statusmsg* *statusmsg-variable*
v:statusmsg     最後に表示されたステータスメッセージ。この変数は代入すること
                が許されている。

                                        *v:swapname* *swapname-variable*
v:swapname      オートコマンド|SwapExists|を実行している最中のみ有効。見つかっ
                たスワップファイルの名前。読出し専用。

                                        *v:swapchoice* *swapchoice-variable*
v:swapchoice    イベント|SwapExists|により実行されたオートコマンドが、見つかっ
                たスワップファイルをどう処理するかをこの変数に代入する。
                        'o'     読込専用で開く
                        'e'     とにかく編集する
                        'r'     復活させる
                        'd'     スワップファイルを削除する
                        'q'     終了する
                        'a'     中止する
                この変数の値は1文字の文字列でなければならない。値が空のときは
                オートコマンドSwapExistsが存在しないときと同じようにユーザに問
                い合わせる。既定値は空。

                                        *v:swapcommand* *swapcommand-variable*
v:swapcommand   ファイルを開いた後に実行するノーマルモードコマンド。オートコマ
                ンド|SwapExists|で、他のVimインスタンスにファイルを開かせ、指
                定位置までジャンプするために使うことができる。例えば、あるタグ
                へジャンプするには、この変数に":tag tagname\r"という値を代入す
                る。":edit +cmd file"を実行させるには":cmd\r"を代入する。

                                *v:termresponse* *termresponse-variable*
v:termresponse  termcapのエントリ|t_RV|で端末から返されるエスケープシーケン
                ス。ESC [またはCSIで始まり、途中数字と';'と'.'だけから構成され
                'c'で終わるエスケープシーケンスを受け取ったとき代入される。
                このオプションがセットされるとオートコマンドイベント
                TermResponseが発生し、端末からの応答に反応することができる。
                新しいxtermからの応答は次の形式である:
                 "<Esc>[ Pp ; Pv ; Pc c"。ここでPpは端末のタイプ: 0ならvt100、
                 1ならvt220。Pvはパッチレベル(パッチ95で導入されたため常
                 に95以上)。Pcは常に0。
                {Vi mが|+termresponse|機能付きでコンパイルされたときのみ有効}

                                *v:this_session* *this_session-variable*
v:this_session  最後にロードされたか、セーブされたセッションファイルの完全な
                ファイル名。|:mksession|を参照。この変数は代入することが許さ
                れている。それ以前にセーブされたセッションがなければ、この変数
                は空となる。
                また"this_session"は、以前の版のVimとの互換性の為に動作する。

                                        *v:throwpoint* *throwpoint-variable*
v:throwpoint    最も直近に捕捉されてまだ終了していない例外が発生した位置。キー
                ボードから入力されたコマンドは記録されていない。|v:exception|
                と|throw-variables|も参照。
                例:
        :try
        :  throw "oops"
        :catch /.*/
        :  echo "Exception from" v:throwpoint
        :endtry
                出力: "Exception from test.vim, line 2"

                                                *v:val* *val-variable*
v:val           辞書|Dictionary|の現在の要素の値。|map()||filter()|で使わ
                れる式を評価している最中のみ有効。
                読出し専用。

                                *v:version* *version-variable*
v:version       Vimのバージョン番号。メジャーバージョン番号は100倍され、マイ
                ナーバージョン番号と足されている。Version 5.0は500。Version
                5.1 (5.01)は501となる。読出し専用。また"version"は、以前の版の
                Vimとの互換性の為に動作する。
                特定のパッチが摘要されているかを調べるには|has()|を使う。例:
                        if has("patch123")
                5.0と5.1には両方ともパッチ123が存在しているが、バージョンが違
                えば番号は同じでもパッチの内容は全く異なっている。

                                        *v:warningmsg* *warningmsg-variable*
v:warningmsg    最後に表示された警告メッセージ。この変数は代入することが許され
                ている。

==============================================================================
4. 組み込み関数                                         *functions*

(関数名の上でCTRL-]を使うことで、詳細な説明へ飛ぶことができる)

使用法                          結果    説明    

abs( {expr})                    浮動小数点数または数値  {expr}の絶対値
add( {list}, {item})            リスト  {item}をリスト{list}に追加する
append( {lnum}, {string})       数値    {string}{lnum}行目に付け加える
append( {lnum}, {list})         数値    行{list}{lnum}行目に付け加える
argc()                          数値    引数内のファイルの数
argv( {nr})                     文字列  引数の第{nr}番目
argv( )                         リスト  引数リスト
atan( {expr})                   浮動小数点数    {expr}のアークタンジェント
browse( {save}, {title}, {initdir}, {default})
                                文字列  ファイル選択ダイアログを表示
browsedir( {title}, {initdir})  文字列  ディレクトリ選択ダイアログを表示
bufexists( {expr})              数値    バッファ{expr}が存在すればTRUE
buflisted( {expr})              数値    バッファ{expr}がリストにあるならTRUE
bufloaded( {expr})              数値    バッファ{expr}がロード済みならTRUE
bufname( {expr})                文字列  バッファ{expr}の名前
bufnr( {expr})                  数値    バッファ{expr}の番号
bufwinnr( {nr})                 数値    バッファ{nr}のウィンドウ番号
byte2line( {byte})              数値    {byte}番目のバイトの行番号
byteidx( {expr}, {nr})          数値    {expr}{nr}文字目のバイトインデックス
call( {func}, {arglist} [, {dict}])
                                任意    引数{arglist}をつけて{func}を呼ぶ
ceil( {expr})                   浮動小数点数    {expr} を切り上げる
changenr()                      数値    現在の変更番号
char2nr( {expr})                数値    {expr}の先頭文字のASCIIコード
cindent( {lnum})                数値    {lnum}行目のCインデント量
clearmatches()                  なし    全マッチをクリアする
col( {expr})                    数値    カーソルかマークのカラム番号nr
complete( {startcol}, {matches}) なし   インサートモード補完を設定する
complete({startcol}, {matches}) 文字列  インサートモード補完の結果を設定する
complete_add( {expr})           数値    補完候補を追加する
complete_check()                数値    補完中に押されたキーをチェックする
confirm( {msg}, {choices} [, {default} [, {type}]])
                                数値    ユーザへの選択肢と番号
copy( {expr})                   任意    {expr}の浅いコピーを作る
cos( {expr})                    浮動小数点数    {expr} の余弦(コサイン)
count( {list}, {expr} [, {start} [, {ic}]])
                                数値     {list}中に{expr}が何個現れるか数える
cscope_connection( [{num} , {dbpath} [, {prepend}]])
                                数値    cscope接続の存在を判定する
cursor( {lnum}, {col} [, {coladd}])
                                数値    カーソルを{lnum}, {col}, {coladd}へ移動
cursor( {list})                 数値    カーソルを{list}の位置へ移動
deepcopy( {expr})               任意    {expr}の完全なコピーを作る
delete( {fname})                数値    ファイル{fname}を消す
did_filetype()                  数値    FileTypeのautocommandが実行されたか?
diff_filler( {lnum})            数値    diffモードで{lnum}に挿入された行
diff_hlID( {lnum}, {col})       数値    diffモードで{lnum}/{col}位置の強調
empty( {expr})                  数値    {expr}が空ならTRUE
escape( {string}, {chars})      文字列  {string}内の{chars}を'\'でエスケープ
eval( {string})                 任意    {string}を評価し、値を得る
eventhandler( )                 数値    イベントハンドラの内側ならTRUE
executable( {expr})             数値    実行可能な{expr}が存在するなら1
exists( {var})                  数値    変数{var}が存在したらTRUE
extend( {expr1}, {expr2} [, {expr3}])
                                リスト/辞書 {expr1}{expr2}の要素を挿入
expand( {expr} [, {flag}])      文字列  {expr}内の特別なキーワードを展開
feedkeys( {string} [, {mode}])  数値    先行入力バッファにキーシーケンスを追加
filereadable( {file})           数値    {file}が読みこみ可能ならTRUE
filewritable( {file})           Number  {file}が書き込み可能ならTRUE
filter( {expr}, {string})       リスト/辞書  {string}が0となる要素を{expr}から
                                        とり除く
finddir( {name}[, {path}[, {count}]])
                                文字列  {path}からディレクトリ{name}を探す
findfile( {name}[, {path}[, {count}]])
                                文字列  {path}からファイル{name}を探す
float2nr( {expr})               数値    浮動小数点数 {expr} を数値に変換する
floor( {expr})                  浮動小数点数    {expr} を切り捨てる
fnameescape( {fname})           文字列  {fname} 内のの特殊文字をエスケープする
fnamemodify( {fname}, {mods})   文字列  ファイル名を変更
foldclosed( {lnum})             数値    {lnum}の折り畳みの最初の行(閉じている
                                        なら)
foldclosedend( {lnum})          数値    {lnum}の折り畳みの最後の行(閉じている
                                        なら)
foldlevel( {lnum})              数値    {lnum}の折り畳みレベル
foldtext( )                     文字列  閉じた折り畳みに表示されている行
foldtextresult( {lnum})         文字列  {lnum}で閉じている折り畳みのテキスト
foreground( )                   数値    Vimウィンドウを前面に移動する
function( {name})               Funcref 関数{name}への参照を取得
garbagecollect( [at_exit])      なし    メモリを解放する。循環参照を断ち切る
get( {list}, {idx} [, {def}])   任意    {list}{def}から要素{idx}を取得
get( {dict}, {key} [, {def}])   任意    {dict}{def}から要素{key}を取得
getbufline( {expr}, {lnum} [, {end}])
                                リスト  バッファ{expr}{lnum}から{end}行目
getbufvar( {expr}, {varname})   任意    バッファ{expr}の変数 {varname}
getcmdline()                    文字列  現在のコマンドラインを取得
getcmdpos()                     数値    コマンドラインのカーソル位置を取得
getcmdtype()                    文字列  現在のコマンドラインの種類を取得
getcwd()                        文字列  現在の作業ディレクトリ
getfperm( {fname})              文字列  ファイル{fname}の許可属性を取得
getfsize( {fname})              数値    ファイル{fname}のバイト数を取得
getfontname( [{name}])          文字列  使用しているフォントの名前
getftime( {fname})              数値    ファイルの最終更新時間
getftype( {fname})              文字列  ファイル{fname}の種類の説明
getline( {lnum})                文字列  現在のバッファから行の内容を取得
getline( {lnum}, {end})         リスト  カレントバッファの{lnum}から{end}行目
getloclist( {nr})               リスト  ロケーションリストの要素のリスト
getmatches()                    リスト  現在のマッチのリスト
getpid()                        数値    Vim のプロセス ID
getpos( {expr})                 リスト  カーソル・マークなどの位置を取得
getqflist()                     リスト  quickfixリストの要素のリスト
getreg( [{regname} [, 1]])      文字列  レジスタの中身を取得
getregtype( [{regname}])        文字列  レジスタの種類を取得
gettabwinvar( {tabnr}, {winnr}, {name})
                                任意    タブページ{tabnr}{winnr}{name}
getwinposx()                    数値    GUI vim windowのX座標
getwinposy()                    数値    GUI vim windowのY座標
getwinvar( {nr}, {varname})     文字列  ウィンドウ{nr}の変数{varname}
glob( {expr} [, {flag}])        文字列  {expr}内のfile wildcardを展開
globpath( {path}, {expr} [, {flag}])
                                文字列  {path}の全ディレクトリに対し
                                        glob({expr})を行う
has( {feature})                 数値    機能{feature}がサポートならばTRUE
has_key( {dict}, {key})         数値    {dict}が要素{key}を持つならTRUE
haslocaldir()                   数値    現在のウィンドウで|:lcd|が実行された
                                        ならTRUE
hasmapto( {what} [, {mode} [, {abbr}]])
                                数値    {what}へのマッピングが存在するならTRUE
histadd( {history},{item})      文字列  ヒストリに追加
histdel( {history} [, {item}])  文字列  ヒストリからitemを削除
histget( {history} [, {index}]) 文字列  ヒストリから{index}アイテムを取得
histnr( {history})              数値    ヒストリの数
hlexists( {name})               数値    highligth group {name}が存在したらTRUE
hlID( {name})                   数値    highlight group {name}のID
hostname()                      文字列  vimが動作しているマシンの名前
iconv( {expr}, {from}, {to})    文字列  {expr}のエンコーディングを変換する
indent( {lnum})                 文字列  行{lnum}のインデントを取得
index( {list}, {expr} [, {start} [, {ic}]])
                                数値    {list}中に{expr}が現れる位置
input( {prompt} [, {text} [, {completion}]])
                                文字列  ユーザからの入力を取得
inputdialog( {p} [, {t} [, {c}]]) 文字列  input()と同様。GUIのダイアログを使用
inputlist( {textlist})          数値    ユーザに選択肢から選ばせる
inputrestore()                  数値    先行入力を復元する
inputsave()                     数値    先行入力を保存し、クリアする
inputsecret( {prompt} [, {text}]) 文字列  input()だがテキストを隠す
insert( {list}, {item} [, {idx}]) リスト  {list}に要素{item}を挿入 [{idx}の前]
isdirectory( {directory})       数値    {directory}がディレクトリならばTRUE
islocked( {expr})               数値    {expr}がロックされているならTRUE
items( {dict})                  リスト  {dict}のキーと値のペアを取得
join( {list} [, {sep}])         文字列  {list}の要素を連結して文字列にする
keys( {dict})                   リスト  {dict}のキーを取得
len( {expr})                    数値    {expr}の長さを取得
libcall( {lib}, {func}, {arg}   文字列  ライブラリ{lib}の関数{func}をコール
libcallnr( {lib}, {func}, {arg})  数値  上と同じ。ただし数値を返す
line( {expr})                   数値    行番号の取得
line2byte( {lnum})              数値    行{lnum}のバイトカウント
lispindent( {lnum})             数値    {lnum}行目のLispインデント量を取得
localtime()                     数値    現在時刻
log10( {expr})                  浮動小数点数    浮動小数点数 {expr} の 10 を底
                                        とする対数
map( {expr}, {string})          リスト/辞書  {expr}の各要素を{expr}に変える
matchadd( {group}, {pattern}[, {priority}[, {id}]])
                                数値    {pattern} を {group} で強調表示する
maparg( {name}[, {mode} [, {abbr}]])
                                文字列  モード{mode}でのマッピング{name}の値
mapcheck( {name}[, {mode} [, {abbr}]])
                                文字列  {name}にマッチするマッピングを確認
match( {expr}, {pat}[, {start}[, {count}]])
                                数値    {expr}内で{pat}がマッチする位置
matcharg( {nr})                 リスト  |:match|の引数
matchdelete( {id})              数値    {id} で指定されるマッチを削除する
matchend( {expr}, {pat}[, {start}[, {count}]])
                                数値    {expr}内で{pat}が終了する位置
matchlist( {expr}, {pat}[, {start}[, {count}]])
                                リスト  {expr}内の{pat}のマッチと部分マッチ
matchstr( {expr}, {pat}[, {start}[, {count}]])
                                文字列  {expr}内の{count}'番目の{pat}のマッチ
max( {list})                    数値    {list}内の要素の最大値
min( {list})                    数値    {list}内の要素の最小値
mkdir( {name} [, {path} [, {prot}]])
                                数値    ディレクトリ{name}を作成
mode( [expr])                   文字列  現在の編集モード
nextnonblank( {lnum})           数値    {lnum}行目以降で空行でない行の行番号
nr2char( {expr})                文字列  ASCIIコード{expr}で示されるキャラクタ
pathshorten( {expr})            文字列  path内の短縮したディレクトリ名
pow( {x}, {y})                  浮動小数点数    {x} の {y} 乗
prevnonblank( {lnum})           数値    {lnum}行目以前の空行でない行の行番号
printf( {fmt}, {expr1}...)      文字列  文字列を組み立てる
pumvisible()                    数値    ポップアップメニューが表示されているか
range( {expr} [, {max} [, {stride}]])
                                リスト  {expr}から{max}までの要素のリスト
readfile( {fname} [, {binary} [, {max}]])
                                リスト  ファイル{fname}から行のリストを取得
reltime( [{start} [, {end}]])   リスト  時刻の値を取得
reltimestr( {time})             文字列  時刻の値を文字列に変換
remote_expr( {server}, {string} [, {idvar}])
                                文字列  式を送信する
remote_foreground( {server})    数値    Vimサーバを前面に出す
remote_peek( {serverid} [, {retvar}])
                                数値    返信文字列を確認する
remote_read( {serverid})        文字列  返信文字列を読み込む
remote_send( {server}, {string} [, {idvar}])
                                文字列  キーシーケンスを送信する
remove( {list}, {idx} [, {end}])  任意  {list}から{idx}{end}の要素を削除
remove( {dict}, {key})          任意    {dict}から要素{key}を削除
rename({from}, {to})            数値    {file}から{to}へファイル名変更
repeat( {expr}, {count})        文字列  {expr}{count}回繰り返す
resolve( {filename})            文字列  ショートカットが指す先のファイル名
reverse( {list})                文字列  {list}をその場で反転させる
round( {expr})                  浮動小数点数    {expr} を四捨五入する
search( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
                                数値    {pattern} を検索する
searchdecl( {name} [, {global} [, {thisblock}]])
                                数値    変数の宣言を検索
searchpair( {start}, {middle}, {end} [, {flags} [, {skip} [...]]])
                                数値    開始/終端のペアの他方を検索
searchpairpos( {start}, {middle}, {end} [, {flags} [, {skip} [...]]])
                                リスト  開始/終端のペアの他方を検索
searchpos( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
                                リスト  {pattern}を検索
server2client( {clientid}, {string})
                                数値    返信文字列を送信する
serverlist()                    文字列  利用可能なサーバのリストを取得
setbufvar( {expr}, {varname}, {val})    バッファ{expr}内の変数{varname}{val}
                                        をセット
setcmdpos( {pos})               数値    コマンドライン内のカーソル位置を設定
setline( {lnum}, {line})        数値    行{lnum}{line}(文字列)をセット
setloclist( {nr}, {list}[, {action}])
                                数値    {list}を使ってロケーションリストを変更
setmatches( {list})             数値    マッチのリストを復元する
setpos( {expr}, {list})         なし    {expr}の位置を{list}にする
setqflist( {list}[, {action}])  数値    {list}を使ってQuickFixリストを変更
setreg( {n}, {v}[, {opt}])      数値    レジスタの値とタイプを設定
settabwinvar( {tabnr}, {winnr}, {varname}, {val})  タブページ{tabnr}内のウィン
                                        ドウ{nr}の変数{varname}{val}をセット
                                        {winnr} in tab page {tabnr} to {val}
setwinvar( {nr}, {varname}, {val})      ウィンドウ{nr}の変数{varname}{val}
                                        セット
shellescape( {string} [, {special}])
                                文字列  {string}をシェルコマンド引数として使う
                                        ためにエスケープする。
simplify( {filename})           文字列  ファイル名を可能なかぎり簡略化する
sin( {expr})                    浮動小数点数    {expr} の正弦(サイン)
sort( {list} [, {func}])        リスト  比較に{func}を使って{list}をソートする
soundfold( {word})              文字列  {word}のsound-fold
spellbadword()                  文字列  カーソル位置のスペルミスした単語
spellsuggest( {word} [, {max} [, {capital}]])
                                リスト  スペリング補完
split( {expr} [, {pat} [, {keepempty}]])
                                リスト  {expr}{pat}で区切ってリストを作る
sqrt( {expr}                    浮動小数点数    {expr} の平方根
str2float( {expr})              浮動小数点数    文字列を浮動小数点数に変換する
str2nr( {expr} [, {base}])      数値    文字列を数値に変換する
strftime( {format}[, {time}])   文字列  指定されたフォーマットでの時刻
stridx( {haystack}, {needle}[, {start}])
                                数値    {haystack}内の{needle}のインデックス
string( {expr})                 文字列  {expr}の値の文字列表現
strlen( {expr})                 数値    文字列{expr}の長さ
strpart( {src}, {start}[, {len}])
                                文字列  {src}{start}から長さ{len}の部分
strridx( {haystack}, {needle} [, {start}])
                                数値    {haystack}内の最後の{needle}のインデッ
                                        クス
strtrans( {expr})               文字列  文字列を表示可能に変更
submatch( {nr})                 文字列  ":substitute"における特定のマッチ
substitute( {expr}, {pat}, {sub}, {flags})
                                文字列  {expr}{pat}{sub}に置換え
synID( {line}, {col}, {trans})  数値    {line}{col}のsyntax IDを取得
synIDattr( {synID}, {what} [, {mode}])
                                文字列  syntax ID{synID}の属性{what}を取得
synIDtrans( {synID})            数値    {synID}の翻訳されたsyntax ID
synstack( {lnum}, {col})        リスト  {lnum}{col}列目における構文IDの
                                        スタック
system( {expr} [, {input}])     文字列  シェルコマンド{expr}の出力結果
tabpagebuflist( [{arg}])        リスト  タブページ内のバッファ番号のリスト
tabpagenr( [{arg}])             数値    現在または最後のタブページの番号
tabpagewinnr( {tabarg}[, {arg}])
                                数値    タブページ内の現在のウィンドウの番号
taglist( {expr})                リスト  {expr}にマッチするタグのリスト
tagfiles()                      リスト  使用しているタグファイルのリスと
tempname()                      文字列  テンポラリファイルの名前
tolower( {expr})                文字列  文字列{expr}を小文字にする
toupper( {expr})                文字列  文字列{expr}を大文字にする
tr( {src}, {fromstr}, {tostr})  文字列  {src}中に現れる文字{fromstr}{tostr}
                                        に変換する。
trunc( {expr}                   浮動小数点数    浮動小数点数 {expr} を切り詰め
                                        る
type( {name})                   数値    変数{name}の型
values( {dict})                 リスト  {dict}の値のリスト
virtcol( {expr})                数値    カーソルのスクリーンカラム位置
visualmode( [expr])             文字列  最後に使われたVisualモード
winbufnr( {nr})                 数値    ウィンドウ{nr}のバッファ番号
wincol()                        数値    カーソル位置のウィンドウ桁
winheight( {nr})                数値    ウィンドウ{nr}の高さ
winline()                       数値    カーソル位置のウィンドウ行
winnr()                         数値    現在のウィンドウの番号
winrestcmd()                    文字列  ウィンドウサイズを復元するコマンド
winrestview( {dict})            なし    現在のウィンドウのビューを復元
winsaveview()                   辞書    現在のウィンドウのビューを保存
winwidth( {nr})                 数値    ウィンドウ{nr}の幅を取得
writefile( {list}, {fname} [, {binary}])
                                数値    行のリストをファイル{fname}に書き込む


abs({expr})                                                     *abs()*
                {expr} の絶対値を返す。{expr} の値が浮動小数点数である場合は浮
                動小数点数を返す。{expr} が|Number|に変換可能な場合は数値が戻
                り値になる。それ以外の場合はエラーメッセージを表示し、-1
                を返す。
                例:
                        echo abs(1.456)
                        1.456
                        echo abs(-5.456)
                        5.456
                        echo abs(-4)
                        4
                {|+float| 機能を有効にしてコンパイルしたときのみ有効}}

add({list}, {expr})                                     *add()*
                リスト|List|{list}の末尾に要素{expr}を追加する。結果のリストを
                返す。例:
                        :let alist = add([1, 2, 3], item)
                        :call add(mylist, "woodstock")
                Note {expr}がリストのときは、1個の要素として追加される。リスト
                を連結するには|extend()|を使う。
                他の位置に要素を追加するには|insert()|を使う。


append({lnum}, {expr})                                  *append()*
                {expr}がリスト|List|のときは、各要素をカレントバッファの{lnum}
                行目以降にテキストとして追加する。
                リストでないときは、{expr}をテキストとしてカレントバッファの{lnum}
                行目以降にテキストとして追加する。
                {lnum}は0でもよく、その場合は1行目の前に行を挿入する。
                失敗した場合は0を返す({lnum}が不正な範囲であるか、メモリ不足)。
                成功なら0を返す。例:
                        :let failed = append(line('$'), "# THE END")
                        :let failed = append(0, ["Chapter 1", "the beginning"])

                                                        *argc()*
argc()          カレントウィンドウの引数リスト内の、ファイルの数を返す。
                |arglist|を参照。

                                                        *argidx()*
argidx()        引数リスト内の現在のインデックスを返す。最初のファイルは0とな
                る。argc() - 1が最後のファイルとなる。|arglist|を参照。

                                                        *argv()*
argv([{nr}])    結果は引数リスト内の、{nr}番目のファイル。|arglist|を参照。
                "argv(0)"は一番最初のファイルを示す。例:
        :let i = 0
        :while i < argc()
        :  let f = escape(fnameescape(argv(i)), '.')
        :  exe 'amenu Arg.' . f . ' :e ' . f . '<CR>'
        :  let i = i + 1
        :endwhile
                引数{nr}が指定されなかった場合は、引数リスト|arglist|全体を
                返す。

atan({expr})                                            *atan()*
                {expr} の逆正接(アークタンジェント)の主値を浮動小数点数
                |Float| で返す。主値はラジアンで[-pi/2, +pi/2]の範囲内にある。
                {expr} は |Float| か |Number| に評価されなければならない。
                例:
                        :echo atan(100)
                        1.560797
                        :echo atan(-4.01)
                        -1.326405
                {|+float| 機能つきでコンパイルされたときのみ有効}

                                                        *browse()*
browse({save}, {title}, {initdir}, {default})
                ファイル選択ダイアログを起動。"has("browser")"が非零を返すとき
                (幾つかのGUIバージョンに限定)だけ利用可能。
                入力フィールドの意味は:
                    {save}      非零ならば書込み用ファイルの選択
                    {title}     ダイアログのタイトル
                    {initdir}   ダイアログの始まるディレクトリ
                    {default}   ファイル名の省略値
                ダイアログがキャンセルされるか、何かエラーがあるか、もしくはブ
                ラウジングが不可能ならば、空文字列が戻ってくる。

                                                        *browsedir()*
browsedir({title}, {initdir})
                ディレクトリ選択ダイアログを起動。"has("browse")"が非零を返す
                とき(幾つかのGUIバージョンに限定)だけ利用可能。
                ディレクトリ選択ダイアログがないシステムにおいてはファイル選択
                ダイアログが使われる。その場合は、指定したいディレクトリの中の
                ファイルを選択すること。
                入力フィールドの意味は:
                    {title}     ダイアログのタイトル
                    {initdir}   ダイアログの始まるディレクトリ
                ダイアログがキャンセルされるか、何かエラーがあるか、もしくはブ
                ラウジングが不可能ならば、空文字列が戻ってくる。

                                                        *bufexists()*
bufexists({expr})
                結果は数値で、{expr}と呼ばれるバッファが存在すれば非零となる。
                {expr}が数値の場合、バッファ番号とみなされる。
                {expr}が文字列の場合、バッファ名に正確にマッチしなければな
                らない。名前として以下のものが許される:
                - カレントディレクトリからの相対パス。
                - フルパス。
                - 'buftype'が"nofile"であるバッファの名前
                - URL名。
                バッファリストにないバッファも検索される。
                Note |:buffers|の出力で、ヘルプファイルは短い名前でリストされ
                ているが、bufexists()は長い名前でないと見つけることができない。
                ある名前を bufexists() に与えて非零になったとしても、その名前
                をコマンド |:buffer| に与える際には |expand()| を使って展開し
                なければならない場合がある。特に MS-Windows の "c:\DOCUME~1"
                という 8.3 名形式において。
                代替ファイル名が存在するかを判定するには"bufexists(0)"を使う。
                                                        *buffer_exists()*
                以前の名前: buffer_exists().

                                                        *bufloaded()*
bufloaded({expr})
                戻り値は数値で、{expr}と呼ばれるバッファが存在しロード済み(
                ウィンドウに表示されているか、隠されているかは問わない)ならば
                結果は非零となる。引数{expr}|bufexists()|と同じように扱われ
                る。

                                                        *bufname()*
bufname({expr})
                戻り値はバッファの名前。バッファ名はコマンド":ls"で表示される
                ものと同様。
                {expr}が数値ならば、その番号のバッファ名が返される。0は現在の
                ウィンドウの代替バッファを意味する。{expr}が文字列ならば、バッ
                ファ名に対してファイル名マッチング|file-pattern|を行なうパター
                ンとなる。このマッチングは常に、'magic'をセットし'cpoptions'
                空にした状態で行なわれる。複数マッチしてしまった場合には空文字
                列が返される。""や"%"は現在のバッファを意味し、"#"は代替バッファ
                を意味する。
                完全マッチのものが優先され、完全マッチがなければ、バッファ名の
                先頭でのマッチ、末尾でのマッチ、中間でのマッチが探される。完全
                マッチのみを探すには、パターン先頭に"^"を、末尾に"$"をつける。
                まずバッファリストにあるバッファが探される。そこで1個だけマッ
                チが見つかればそれを返す。次にバッファリストにないものが探され
                る。
                {expr}が文字列のときに、それをバッファ番号として使いたいなら
                ば、0を足すことによって強制的に数値にすることができる:
                        echo bufname("3" + 0)
                バッファが存在しないか名前を持っていない場合には、空文字列が返
                される。
  bufname("#")                  alternate buffer name
  bufname(3)                    name of buffer 3
  bufname("%")                  name of current buffer
  bufname("file2")              name of buffer where "file2" matches.
                                                        *buffer_name()*
                以前の名前: buffer_name().

                                                        *bufnr()*
bufnr({expr} [, {create}])
                結果はバッファの番号。バッファ番号はコマンド":ls"で表示される
                ものと同様。{expr}の使い方は前述のbufname()を参照。バッファが
                存在しない場合-1が返される。ただし、{create}が与えられて0でな
                いときは、バッファリストに載せない新しいバッファを作成しその番
                号を返す。
                bufnr("$")は最後のバッファを意味する:
  :let last_buffer = bufnr("$")
                結果は存在しているバッファのうちで、もっとも大きなバッファ番号
                となる。 Note そのバッファ番号より小さいバッファ番号を持つ(ハ
                ズの)バッファが、必ずしも総て存在するとは限らない。なぜなら
                ":bwipeout"がバッファを消すことができるからだ。バッファが存在
                するかテストするにはbufexists()を使う。
                                                        *buffer_number()*
                以前の名前: buffer_number().
                                                        *last_buffer_nr()*
                bufnr("$")の以前の名前: last_buffer_nr().

                                                        *bufwinnr()*
bufwinnr({expr})
                結果は数値で、バッファ{expr}に関連付けられた最初のウィンドウの
                番号。{expr}の使い方は前述の|bufname()|を参照。バッファ{expr}
                が存在しないか、ウィンドウが無い場合には-1を返す。例:

        echo "A window containing buffer 1 is " . (bufwinnr(1))

                この番号は|CTRL-W_w|や":wincmd w"|:wincmd|で使える。
                カレントタブページ内のウィンドウだけを探す。
                                                        *byte2line()*
byte2line({byte})
                カレントバッファの先頭から{byte}番目の文字が、何行目に含まれる
                かを返す。これにはカレントバッファの'fileformat'に依存した、改
                行文字も含まれる。先頭の文字にはバイトカウント1が与えられる。
                |line2byte()||go||:goto|も参照。
                {|+byte_offset|機能付きでコンパイルされたときのみ有効}

byteidx({expr}, {nr})                                   *byteidx()*
                文字列{expr}{nr}番目の文字のバイトインデックスを返す。
                最初の文字の{nr}は0であり、戻り値は0となる。この関数はマルチバ
                イト文字が存在するときのみ有用であり、そうでなければこの関数が
                返す値は{nr}に等しい。合成文字は別々の文字と数えられる。
                例 :
                        echo matchstr(str, ".", byteidx(str, 3))
                は4文字目を表示する。次も同じことをする:
                        let s = strpart(str, byteidx(str, 3))
                        echo strpart(s, 0, byteidx(s, 1))
                {expr}{nr}文字以下の場合は-1を返す。
                {expr}がちょうど{nr}文字の場合は文字列の長さ(バイト単位)を返す。

call({func}, {arglist} [, {dict}])                      *call()* *E699*
                リスト|List|{arglist}の要素を引数として関数{func}を呼ぶ。
                {func}|Funcref|でも関数の名前でもよい。
                a:firstlineとa:lastlineにはカレント行が代入される。
                呼び出した関数の戻り値を返す。
                {dict}は"dict"属性つきの関数用で、これがローカル変数"self"に代
                入される。|Dictionary-function|を参照。

ceil({expr})                                                    *ceil()*
                {expr} 以上となる最小の整数を浮動小数点数 |Float| で返す
                (切り上げる)。
                {expr} は |Float| か |Number| に評価されなければならない。
                例:
                        echo ceil(1.456)
                        2.0
                        echo ceil(-5.456)
                        -5.0
                        echo ceil(4.0)
                        4.0
                {|+float| 機能つきでコンパイルされたときのみ有効}

changenr()                                              *changenr()*
                最も最近の変更の番号を返す。|:undolist|で表示される番号と同じ
                であり、|:undo|コマンドの引数として使うことができる。
                変更を行った直後ではその変更の番号となる。redoを行った直後は
                redoされた変更の番号となる。undoを行った直後はundoされた変更よ
                り1小さい番号になる。

                                                        *char2nr()*
char2nr({expr})
                {expr}の最初の文字のASCIIコードを返す。例:
                        char2nr(" ")            returns 32
                        char2nr("ABC")          returns 65
                現在の'encoding'の値が適用される。"utf-8"のときの例:
                        char2nr("á")           returns 225
                        char2nr("á"[0])        returns 195
                |nr2char()| はこの逆を行う。

cindent({lnum})                                         *cindent()*
                'cindent'で使われるのと同じC言語用のインデント規則に従った場合
                の{lnum}行目のインデント量を返す。
                インデント量はスペースで数えられ、'tabstop'の値は関係ない。
                {lnum}|getline()|の場合と同様に扱われる。
                {lnum}が無効な値のときや|+cindent|機能なしでコンパイルされてい
                るときは-1を返す。
                |C-indenting|を参照。

clearmatches()                                          *clearmatches()*
                |matchadd()| と コマンド |:match| により定義されたマッチをすべ
                て消去する。

                                                        *col()*
col({expr})    
                戻り値は数値で、{expr}で与えられる位置の桁番号(バイトインデッ
                クス)。有効な位置は:
                    .       現在の位置
                    $       カレント行の末尾(カレント行のバイト数+1を返す)
                    'x      マークxの位置(マークが設定されていない場合0)
                さらに {expr} は [lnum, col] という行番号と桁番号のリストで
                あってもよい。col に "$" を指定して、ある行の最後の桁を取得す
                るのにとても便利である。"lnum" か "col" が範囲外である場合は
                0 を返す。
                行番号を取得するには|line()|を使う。行番号と桁番号両方を取得す
                るには|getpos()|を使う。
                画面上の桁番号を取得するには|virtcol()|を使う。
                Note 現在のファイルのマークしか使えないことに注意。
                例:
                        col(".")                カーソルの桁
                        col("$")                カレント行の長さ+1
                        col("'t")               マークtの桁
                        col("'" . markname)     マークmarknameの桁
                先頭の桁は1になる。戻り値0はエラーを意味する。
                大文字のマークは他のバッファを指しているかもしれない。
                'virtualedit'が有効なとき、カーソルが行末を越えていると、桁番
                号は行の長さより1大きい値を返す。インサートモードで桁番号を取
                得するには次のマップが使える:
                        :imap <F2> <C-O>:let save_ve = &ve<CR>
                                \<C-O>:set ve=all<CR>
                                \<C-O>:echo col(".") . "\n" <Bar>
                                \let &ve = save_ve<CR>

complete({startcol}, {matches})                 *complete()* *E785*
                インサートモード補完の候補を設定する。
                インサートモードでのみ使用できる。CTRL-R = |i_CTRL-R|と組み合
                わせてマッピングを作る必要がある。CTRL-Oの後や、<expr>マッピン
                グの中では正しく動作しない。
                {startcol}は補完すべき単語の開始位置を示す、行内のバイトオフセッ
                トである。その位置からカーソルまでのテキストが補完すべき単語と
                なる。
                {matches}はリスト|List|でなければならない。リストの各要素が1つ
                の候補となる。この要素として許される値については
                |complete-items|を参照。
                Note この関数を呼んだ後は補完を停止させるようなテキストの挿入
                をしないように注意しなければならない。
                この関数で設定した候補は普通のインサートモード補完と同じ様に
                CTRL-NCTRL-Pで選択できる。設定されていればポップアップメニュー
                が表示される。|ins-completion-menu|を参照。
                例:
        inoremap <F5> <C-R>=ListMonths()<CR>
        func! ListMonths()
          call complete(col('.'), ['January', 'February', 'March',
                \ 'April', 'May', 'June', 'July', 'August', 'September',
                \ 'October', 'November', 'December'])
          return ''
        endfunc
                この例はそれほど役には立たないが、使い方を示している。Note 0が
                挿入されてしまわないように空文字列を返していることに注意。

complete_add({expr})                            *complete_add()*
                候補のリストに{expr}を追加する。'completefunc'で指定された関数
                の中でのみ使われる。
                失敗したときは0を返す(空文字列かメモリ不足)。候補が追加された
                ときは1を返し、その候補が既にリストに存在するときは2を返す。
                {expr}の説明については|complete-functions|を参照。'omnifunc'
                返すリストと同じである。

complete_check()                                *complete_check()*
                補完候補を探している間にキーがタイプされたかどうか確認する。補
                完の検索に時間がかかる場合に使われる。候補の検索を中断しようと
                しているときは0以外を返す。そうでないときは0を返す。
                'completefunc'で指定された関数の中でのみ使われる。

                                                        *confirm()*
confirm({msg}, {choices} [, {default} [, {type}]])
                confirm()はユーザに選択させるためのダイアログを提供する。戻り
                値は選択した番号になる。最初の選択肢が1である。
                Note: confirm()は、ダイアログサポートを有効にしてコンパイルし
                た時にだけ動作する。|+dialog_con||+dialog_gui|を参照。
                ダイアログには{msg}に加えて{choices}の選択肢が表示される。
                {choices}が指定されない、または空の場合は選択肢"&OK"が表示され
                る(使用している言語に翻訳される)。
                {msg}は文字列で'\n'を改行として使用できる。幾つかのシステムで
                は、長すぎる行は自動的に折り返される。
                {choices}は文字列で、個々の選択肢は'\n'によって区切られる。
                例:
                        confirm("Save changes?", "&Yes\n&No\n&Cancel")
                '&'の後の文字は選択肢のショートカットキーになる。この場合
                "Cancel"を選択するのに'c'をタイプすることができる。ショート
                カットキーは最初の文字である必要は無い:
                        confirm("file has been modified", "&Save\nSave &All")
                コンソールでは、デフォルトのショートカットキーとして、各選択肢
                の最初の文字が使われる。
                省略可能な引数{default}<CR>キーを叩いた時に選択される選択肢
                の番号を指定する。最初の選択肢をデフォルトにするならば1を使用
                する。デフォルトを設定したくないのならば0を使用する。
                {default}を省略した場合、0が使用される。
                省略可能な引数{type}はダイアログの種類を指定する。これは
                Win32 GUI版でアイコンを指定するのに使う。"Error", "Question",
                "Info", "Warning", "Generic"のうちどれか一つを指定する。以上の
                うちの先頭の文字だけで指定できる。{type}が省略された場合、
                "Generic"が使用される。
                ユーザが<Esc>CTRL-Cや、その他の割りこみキーでダイアログを中
                断した場合、confirm()は0を返す。

                例:
   :let choice = confirm("What do you want?", "&Apples\n&Oranges\n&Bananas", 2)
   :if choice == 0
   :    echo "make up your mind!"
   :elseif choice == 3
   :    echo "tasteful"
   :else
   :    echo "I prefer bananas myself."
   :endif
                GUIのダイアログではボタンが使用される。ボタンの配置は
                'guioptions'の'v'フラグに依存する。もしも'v'フラグが含まれてい
                るのなら、ボタンは常に垂直に配置される。そうでなければ水平に配
                置しようと試みられる。水平配置がうまくマッチしない場合は、垂直
                配置が使われる。幾つかのシステムでは常に水平配置が使われる。

                                                        *copy()*
copy({expr})    {expr}のコピーを作る。数値と文字列の場合は、{expr}そのものとコ
                ピーの間に違いはない。
                {expr}がリスト|List|の場合は浅いコピーを作る。つまり元のリスト
                を変更してもコピーは変更されず、逆も同じである。しかし要素は共
                通で、片方の要素に対し変更を加えると、もう一方の要素も変更され
                る。|deepcopy()|も参照。

cos({expr})                                             *cos()*
                {expr} の余弦(コサイン)をラジアンで浮動小数点数 |Float| で返す。
                {expr} は |Float| または |Number| に評価されなければならない。
                例:
                        :echo cos(100)
                        0.862319
                        :echo cos(-4.01)
                        -0.646043
                {|+float| 機能つきでコンパイルされたときのみ有効}
                

count({comp}, {expr} [, {ic} [, {start}]])                      *count()*
                リスト|List|または辞書|Dictionary| {comp}の中に値{expr}が何回
                現れるかを返す。
                {start}が指定されたときはそのインデックスの要素から検索を開始
                する。{start}{comp}がリストの場合のみ使用できる。
                {ic}が指定され、0でない場合は大文字・小文字は区別されない。


                                                        *cscope_connection()*
cscope_connection([{num} , {dbpath} [, {prepend}]])
                |cscope|接続が存在するかどうか判定する。引数が1個も指定されな
                かった場合、戻り値は以下のようになる:
                        0, cscopeが利用できない(コンパイル時に無効化されている)
                           またはcscope接続が存在しない場合
                        1, 1個以上のcscope接続が存在する場合

                引数が与えられた場合は次のようになる。{num}は、接続の存在を確
                認する際のマッチング方法を指定する。

                {num}   存在確認の方法
                -----   ------------------------------
                0       引数なしの場合と同じ (例: "cscope_connection()").
                1       {prepend}を無視し、{dbpath}に部分マッチを行う。
                2       {prepend}を無視し、{dbpath}に部分マッチを行う。
                3       {prepend}を使用し、{dbpath}{prepend}に部分マッチを行
                        う。
                4       {prepend}を使用し、{dbpath}{prepend}に完全マッチを行
                        う。

                Note: 以上のどの場合も文字列の比較は大文字・小文字を区別する。

                例: ":cs show"の表示が以下のようになったとする:

  # pid    database name                        prepend path
  0 27664  cscope.out                           /usr/local

                実行                                            戻り値
                ----------                                      ----------
                cscope_connection()                                     1
                cscope_connection(1, "out")                             1
                cscope_connection(2, "out")                             0
                cscope_connection(3, "out")                             0
                cscope_connection(3, "out", "local")                    1
                cscope_connection(4, "out")                             0
                cscope_connection(4, "out", "local")                    0
                cscope_connection(4, "cscope.out", "/usr/local")        1

cursor({lnum}, {col} [, {off}])                         *cursor()*
cursor({list})
                {lnum}行目の{col}桁目(バイトで数える)にカーソルを移動させる。
                桁番号{col}は1から始まる。
                引数が1個の場合は、{lnum}, {col}, {off}からなる、2個または3個
                の要素を持つリスト|List|でなければならない。これは|getpos()|
                戻り値と似ているが、1個目の要素がない点が異なる。
                この関数を呼んでもジャンプリストは変更されない。
                {lnum}がバッファの行数よりも大きい場合は、最後の行へ移動する。
                {lnum}が0の場合はカレント行に留まる。
                {col}がその行のバイト数より大きい場合は、その行の最後の文字へ
                移動する。
                {col}が0の場合は、カレント桁に留まる。
                'virtualedit'が有効のとき、{off}は文字の先頭からの画面上のオフ
                セットを指定する。例えば、<Tab>の中の位置や最後の文字より後な
                どへも移動できる。
                カーソルを移動できたときは 0 を、できなかったときは-1 を返す。

deepcopy({expr}[, {noref}])                             *deepcopy()* *E698*
                {expr}のコピーを作る。数値と文字列の場合は、{expr}そのものとコ
                ピーの間に違いはない。
                {expr}がリスト|List|の場合は完全なコピーを作る。つまり元のリス
                トを変更してもコピーは変更されず、逆も同じである。要素の1つが
                リストであるときは、再帰的にコピーが作成される。よってコピーの
                要素に変更を加えても元のリストの要素は変更を受けない。
                {noref}が省略された、または0のとき、含まれているリストや辞書は
                1度だけコピーされる。全ての参照はこのただ1つのコピーを指す。
                {noref}が1の場合、リストや辞書は現れるたびに新しいコピーが作ら
                れる。そのため循環参照があるとdeepcopy()は失敗する。
                                                                *E724*
                ネストは100レベルまで可能である。それ以上参照を繰り返している
                要素があると、{noref}が1の場合は失敗する。
                |copy()|も参照。

                                                        *delete()*
delete({fname}) {fname}という名前のファイルを削除する。戻り値は数値で、削除に
                成功したら0、失敗したら1が返る。
                リスト|List|から要素を削除するには|remove()|を使う。

                                                        *did_filetype()*
did_filetype()  autocommandが実行されFileTypeイベントが一度でも起こっていれ
                ば、非零が返る。スクリプトのFileTypeイベントが、複数回呼び出さ
                れるのを回避するのに使える。 |FileType|
                他のファイルへ移動すると、このカウンタはリセットされる。よって
                実際は、カレントバッファに対してFileTypeイベントが発生したかど
                うかを判定する。他のバッファを開くオートコマンドの中でこの関数
                を使って'filetype'を設定し、構文ファイルを読み込むために使える。

diff_filler({lnum})                                     *diff_filler()*
                {lnum}行目より上にある削除行の数を返す。削除行とは、diffモード
                で他方のウィンドウにテキストが挿入されていることを表す行のこと
                である。削除行は表示はされているが、実際にはバッファに存在しな
                い。
                {lnum}|getline()|と同様に扱われる。つまり"."はカレント行とな
                り、"'m"はマークmを表す。
                カレントウィンドウがdiffモードでないときは0を返す。

diff_hlID({lnum}, {col})                                *diff_hlID()*
                diffモードで{lnum}{col}桁(バイト単位)の位置のハイライトIDを
                返す。カレント行に変更がないときは0を返す。
                {lnum}|getline()|と同様に扱われる。つまり"."はカレント行とな
                り、"'m"はマークmを表す。
                先頭の桁の{col}は1となり、最初の行の{lnum}は1となる。
                ハイライトIDは|synIDattr()|を使って構文情報を得るために使える。

empty({expr})                                           *empty()*
                {expr}が空なら1を、そうでなければ0を返す。
                リスト|List|または辞書|Dictionary|は要素を1個も持たないとき空
                とみなされる。数値は値が0のとき空とみなされる。
                長いリストに対しては長さを0と比較するよりこちらの方がずっと高
                速である。

escape({string}, {chars})                               *escape()*
                {string}内に現れる{chars}の文字をバックスラッシュでエスケープ
                する。例:
                        :echo escape('c:\program files\vim', ' \')
                結果:
                        c:\\program\ files\\vim
                |shellescape()| も参照。

                                                        *eval()*
eval({string})  {string}を評価し、値を返す。|string()|の戻り値を元の値に戻すの
                に非常に便利である。数値、浮動小数点数文字列、それらの複合に対
                して動作する。実際に存在する関数への|Funcref|に対しても動作す
                る。

eventhandler()                                          *eventhandler()*
                イベントハンドラの中では1を返す。つまり、ユーザの文字入力を待っ
                ている間に、ファイルをドラッグ&ドロップするなど割り込みされた
                ことを表す。このときは対話的なコマンドは使えない。イベントハン
                ドラの中でないときは0を返す。

executable({expr})                                      *executable()*
                {expr}という名前の実行可能ファイルが存在するかどうか判定する。
                {expr}は引数を何もつけないプログラム名でなければならない。
                executable()は$PATHと通常のプログラム検索ディレクトリを参照す
                る。                                    *PATHEXT*
                MS-DOSとMS-Windowsでは".exe"、".bat"などの拡張子は含めても含め
                なくてもよい。省略された場合は$PATHEXTの拡張子を検索する。よっ
                て"foo.exe"が存在しなければ"foo.exe.bat"が見つかることもありう
                る。$PATHEXTが存在しなければ".exe;.com;.bat;.cmd"が使われる。
                $PATHEXTにドットだけを含めると拡張子なしの名前を検索することが
                できる。'shell'がUnixシェルのように思われるときは、{expr}の後
                に拡張子をつけない名前も検索される。
                MS-DOSとMS-Windowsではファイルが存在するかどうかだけを判定し、
                それがディレクトリでないことや、それが本当に実行可能であるかど
                うかは判定されない。
                MS-WindowsではVimと同じディレクトリにある実行ファイルは必ず発
                見できる。Vimがこのディレクトリを$PATHに加えるためである。
                |win32-PATH|
                戻り値は数値:
                        1       存在する
                        0       存在しない
                        -1      このシステム上では実装されていない

                                                        *exists()*
exists({expr})  結果は数値で、変数{expr}が存在すれば1となり、そうでなければ0と
                なる。引数{expr}は文字列で次のうちいずれかである。
                        &option-name    Vimオプション(存在するかだけを判定し、
                                        本当に動作するかは判定しない)
                        +option-name    動作するVimオプション
                        $ENVNAME        環境変数(空文字列と比較することでも判
                                        定できる)
                        *funcname       組み込み関数(|functions|参照)かユーザ
                                        が定義した関数(|user-functions|参照)
                        varname         内部変数(|internal-variables|)
                                        |curly-braces-names|, |Dictionary|の要
                                        素、|List|の要素などに対しても動作する。
                                        インデックスの評価で無効な式であるとエ
                                        ラーメッセージが出る可能性があることに
                                        注意。例:
                                           :let l = [1, 2, 3]
                                           :echo exists("l[5]")
                                           0
                                           :echo exists("l[xx]")
                                           E121: Undefined variable: xx
                                           0
                        :cmdname        exコマンド: 組み込みコマンド、ユーザ定
                                        義コマンド、コマンド修飾子|:command|
                                        戻り値:
                                        1  コマンド名の先頭に一致
                                        2  コマンド名に完全一致
                                        3  複数のユーザ定義コマンドに一致
                                        コマンドが定義されているかどうかを判定
                                        するには、必ず戻り値が2であるかを確認
                                        すること。
                        :2match         |:2match|のコマンド。
                        :3match         |:3match|のコマンド。
                        #event          このイベントに対するオートコマンド定義
                        #event#pattern  このイベントとパターンに対するオートコ
                                        マンド定義(パターンは文字そのままに解
                                        釈され、オートコマンドのパターンと1文
                                        字ずつ比較される)
                        #group          オートコマンドグループが存在するか
                        #group#event    このグループとイベントに対してオートコ
                                        マンドが定義されているか
                        #group#event#pattern
                                        このグループ、イベント、パターンに対す
                                        るオートコマンド定義
                        ##event         このイベントに対するオートコマンドがサ
                                        ポートされているか
                ある機能がサポートされているか判定するには|has()|を使う。

                例:
                        exists("&shortname")
                        exists("$HOSTNAME")
                        exists("*strftime")
                        exists("*s:MyFunc")
                        exists("bufcount")
                        exists(":Make")
                        exists("#CursorHold")
                        exists("#BufReadPre#*.gz")
                        exists("#filetypeindent")
                        exists("#filetypeindent#FileType")
                        exists("#filetypeindent#FileType#*")
                        exists("##ColorScheme")
                シンボルである&/$/*と名前の間には、空白文字があってはならな
                い。
                ある少数の場合では無視されるが、名前の後に余計な文字があっては
                ならない。将来はもっと厳格になる可能性があるので、現在許される
                からといって頼ってはならない。
                正しい例:
                        exists(":make")
                正しくない例:
                        exists(":make install")

                Note 引数は変数そのものではなく、文字列でなければならない。例
                えば、次は動作しない:
                        exists(bufcount)
                これは変数"bufcount"の存在を判定するのではなく、bufcountの値を
                渡し、それが存在するかどうか判定してしまう。

                                                        *expand()*
expand({expr} [, {flag}])
                ワイルドカードと{expr}内の特殊なキーワードを展開する。戻り値は
                文字列。

                複数の候補があった場合、それらは文字<NL>で区切られる。[注意:
                バージョン5.0では空白文字が用いられ、スペースを含むファイル名
                について問題を引き起こしていた]

                展開が失敗した場合、結果は空文字列となる。また存在しないファイ
                ル名というのは、結果の文字列には含まれない。

                {expr}が'%'か'#'か'<'で始まる場合には、展開は|cmdline-special|
                のように、変換子を受け付け、それらに関連付けられた変換が施され
                る。ここに簡単な概略を示す:

                        %               現在のファイル名
                        #               代替バッファのファイル名
                        #n              n番の代替バッファのファイル名
                        <cfile>         カーソルのしたのファイル名
                        <afile>         autocmdのファイル名
                        <abuf>          autocmdのバッファ名
                        <sfile>         取り込み(source)中のファイル名
                        <cword>         カーソル下の単語(word)
                        <cWORD>         カーソル下の単語(WORD)
                        <client>        最後に受け取ったメッセージの{clientid}
                                        |server2client()|
                変換子:
                        :p              フルパス名を展開
                        :h              ヘッド(ディレクトリ)
                        :t              テイル(ファイル名だけ)
                        :r              拡張子が削除される
                        :e              拡張子だけ

                例:
                        :let &tags = expand("%:p:h") . "/tags"
                '%'や'#'や'<'で始まる文字列を展開する時には、それに続くテキス
                トは無視されることに注意。従ってこれは正しくない:
                        :let doesntwork = expand("%:h.bak")
                こうすると良い:
                        :let doeswork = expand("%:h") . ".bak"
                "<cfile>"やそれらを展開する時には、戻り値が完全な展開をされな
                い参照名であることにも注意が必要。もしも"<cfile>"が"~/.cshrc"
                であった場合、"~/"を展開してホームディレクトリにするために、も
                う一度expand()を呼び出す必要がある:
                        :echo expand(expand("<cfile>"))

                変数と変換子の間には空白文字があってはならない。関数
                |fnamemodify()|が通常のファイル名の変換には使用可能である。

                カレントバッファや代替バッファの名前が未定義のときに'%'や'#'を
                使うと空文字列になる。"%:p"を名無しのバッファに使用した場合、
                結果はカレントディレクトリに'/'が付加されたものになる。

                '%'や'#'や'<'で始まらない{expr}は、コマンドラインのファイル名
                と同じように展開される。オプションの{flag}が使用され、その値が
                非ゼロでない時以外は'suffixes''wildignore'が使用される。存在
                しないファイルの名前も結果の文字列に含まれる。"**"を使うとディ
                レクトリツリーを検索できる。例えば、カレントディレクトリ以下に
                ある全ての"README"を見つけるには次のようにする:
                        :echo expand("**/README")
  
                expand()は、シェルの持っている変数や環境変数を展開することがで
                きる。しかしシェルを起動しなければならないので、遅くなる。
                |expr-env-expand|を参照。展開された変数はファイル名のリストの
                ように扱われる。環境変数を展開できないときはそのままになる。よっ
                て":echo expand('$FOOBAR')"の結果は"$FOOBAR"となる。

                存在するファイルを探すには|glob()|を参照。外部コマンドの「生
                の」実行結果を扱うには|system()|を参照。

extend({expr1}, {expr2} [, {expr3}])                    *extend()*
                {expr1}{expr2}は両方ともリスト|List|であるか、両方とも辞書
                |Dictionaries|でなければならない。

                両方ともリストであるなら、{expr2}{expr1}に付け加える。
                {expr3}が指定された場合は、{expr1}の第{expr3}番目の要素の前に
                {expr2}の要素を挿入する。{expr3}が0のときは最初の要素の前に挿
                入する。{expr3}がlen({expr1})に等しいときは末尾に{expr2}が付け
                加えられる。
                例:
                        :echo sort(extend(mylist, [7, 5]))
                        :call extend(mylist, [2, 3], 1)
                {expr1} が {expr2} と同じリストである場合、コピーされる要素の
                数はリストの元の長さと同じである。
                例として {expr3} が 1 のとき、最初の要素の N 個の新しいコピー
                が挿入される(ここで N はリストの元の長さ)。
                リストに1個の要素を加えるには|add()|を使う。2つのリストを連結
                して新しいリストを作るには演算子+を使う:
                        :let newlist = [1, 2, 3] + [4, 5]

                両方とも辞書である場合:
                {expr2}の全要素を{expr1}に加える。
                {expr1}{expr2}で共通のキーがある場合は、{expr3}によって動作
                が決まる:
                {expr3} = "keep"の場合: {expr1}の値そのままにする
                {expr3} = "force"の場合: use the value of {expr2}
                {expr3} = "error"の場合: エラーメッセージを表示する     *E737*
                {expr3}が省略された場合は"force"と同じになる。

                {expr2}が空でないならば{expr1}が変更される。必要ならば最初に
                {expr1}のコピーを作ること。
                {expr2}は変更されない。
                {expr1}を返す。


feedkeys({string} [, {mode}])                           *feedkeys()*
                {string}中の各文字を、あたかもマッピングまたはユーザによってタ
                イプされたかのように、処理キューに入れる。 これらの文字は先行
                入力バッファの末尾に付け足される。そのためマッピングを展開して
                いる途中であれば、これらの文字はマッピングを展開した後に来るこ
                とになる。
                この関数は、{string}中の文字が処理されるまでは待たない。
                特殊なキーを{string}に含めるにはダブルクォートと"\..."記法を使
                う(|expr-quote|を参照)。例えば、feedkeys("\<CR>")は<Enter>キー
                の押下をシミュレートする。しかしfeedkeys('\<CR>')とすると、こ
                の文字の通り5文字を挿入する。
                {mode}が省略されたときは、挿入されたキーはマップ展開の対象にな
                る。{mode}は以下の文字フラグを含む文字列:
                'm'     キーをマップ展開する。これが既定である。
                'n'     キーをマップ展開しない。
                't'     キーをタイプされたかのように扱う。そうでない場合は
                        マッピングから展開されたかのように扱われる。これは
                        undoや折り畳みの展開などで違いが現れる。
                戻り値は常に0。

                                                        *filereadable()*
filereadable({file})
                結果は数値で、{file}というファイルが存在し、読みこむことが可能
                ならばTRUEとなる。ファイル{file}が存在しないかディレクトリだっ
                た場合には、結果はFALSEとなる。引数{file}は文字列として使えれ
                ばどのような表現でもよい。
                ファイルが読み込み可能でなくてもよい場合には|glob()|を使う。
                                                        *file_readable()*
                以前の名前: file_readable().

filewritable({file})                                    *filewritable()*
                結果は数値で、{file}というファイルが存在し、書き込むことが可能
                ならば1となる。ファイル{file}が存在しないか書き込み不可能であ
                る場合には、結果は0となる。{file}がディレクトリであり、書き込
                み可能な場合、結果は2となる。


filter({expr}, {string})                                        *filter()*
                {expr}はリスト|List|または辞書|Dictionary|でなければならない。
                {expr}の各要素に対して{string}を評価し、その結果が0ならばリス
                トまたは辞書からその要素を削除する。{string}の内部では|v:val|
                が現在の要素の値を保持している。
                辞書の場合は|v:key|が現在の要素のキーを保持している。
                例:
                        :call filter(mylist, 'v:val !~ "OLD"')
                は要素"OLD"を削除する。
                        :call filter(mydict, 'v:key >= 8')
                は8未満のキーを持つ要素を削除する。
                        :call filter(var, 0)
                は全要素を削除する。つまりリストまたは辞書をクリアする。

                Note {string}は式を表す文字列である。バックスラッシュを二重に
                しなくても済むように|literal-string|を使うとよいだろう。

                この操作はその場で(in-place)行われる。リストや辞書を変更したく
                ない場合は最初にコピーを作ること:
                        :let l = filter(copy(mylist), 'v:val =~ "KEEP"')

                フィルタされたリストまたは辞書を返す。{string}を評価している最
                中にエラーが発生した場合は、それ以降の要素の処理は行われない。


finddir({name}[, {path}[, {count}]])                            *finddir()*
                {path}から{name}という名前のディレクトリを探す。ディレクトリを
                上方・下方のどちらにも再帰的に検索できる。{path}の記法について
                は|file-searching|を参照。
                最初に見つかったディレクトリのパスを返す。そのディレクトリがカ
                レントディレクトリの下にある場合は相対パスを返す。そうでなけれ
                ば絶対パスを返す。
                {path}が省略されたとき、または空のときはオプション'path'の値が
                使われる。
                省略可能な引数{count}が指定されたときは、最初に見つかったディ
                レクトリでなく、{count}番目に見つかったディレクトリを返す。
                {count}が負の場合は、見つかったディレクトリ全てのリスト|List|
                を返す。これはexコマンド|:find|によく似ている。
                {+file_in_path機能付きでコンパイルされたときのみ利用可能}

float2nr({expr})                                        *float2nr()*
                {expr} の小数点以下を切り捨てて |Number| に変換する。
                {expr} は |Float| または |Number| に評価されなければならない。
                {expr} の値が |Number| の範囲外の場合、結果は 0x7fffffff また
                は -0x7fffffff になる。NaN は -0x80000000 になる。
                例:
                        echo float2nr(3.95)
                        3
                        echo float2nr(-23.45)
                        -23
                        echo float2nr(1.0e100)
                        2147483647
                        echo float2nr(-1.0e150)
                        -2147483647
                        echo float2nr(1.0e-100)
                        0
                {|+float| 機能つきでコンパイルされたときのみ有効}


floor({expr})                                                   *floor()*
                {expr} 以下の最大の整数を |Float| で返す(切り捨て)。
                {expr} は |Float| または |Number| に評価されなければならな
                い。
                例:
                        echo floor(1.856)
                        1.0
                        echo floor(-5.456)
                        -6.0
                        echo floor(4.0)
                        4.0
                {|+float| 機能つきでコンパイルされたときのみ有効}
                
fnameescape({string})                                   *fnameescape()*
                コマンド引数のファイル名として使うために {string} をエスケープ
                する。'%' や '|' など特別な意味を持つ全ての文字がバックスラッ
                シュでエスケープされる。
                特別な文字とは、ほとんどのシステムにおいて
                " \t\n*?[{`$\\%#'\"|!<" である。ファイル名にバックスラッシュが
                現れるシステムにおいては 'isfname' の値に依存する。
                先頭の '+' と '>' もエスケープされる(|:edit| と |:write| の引
                数では特別な意味を持つ)。{string} が "-" である場合もエスケー
                プされる(|:cd| の引数では意味を持つ)。
                例:
                        :let fname = '+some str%nge|name'
                        :exe "edit " . fnameescape(fname)
                上記は次と同じ結果になる:
                        edit \+some\ str\%nge\|name

findfile({name}[, {path}[, {count}]])                           *findfile()*
                |finddir()|と同様だが、ディレクトリでなくファイルを検索する。
                'suffixesadd'が適用される。
                例:
                        :echo findfile("tags.vim", ".;")
                この例は、カレントファイルがあるディレクトリから上方に
                "tags.vim"を見つけるまで再帰的に検索する。

                                                        *fnamemodify()*
fnamemodify({fname}, {mods})
                ファイル名{fname}{mods}にしたがって変更する。{mods}はコマン
                ドラインで使われるのと同様な文字列である。詳細は
                |filename-modifiers|を参照。
                例:
                        :echo fnamemodify("main.c", ":p:h")
                結果:
                        /home/mool/vim/vim/src/
                Note: {fname}の中の環境変数は展開されない。環境変数を展開させ
                るには|expand()|を使うこと。

foldclosed({lnum})                                      *foldclosed()*
                結果は数値。{lnum}行目が閉じた折り畳みの中にあるなら、その折り
                畳みを構成する最初の行の行番号を返す。{lnum}行目が閉じた折り畳
                みに入っていないなら-1を返す。

foldclosedend({lnum})                                   *foldclosedend()*
                結果は数値。{lnum}行目が閉じた折り畳みの中にあるなら、その折り
                畳みを構成する最後の行の行番号を返す。{lnum}行目が閉じた折り畳
                みに入っていないなら-1を返す。

foldlevel({lnum})                                       *foldlevel()*
                カレントバッファの{lnum}行目の折り畳みレベルを表す数値を返す。
                折り畳みがネストしているときは一番下のレベルを返す。{lnum}行目
                に折り畳みがまったくないときは0を返す。折り畳みが開いているか
                閉じているかは関係ない。('foldexpr'の中で)折り畳みを更新してい
                る最中に呼ぶと、まだ折り畳みを更新していなく、折り畳みレベルが
                未知の行に対しては-1を返す。特別な場合として、普通は1行前のレ
                ベルは取得できる。

                                                        *foldtext()*
foldtext()      閉じた折り畳みに表示する文字列を返す。これはオプション
                'foldtext'のデフォルトの関数であり、'foldtext'を評価していると
                きにだけ呼ぶようにすべきである。この関数は変数|v:foldstart|,
                |v:foldend|, |v:folddashes|を使用する。
                戻り値の文字列は次のようになる:
                        +-- 45 lines: abcdef
               
                ダッシュ(-)の数は折り畳みレベルによって決まる。"45"はその折り
                畳みに含まれている行数である。"abcdef"はその折り畳みの中の最初
                の空行でない行のテキストである。行頭の空白と、"//"や/*"、
                'foldmarker''commentstring'に設定されている文字列は削除され
                る。
                {|+folding|機能付きでコンパイルされたときのみ利用可能}

foldtextresult({lnum})                                  *foldtextresult()*
                {lnum}行目の閉じた折り畳みに表示される文字列を返す。'foldtext'
                を適切なコンテキストの中で評価する。{lnum}行目に閉じた折り畳み
                がないときは空文字列を返す。
                {lnum}|getline()|のときと同様に扱われる。つまり"."はカレント
                行、"'m"はマークmを表す。
                折り畳まれたテキストをHTMLなどにエクスポートするときに有用。
                {|+folding|機能付きでコンパイルされたときのみ利用可能}

                                                        *foreground()*
foreground()    Vimのウィンドウを前面に移動する。この関数はクライアントからVim
                サーバへ送ると便利である。|remote_send()|
                Win32では自分自身のウィンドウを前面に持ってくることが必ずしも
                許可されていないので、動作しないかもしれない。そのときは代わり
                に|remote_foreground()|を使うこと。
                {Win32, Athena, Motif, GTKいずれかのGUI版とWin32コンソール版で
                のみ利用できる}


function({name})                                        *function()* *E700*
                関数{name}を参照する|Funcref|の変数を返す。{name}はユーザ定義
                関数でも組み込み関数でもよい。


garbagecollect([at_exit])                               *garbagecollect()*
                循環参照を持ち、使われていないリスト|List|と辞書|Dictionaries|
                をクリーンアップする。これはメモリ不足に陥ったときや、
                'updatetime'経過後ユーザのキー入力を待っているときに自動的に行
                われるので、この関数を呼ぶ必要があることはほとんどない。
                循環参照を持たない要素は、使われなくなったとき必ず解放される。
                長時間実行されるスクリプトの中で循環参照を持つ非常に大きなリス
                トや辞書を削除したときに有用である。
                省略可能な引数 "at_exit" に 1 を指定すると、Vim を終了するとき
                にもガベージコレクションが行われる。これはメモリリークを発見す
                るのに役に立つ。

get({list}, {idx} [, {default}])                        *get()*
                リスト|List| {list}から{idx}番目の要素を取得する。この要素を取
                得できないときは{default}を返す。{default}が省略されたときは0
                を返す。
get({dict}, {key} [, {default}])
                辞書|Dictionary| {dict}からキー{key}に関連づけられた値を取得す
                る。この要素を取得できないときは{default}を返す。{default}が省
                略されたときは0を返す。

                                                        *getbufline()*
getbufline({expr}, {lnum} [, {end}])
                バッファ{expr}{lnum}行目から{end}行目まで(両端含む)の行から
                なるリスト|List|を返す。{end}が省略されたときは{lnum}行目だけ
                からなるリストを返す。

                {expr}の指定の仕方については|bufname()|を参照。

                {lnum}{end}では"$"でバッファの最後の行を表すことができる。そ
                れ以外は数値でなければならない。

                {lnum}が1より小さいときや、バッファの行数より大きいときは空リ
                ストを返す。

                {end}がバッファの行数より大きいときは、バッファの行数が設定さ
                れたものとして扱う。{end}{lnum}行目より前に設定された場合は
                空リストを返す。

                この関数は読み込まれているバッファに対してのみ動作する。既にア
                ンロードされているバッファや存在しないバッファに対しては空リス
                トを返す。

                例:
                        :let lines = getbufline(bufnr("myfile"), 1, "$")

getbufvar({expr}, {varname})                            *getbufvar()*
                バッファ{expr}のオプションの値やバッファローカル変数{varname}
                の値を返す。Note "b:"をつけない変数名を指定すること。
                {varname} が空文字列の場合、全てのバッファローカル変数からなる
                辞書を返す。
                グローバルオプション、バッファローカルオプションのどちらに対し
                ても動作するが、グローバル変数、ウィンドウローカル変数、ウィン
                ドウローカルオプションに対しては動作しない。
                {expr}の指定の仕方については|bufname()|を参照。
                バッファや変数が存在しないときは空文字列を返し、エラーメッセー
                ジは表示されない。
                例:
                        :let bufmodified = getbufvar(1, "&mod")
                        :echo "todo myvar = " . getbufvar("todo", "myvar")

getchar([expr])                                         *getchar()*
                ユーザまたは入力ストリームから1文字を取得する。
                [expr]が省略されたときは1文字を取得できるまで待つ。
                [expr]が0のときは1文字を取得できる場合のみ取得する。取得できな
                ければ0を返す。
                [expr]が1のときは1文字を取得できるか判定し、実際には取得しない。
                取得できないときは0を返す。

                {expr}が省略されたときや{expr}が0のときは、文字全体または特殊
                キーを返す。それが8ビット文字なら戻り値は数値である。これを文
                字列に戻すにはnr2char()を使う。8ビット文字でないならばエンコー
                ドして文字列にして返す。
                特殊キーとは0x80(10進数で128)で始まるバイト列である。これは
                文字列"\<Key>"と同じ値である(例: "\<Left>")。戻り値は文字列で
                あり、修飾キー(shift, contro, alt)は含まれない。

                {expr}が1のときは最初のバイトだけを返す。1バイト文字の場合、こ
                れはその文字そのものを表す数値である。これを文字列に変換するに
                はnr2char()を使う。

                ユーザがマウスをクリックしたときはマウスイベントを返す。クリッ
                クした位置は|v:mouse_col|, |v:mouse_lnum|, |v:mouse_win|で得ら
                れる。以下の例は、普通にマウスがクリックされたときと同じように
                カーソルを移動させる。
                        let c = getchar()
                        if c == "\<LeftMouse>" && v:mouse_win > 0
                          exe v:mouse_win . "wincmd w"
                          exe v:mouse_lnum
                          exe "normal " . v:mouse_col . "|"
                        endif

                この関数を呼んだときプロンプトは表示されない。文字入力を待って
                いることをなんらかの方法でユーザがわかるようにしなければならな
                いだろう。
                入力された文字に対してマッピングは適用されない。
                キーコードは置換される。つまりユーザが<Del>を押した場合、「生
                の」文字シーケンスでなく<Del>キーに対応するコードが得られる。
                例:
                        getchar() == "\<Del>"
                        getchar() == "\<S-Left>"
                以下の例は大文字・小文字を区別しないように"f"を再定義する:
                        :nmap f :call FindChar()<CR>
                        :function FindChar()
                        :  let c = nr2char(getchar())
                        :  while col('.') < col('$') - 1
                        :    normal l
                        :    if getline('.')[col('.') - 1] ==? c
                        :      break
                        :    endif
                        :  endwhile
                        :endfunction

getcharmod()                                            *getcharmod()*
                最後にgetchar()などで得た文字に対する修飾キーの状態を表す数値
                を返す。以下の値の和となる:
                        2       shift
                        4       control
                        8       alt (meta)
                        16      マウスダブルクリック
                        32      マウストリプルクリック
                        64      マウスクアドラプルクリック
                        128     Macintoshのみ: command
                文字自身に含まれていない修飾キーのみ取得できる。つまり、
                Shift-aは修飾キーなしの"A"となる。

getcmdline()                                            *getcmdline()*
                現在のコマンドラインの内容を取得する。コマンドラインを編集して
                いるときのみ動作する。つまり|c_CTRL-_e|または|c_CTRL-R_=|を使っ
                ているときのみ有効。
                例:
                        :cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
                |getcmdtype()|, |getcmdpos()|, |setcmdpos()|も参照。

getcmdpos()                                             *getcmdpos()*
                コマンドラインにおけるカーソル位置をバイト単位で取得する。最初
                の桁は1となる。コマンドラインを編集しているときのみ動作する。
                つまり|c_CTRL-_e|または|c_CTRL-R_=|を使っているときのみ有効。
                |getcmdtype()|, |setcmdpos()|, |getcmdline()|も参照。

getcmdtype()                                            *getcmdtype()*
                現在のコマンドラインの種類を返す。戻り値は次のいずれか:
                    :   通常のexコマンド
                    >   デバッグモードコマンド |debug-mode|
                    /   前方検索コマンド
                    ?   後方検索コマンド
                    @   |input()| コマンド
                    -   |:insert| または |:append| コマンド
                コマンドラインを編集しているときのみ動作する。つまり
                |c_CTRL-_e|または|c_CTRL-R_=|を使っているときのみ有効。そうで
                ないときは空文字列を返す。
                |getcmdpos()|, |setcmdpos()|, |getcmdline()|も参照。

                                                        *getcwd()*
getcwd()        結果は文字列で、現在のディレクトリ名。

getfsize({fname})                                       *getfsize()*
                結果は数値で、{fname}で指定されるファイルのサイズをバイト単位
                で返す。
                {fname}がディレクトリのときは0を返す。
                ファイル{fname}が見つからないときは-1を返す。
                {fname} のサイズが |Number| の範囲外の場合は -2 を返す。

getfontname([{name}])                                   *getfontname()*
                引数なしで使われた場合には現在の通常のフォント名を返す。ハイラ
                イトグループNormalに対して使われるものと同様|hl-Normal|
                引数が指定された場合には{name}が有効なフォント名であるか判定さ
                れる。有効でないときは空文字列を返す。
                有効なときは実際のフォント名を返す。またはGUIが実際の名前の取
                得をサポートしていないときは{name}をそのまま返す。
                GUIモードで実行しているときのみ動作する。よってvimrcやgvimrcの
                中では使えない。GUIモードが起動した直後にこの関数を呼ぶには、
                オートコマンド|GUIEnter|を使うこと。
                Note GTK 2のGUIはどんなフォント名でも受け付けてしまうため、名
                前が有効であるかのチェックは動作しない。

getfperm({fname})                                       *getfperm()*
                {fname}で指定されたファイルの読み込み、書き込み、実行の許可属
                性を示す文字列を返す。
                {fname}が存在しない、またはそのディレクトリが読み込み不可能な
                ときは空文字列を返す。
                戻り値は"rwxrwxrwx"の形で、"rwx"フラグの各グループは順にファイ
                ルの所有者、ファイルが所属するグループ、その他のユーザを表す。
                許可属性が与えられていないフラグは"-"で置き換えられる。例:
                        :echo getfperm("/etc/passwd")
                この例は、(セキュリティの観点から望ましい設定がされているなら
                ば)"rw-r--r--"あるいは"rw-------"と表示する。

                                                        *getftime()*
getftime({fname})
                結果は{fname}で与えられたファイルの、最終更新時間を示す数値。
                1970年1月1日からの経過時間(秒)で、strftime()に渡すことができる
                だろう。|localtime()||strftime()|も参照。
                ファイル{fname}が見つからなかった場合には-1を返す。

getftype({fname})                                       *getftype()*
                {fname}で指定されたファイルの種別を示す文字列を返す。
                {fname}が存在しないときは空文字列を返す。
                ファイルの種別とそれらの結果の表を以下に示す:
                        通常ファイル            "file"
                        ディレクトリ            "dir"
                        シンボリックリンク      "link"
                        ブロックデバイス        "bdev"
                        キャラクタデバイス      "cdev"
                        ソケット                "socket"
                        FIFO                    "fifo"
                        それ以外                "other"
                例:
                        getftype("/home")
                Note "link"などの種別はそれをサポートしているシステムでのみ返
                される。"dir"と"file"しか返らないシステムもある。

                                                        *getline()*
getline({lnum} [, {end}])
                {end}が指定されない場合は、カレントバッファの{lnum}行目の内容
                を文字列にして返す。例:
                        getline(1)
                {lnum}が数字ではない文字で始まる文字列であった場合、line()に
                よってその文字列が数字に変換される。よって、カーソルのある行の
                文字列を取得するには:
                        getline(".")
                {lnum}が1より小さいかバッファの行数よりも大きい数値の場合、空
                文字列が返される。

                {end}が指定された場合は、カレントバッファの{lnum}行目から
                {end}行目までを要素とするリスト|List|を返す。
                {end}{lnum}と同様に解釈される。
                存在しない行は省略され、エラーメッセージは表示されない。
                {end}{lnum}より前になる場合は空リストを返す。
                例:
                        :let start = line('.')
                        :let end = search("^$") - 1
                        :let lines = getline(start, end)

                他のバッファの行を取得するには|getbufline()|を参照。

getloclist({nr})                                        *getloclist()*
                ウィンドウ{nr}のロケーションリストの全項目からなるリストを返す。
                {nr}に0を指定するとカレントウィンドウになる。ロケーションリス
                トウィンドウに対して使用すると、そこに表示されているロケーショ
                ンリストが返る。ウィンドウ番号{nr}が無効な場合は、空リストが返
                る。それ以外は|getqflist()|と同じ。

getmatches()                                            *getmatches()*
                |matchadd()| と |:match| により定義された全てのマッチの |List|
                を返す。|setmatches()| は |getmatches()| で保存されたマッチの
                リストを復元できるので、|getmatches()| と |setmatches()| は組
                み合わせて使うと便利である。
                例:
                        :echo getmatches()
                        [{'group': 'MyGroup1', 'pattern': 'TODO',
                        'priority': 10, 'id': 1}, {'group': 'MyGroup2',
                        'pattern': 'FIXME', 'priority': 10, 'id': 2}]
                        :let m = getmatches()
                        :call clearmatches()
                        :echo getmatches()
                        []
                        :call setmatches(m)
                        :echo getmatches()
                        [{'group': 'MyGroup1', 'pattern': 'TODO',
                        'priority': 10, 'id': 1}, {'group': 'MyGroup2',
                        'pattern': 'FIXME', 'priority': 10, 'id': 2}]
                        :unlet m

getqflist()                                             *getqflist()*
                現在の全quickfixエラーのリストを返す。リストの各要素は辞書で、
                以下の要素を持つ:
                        bufnr   ファイル名を持つバッファの番号。その名前を取得
                                するにはbufname()を使う。
                        lnum    バッファ中の行番号(最初の行は1)
                        col     桁番号(最初の桁は1)
                        vcol    0以外: "col"は画面上の桁
                                0: "col"はバイトインデックス
                        nr      エラー番号
                        pattern エラーの位置を特定するために使う検索パターン
                        text    エラーの説明
                        type    エラーメッセージの種類。'E', '1'など。
                        valid   0以外: エラーメッセージが認識されている

                エラーリストがまったくないか、空であるときは空リストを返す。
                存在しないバッファ番号を持つquickfixリストの項目は"bufnr"を0に
                して返される。

                役に立つ応用例: 複数のファイルから正規表現検索を行い、見つかっ
                たものに対してなんらかの操作をする:
                        :vimgrep /theword/jg *.c
                        :for d in getqflist()
                        :   echo bufname(d.bufnr) ':' d.lnum '=' d.text
                        :endfor

getreg([{regname} [, 1]])                               *getreg()*
                レジスタ{regname}の中身を文字列にして返す。例:
                        :let cliptext = getreg('*')
                getreg('=')は最後に評価した式レジスタの値を返す。(マップの中で
                使用する)。
                getreg('=', 1)はその式そのものを返す。これを使って|setreg()|
                復元することができる。他のレジスタの場合は、この引数は無視され
                るので、常に指定していても害はない。
                {regname}を指定しないときは|v:register|が使われる。


getregtype([{regname}])                                 *getregtype()*
                レジスタ{regname}の種類を表す文字列を返す。
                戻り値は次のいずれかとなる:
                    "v"                 文字指向|characterwise|の場合
                    "V"                 行指向|linewise|の場合
                    "<CTRL-V>{width}"   矩形指向|blockwise-visual|の場合
                    0                   空、または未知のレジスタの場合
                <CTRL-V>は値0x16の1文字である。
                {regname}を指定しないときは|v:register|が使われる。

gettabwinvar({tabnr}, {winnr}, {varname})               *gettabwinvar()*
                タブページ{tabnr}内のウィンドウ{winnr}のウィンドウローカル変数
                {varname}の値を取得する。
                {varname}が文字"&"で始まるときはウィンドウローカルオプションの
                値を取得する。
                タブページ番号は1から始まる。カレントタブページを指定するには
                |getwinvar()|を指定する。
                {winnr}が0のときはカレントウィンドウとなる。
                グローバルオプション、バッファローカルオプション、ウィンドウロ
                ーカルオプションに対しても動作するが、グローバル変数やバッファ
                ローカル変数に対しては動作しない。
                {varname}が空のときは全ウィンドウローカル変数からなる辞書を返
                す。
                Note {varname}は"w:"をつけずに指定しなければならない。
                例:
                        :let list_is_on = gettabwinvar(1, 2, '&list')
                        :echo "myvar = " . gettabwinvar(3, 1, 'myvar')


                                                        *getwinposx()*
getwinposx()    結果はGUIのVimウィンドウの左端の、デスクトップ上でのX座標値(数
        &