eval.txt For Vim バージョン 8.2. Last change: 2021 Jul 28
VIMリファレンスマニュアル by Bram Moolenaar
Vim script expression expr E15 eval
Vim script の利用についてはユーザーマニュアルの41章usr_41.txtでも解説され
ている。
注意: Vim script はコンパイル時に無効化できる。もしそうなっているとこのド
キュメントに書かれている事は有効ではない。+evalとno-eval-featureを参照。
このファイルは後方互換の Vim script について書かれている。より高速で、型チェッ
クや多くの機能に対応する Vim9 script については vim9.txt を参照のこと。
1. 変数 variables
1.1 変数の型
1.2 関数への参照 Funcref
1.3 リスト Lists
1.4 辞書 Dictionaries
1.5 Blobs Blobs
1.6 変数について補足 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. Vim scriptバージョン vimscript-version
11. +eval機能が無効 no-eval-feature
12. サンドボックス eval-sandbox
13. テキストロック textlock
テストのサポートは testing.txt を参照。
プロファイリングは profiling に記録されている。
==============================================================================
1. 変数 variables
1.1 変数の型
E712 E896 E897 E899
変数には10種類の型がある:
Number Integer
数値 32ビットまたは64ビットの符号有整数。expr-number
ビット数は v:numbersize で得られる。
例: -123 0x10 0177 0o177 0b1011
浮動小数点数 浮動小数点数。floating-point-format Float
{+float 機能つきでコンパイルされたときのみ}
例: 123.456 1.15e-6 -1.1e3
文字列 終端がNUL文字である8ビットの符号無し文字(バイト)。
expr-string 例: "ab\txx\"--" 'x-z''a,c'
リスト 要素の順序つきの列。詳細は List を参照。
例: [1, 2, ['a', 'b']]
辞書 順序を持たない連想配列: 各要素はキーと値を持つ。Dictionary
例:
{'blue': "#0000ff", 'red': "#ff0000"}
#{blue: "0000ff", red: "ff0000"}
Funcref 関数への参照 Funcref。
例: function("strlen")
辞書や引数とバインドすることができ、そのときは部分適用(Partial)
のように働く。
例: function("Callback", [arg], myDict)
特殊値 v:false, v:true, v:none と v:null。 Special
ジョブ ジョブに使われる。job_start()を参照。 Job Jobs
チャネル チャネルに使われる。ch_open()を参照。 Channel Channels
Blob バイナリラージオブジェクト。任意のバイトシーケンスを格納する。
詳細は Blob を参照。
例: 0zFF00ED015DAF
0z は空のBlobである。
数値と文字列は文脈に応じて相互に変換される。
数値から文字列への変換は数字のASCII表現によって行われる。例:
数値 123 --> 文字列 "123"
数値 0 --> 文字列 "0"
数値 -1 --> 文字列 "-1"
octal
文字列から数値への変換は旧来の Vim script のみで行われ、Vim9 script では行われ
ない。最初に出る数字を用いて数値に変換する。16進表記 "0xf9" や8進表記 "017" も
しくは "0o17"、2進表記の "0b10" も認識される。
NOTE: scriptversion-4 を使用する場合、先頭が "0" の8進数は認識されない。
"0o" 記法はパッチ 8.2.0886 が必要になる。
文字列が数字で始まらない場合結果は0となる。
例:
文字列 "456" --> 数値 456
文字列 "6bar" --> 数値 6
文字列 "foo" --> 数値 0
文字列 "0xf1" --> 数値 241
文字列 "0100" --> 数値 64
文字列 "0o100" --> 数値 64
文字列 "0b101" --> 数値 5
文字列 "-8" --> 数値 -8
文字列 "+8" --> 数値 0
文字列を強制的に数値に変換するには0を足す:
先頭の0によって8進数とみなされるのを防いだり、異なる基数を使うにはstr2nr()を
使う。
TRUE FALSE Boolean
ブール(真偽値)演算には数値が使われる。0は偽を意味し、非0は真を表す。また、
v:false と v:true を使うこともできる。Vim9 script では false と true
になる。
関数から真が返されたときは数値の 1 であり、偽が返されたときは数値の 0 である。
Note 次のコマンドをみると
る場合は真を意味する:
falsy truthy
式は、型を無視した値が「真の一種」か「偽の一種」のどちらであるかだけを利用し
て、判定条件として使用できる。Falsy は:
値が0
空の文字列、Blob、リスト、辞書
それ以外の値は truthy。例:
0 falsy
1 truthy
-1 truthy
0.0 falsy
0.1 truthy
'' falsy
'x' truthy
[] falsy
[0] truthy
{} falsy
#{x: 1} truthy
0z falsy
0z00 truthy
non-zero-arg
関数の引数は、TRUE とは少し異なる場合がある: 引数が存在し、それが非ゼロの
Number、v:true または空でない String に評価される場合、値は TRUE と見なされ
る。
Note: " " と "0" も空文字列ではないので、TRUE と見なされる。List、Dictionary、
または Float は数値または文字列ではないため、FALSE と評価される。
E745 E728 E703 E729 E730 E731 E908 E910 E913
E974 E975 E976
リスト List, 辞書 Dictionary, Funcref, ジョブ Job, チャネル Channel
および Blob は自動的に変換されない。
E805 E806 E808
数値と浮動小数点数をまぜると浮動小数点数になる。それ以外には浮動小数点数への自
動的な変換は存在しない。文字列から浮動小数点数へは str2float() を使い、浮動小
数点数から文字列へは printf() を、浮動小数点数から数値へは float2nr() を使う。
E891 E892 E893 E894 E907 E911 E914
浮動小数点数が予期されているところでは数値も使用可能だが、それ以外は使用できな
い。
no-type-checking
変数の型を変更しようとしてもエラーは発生しない。
1.2 関数への参照
Funcref E695 E718
関数への参照は、関数function()、関数funcref()またはラムダ式expr-lambdaを
使うことで得られる。関数への参照は、式の中で関数名が要求される場所で使うと参照
先の関数を呼び出す。例:
関数参照の変数名は、大文字、"s:"、"w:"、"t:"、"b:" のいずれかで始めなければな
らない。"g:" も使えるが、あとに続く名前は大文字で始めなければならない。関数参
照と参照先の関数の名前を同じにすることはできない。
関数を定義して、それへの参照を直接辞書に入れるための特別な形式がある。例:
この辞書のキーは小文字で始めなければならない。実際の関数名はここでは使われない。
numbered-functionも参照。
:callコマンドでも関数参照を使うことができる:
参照先の関数名はstring()で得られる。
call()を使うと、リスト型の変数を引数として関数参照を呼び出すことができる:
Partial
関数参照は、辞書および/もしくは引数とバインドすることができる。これは部分適用
(Partial)とも呼ばれる。これは、辞書および/もしくは引数を function() または
funcref() に渡すことで作成される。その関数を呼び出すと、その辞書および/もしく
は引数がその関数に渡される。例:
これは、関数を以下のようにして呼び出す:
これは関数を何かに渡す場合、例えば ch_open() の引数とする場合などに非常に有
用である。
Note 関数の辞書へのバインドは、その関数が辞書のメンバーであるときにも発生する
ことに注意:
ここで、MyFunction() は myDict を "self" として受け取る。これは、"myFunction"
メンバーがアクセスされたときに起こる。"myFunction" を別の辞書 otherDict に代入
して呼び出すと、それは otherDict にバインドされる:
今度は、"self" は "otherDict" になる。しかし、辞書を明示的にバインドしたときに
はこれは起こらない:
ここでは、"self" は "myDict" である。なぜなら明示的にバインドされているからで
ある。
1.3 リスト
list List Lists E686
リストとは順序を保つ要素の列である。要素はどんな型でもよい。要素へはインデック
ス番号を使ってアクセスする。列の任意の位置に要素を追加したり削除することができ
る。
リストの作成
E696 E697
リストを作るには、[]の中にコンマで区切って要素を書く。
例:
要素はどんな式でもよい。要素としてリストを指定すると、リストのリストができる:
最後の要素の後に余分なコンマがあると無視される。
リストのインデックス
list-index E684
リストの要素にアクセスするには、リスト名の後に[]を書き、その中にインデックスを
書く。インデックスは0基点(つまり最初の要素のインデックスは0)である。
取得した要素がリストならば、さらに続けてインデックスを書くことができる:
負のインデックスを指定すると、リストの末尾から数えられる。インデックス-1は最後
の要素を示し、-2は最後から2番目を指す
無効なインデックスによるエラーを回避するには関数get()を使う。するとインデッ
クスが無効な場合は、0かまたは自分で指定した既定値が返る:
リストの連結
list-concatenation
2つのリストを連結するには演算子 "+" を使う:
1個の要素を先頭または末尾に付け加えるには、[]で囲んでリストにして連結する。リ
ストの特定の要素を変更するには後述のlist-modificationを参照。
部分リスト
sublist
リストの一部分を取り出すには、[]の中に始点と終点のインデックスを書き、コロンで
区切る:
始点のインデックスを省略すると0となる。終点のインデックスを省略すると-1となる
最後のインデックスが含まれることに注意。排他的なインデックスを利用するなら
slice() メソッドを利用する。
終点のインデックスが始点のインデックスよりも前になってしまった場合は空リストと
なる。エラーメッセージは表示されない。
終点のインデックスがリストの長さより大きい場合は、長さ-1を指定したときと同じに
なる:
NOTE: mylist[s:e]と書くと変数 "s:e" をインデックスとして使ったと解釈される。
":" の前に1文字の変数を使うときは十分注意すること。必要ならこのようにスペース
を入れるとよい: mylist[s : e].
リストの同一性
list-identity
変数 "aa" がリストであり、それを別の変数 "bb" に代入したとすると、両方とも同じ
変数を参照するようになる。よってリスト "aa" を変更すると "bb" も変更される:
リストのコピーを作るには関数copy()を使う。前述の通り[:]を使ってもできる。こ
れは浅いコピーである。つまりリストの要素であるリストに変更を加えると、コピーさ
れたリスト内の同じ要素も変更される:
完全に独立したコピーを作るにはdeepcopy()を使う。これは再帰的にリストの要素の
コピーを作る。ただし深さは100レベルまでである。
2つの変数が同じリストを指しているかは演算子 "is" で判定できる。"isnot" はその
逆である。一方、"==" は2つのリストが同じ値を持っているかを判定する。
Note リストの比較について注意: 2つのリストは、同じ長さを持ち、全要素が "==" の
意味で等しいとき、等しいとみなされる。ただ、1つ例外がある: 数値と文字列を比較
するとそれらは異なるとみなされる。変数に対して "==" で比較したときに行われるよ
うな自動的な型変換は行われない。例:
つまり、リストの比較は数値や文字列の比較よりも厳格である。単純な値もリストに入
れることによりこの方法で比較することができる:
リストのアンパック
リストの要素を個々の変数としてアンパックするには、[]の中に変数を書く:
変数の個数とリストの要素数が一致しないときはエラーになる。リストにある余分な要
素をまとめて受け取るには、";" と受け取る変数名を書いておく:
上の例は次とほぼ同じである:
要素が 2 つしかないときでもエラーにはならない。"rest" は空リストになる。
リストの変更
list-modification
リストの中の特定の要素を変更するには次のように:letを使う:
始点と終点を指定してリストの一部分を変更することができる。代入する値は、少なく
とも削除する範囲の要素数と同じ数だけ必要である:
リストに要素を追加したり削除するには関数を使う。いくつか例を示す:
要素の順番を変更する:
for ループ
:for ループは、リスト、文字列または Blob の各要素に対してコマンドを実行する。
変数に各要素が順番に代入される。リストを使った例:
上の例は次と同じ:
やりたいことがリストの各要素を変更するだけなら、forループを使うより関数map()
を使った方がよりシンプルになる。
:letコマンドと同じように、:forは変数のリストをループ変数にすることができる。
この場合、引数はリストのリストでなければならない。
これはリストの各要素に対して:letコマンドを実行するかのように実行される。また
この場合も引数の型は全て同じでないとエラーになる。
引数の残りを1個のリスト変数に代入することもできる:
Blob の場合、一度に 1 バイトが使われる。
文字列の場合、任意の合成文字を含む 1 文字が文字列として使われる。例:
リスト操作関数
E714
以下はリスト操作に使える関数である:
機能を組み合わせると、処理を単純に記述できることを覚えておくとよい。例えば、リ
スト中の全ての数値の和を求める例:
1.4 辞書
dict Dict Dictionaries Dictionary
辞書とは連想配列である。各要素はキーと値を持つ。要素はキーによって特定できる。
要素は特に順序を持たずに保持される。
辞書の作成
E720 E721 E722 E723
辞書を作るには、{}の中にコンマで区切って要素を書く。各要素のキーと値はコロンで
区切る。それぞれのキーは1度しか現れてはならない。例:
キーは必ず文字列である。数値を使うこともできるが、自動的に文字列に変換される。
よって文字列 '4' のキーと数値4のキーは同一の要素を参照する。
Note 文字列 '04' と数値04は異なることに注意。なぜなら数値04は文字列 '4' に変換
されるからである。空文字列もまたキーとして使用できる。
literal-Dict #{}
すべてのキーを引用符で囲む必要を避けるために、#{} 形式を使用できる。この形式
は、ASCII文字、数字、'-' および '_' のみで構成されるキーを必要とする。
例:
ができない。
値はどんな式でもよい。辞書を値にすると、ネストした辞書ができる:
最後の要素の後に余分なコンマがあると無視される。
要素にアクセスする
通常、要素にアクセスするには[]の中にキーを書く:
また、この書き方で既存の辞書に要素を追加できる。この点はリストと異なる。
キー名がアルファベット、数字、アンダースコアだけからなる場合は、以下の形式が使
えるexpr-entry:
要素はリストや辞書を含むどんな型でもよいため、インデックス参照とキー参照を続け
て書くことができる:
辞書からリストへの変換
辞書の全要素に対してループを行いたい場合がある。そのためには辞書をリストに変換
し、そのリストに対して:forループを行う。
多くの場合はキーに対してループを行う。これには関数keys()を使う:
このキーのリストはソートされていない。ソートさせるには関数sort()を使う:
値に対してループを行うには関数values()を使う:
キーと値両方を得るには関数items()を使う。この関数は、キーと値の2個の要素から
なるリストのリストを返す:
辞書の同一性
dict-identity
辞書のコピーを作るにはリストと同様にcopy()とdeepcopy()を使う必要がある。そ
うでなく代入を行うと同一の辞書を参照するようになる:
2つの辞書は、全てのキー・値のペアが等しいとき等しいとみなされる。より詳しくは
list-identityを参照。
辞書の変更
dict-modification
辞書の要素を変更したり、新しい要素を追加するには:letを使う:
辞書から要素を取り除くにはremove()か:unletを使う。以下のように辞書からキー
"aaa" を取り除くには3つの方法がある:
2つの辞書を併合させるにはextend()を使う:
要素により上書きされる。この動作は3番目の引数により変更できる。
Note 辞書の要素間に順序は定まっていない。そのため ":echo adict" としたとき、も
ともとadictにあった要素が先に、bdictから追加された要素が後に表示されると考えて
はならない。
辞書から条件を指定して要素を取り除くにはfilter()が使える:
このコマンドで全てのエントリを除去することもできる:
関数を辞書に入れる
Dictionary-function self E725 E862
関数が "dict" 属性つきで定義されると、特殊な方法で呼び出すことができる。例:
これはオブジェクト指向プログラミングのメソッドに似ている。この辞書の要素は
Funcrefである。暗黙に定義されるローカル変数 "self" は、この関数を呼び出した
辞書を参照している。
"dict" 属性をつけないでFuncrefを辞書に入れることもできる。しかしその場合、変
数 "self" は定義されない。
numbered-function anonymous-function
関数に名前をつける必要をなくすために、関数を定義して直接辞書に代入することがで
きる:
こうすると関数に番号がふられ、dict.lenがこの関数を参照するFuncrefとなる。こ
の関数はFuncrefを通してのみ呼び出せる。参照しているFuncrefがなくなると、こ
の関数は自動的に削除される。
番号付き関数には "dict" 属性を付ける必要はない。
番号付き関数でエラーが発生したときは、あるトリックを使うことで発生源を確認でき
る。例えば 42 という関数なら次のようにする:
辞書操作関数
E715
以下は辞書操作に使える関数である:
1.5 Blobs
blob Blob Blobs E978
Blobは、バイナリオブジェクトである。例えば、ファイルから画像を読んでチャネルを
通し送信することなどに使える。
Blobは、ほとんどの場合、数値の List のように振る舞う。数値は、0 から 255 の
8ビットの値を持つ。
Blobの作成
BlobはBlobリテラル blob-literal を使って作成できる:
ドットは値を変更しない:
Blobは readfile() で引数{type}を "B" に設定してファイルから読み込むことがで
きる。例:
Blobは、ch_readblob() 関数を使用してチャネルから読み取ることができる。
Blobのインデックス
blob-index E979
Blob内のバイトは、Blobの後ろに角括弧でインデックスを入れることによってアクセス
することができる。インデックスは 0 から始まるため、最初のバイトのインデックス
は 0 になる。
負のインデックスは終端から数えられる。インデックス -1 はBlobの最後のバイト、-2
は最後の1つ前のバイトを表す。
無効なインデックスに対するエラーを回避するには、get() 関数を使用すること。項
目が利用できない場合、-1 または指定したデフォルト値が返される:
Blobの繰り返し
:for ループは、Blobの各バイトに対してコマンドを実行する。ループ変数はBlobの
各バイトに設定される。例:
Blobの連結
2つのBlobは "+" 演算子で連結できる:
Blobの決まった場所を変更するには、下記の blob-modification を参照。
Blobの一部
Blobの一部は、角括弧内のコロンで区切られた最初と最後のインデックスを指定するこ
とによって取得できる:
最初のインデックスを省略することはゼロと同じである。最後のインデックスを省略す
ることは -1 と同じである。
最初のインデックスがBlobの最後のバイトを超えている場合、または2番目のインデッ
クスが最初のインデックスより前にある場合、結果は空のBlobになる。エラーメッセー
ジはない。
2番目のインデックスがリストの長さ以上の場合、長さから 1 を引いたものが使用され
る:
Blobの変更
blob-modification
Blobの特定のバイトを変更するには、 :let を使用する:
インデックスがBlobの終端を1つ超える場合は、それが追加される。それより上のイン
デックスはエラーである。
バイトシーケンスを変更するには、[:] 表記が使用できる:
Blobの一部を変更するには、変更する最初と最後のバイトを指定する。値の範囲内のバ
イト数は同じでなければならない:
関数 add(), remove() および insert() も使用できる。
Blobの同一性
Blobは等しいかどうか比較することができる:
変数 "aa" がBlobで、別の変数 "bb" に代入すると、両方の変数は同じBlobを参照す
る。そして、"is" 演算子はtrueを返す。
[:] または copy() を使用してコピーを作成する場合、値は同じだが、同一性は異な
る:
Blobのコピーを作成するには、copy() 関数を使用する。[:] を使っても上で説明し
たように動作する。
1.6 変数について補足
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
expr2 ? expr1 : expr1 if-then-else 条件式
expr2 expr3
expr3 || expr3 ... 論理和
expr3 expr4
expr4 && expr4 ... 論理積
expr4 expr5
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、辞書 Dictionary または
Blob のインスタンス
expr5 isnot expr5 異なるリスト List、辞書 Dictionary または
Blob のインスタンス
expr5 expr6
expr6 + expr6 ... 足し算、リストまたはBlobの連結
expr6 - expr6 ... 引き算
expr6 . expr6 ... 文字列の連結
expr6 .. expr6 ... 文字列の連結
expr6 expr7
expr7 * expr7 ... 掛け算
expr7 / expr7 ... 割り算
expr7 % expr7 ... 剰余(割った余り)
expr7 expr8
! expr7 論理否定
- expr7 単項のマイナス {訳注: -1等}
+ expr7 単項のプラス
expr8 expr9
expr8[expr1] 文字列のバイト、またはリストの要素
expr8[expr1 : expr1] 文字列の部分文字列、またはリストの部分リスト
expr8.name 辞書 Dictionary の要素
expr8(expr1, ...) Funcref 変数による関数呼び出し
expr8->name(expr1, ...) method 呼び出し
expr9 number 数定数
"string" 文字列定数。バックスラッシュは特別な意味を持つ
'string' リテラル文字列定数。'を含めるには2重にする
[expr1, ...] リスト List
{expr1: expr1, ...} 辞書 Dictionary
#{key: expr1, ...} 辞書 Dictionary
&option オプション変数
(expr1) 式の入れ子
variable 内部変数
va{ria}ble 波括弧付きの内部変数
$VAR 環境変数
@r レジスタ 'r' の値
function(expr1, ...) 関数呼出し
func{ti}on(expr1, ...) 波括弧付きの関数呼出し
{args -> expr1} ラムダ式
"..." はその演算が、その後に他の演算を続ける事ができることを示している。
例:
一つのレベルにある全ての式は左から右に解釈される。
expr1 expr1 trinary falsy-operator ?? E109
-----
三項演算子: expr2 ? expr1 : expr1
Falsy 演算子: expr2 ?? expr1
三項演算子
'?' より前の式は数値として評価される。その結果がTRUEであった場合、'?' と ':'
に挟まれた式の値がこの式全体の値となり、そうでなかった場合は ':' 以降の式の値
が全体の値となる。
例:
始めの式が "expr2" であるから、そこに別の?:を含むことはできない。残り二つの式
については以下のように再帰的な?:の利用が許される。
例:
読み易くするために、行継続line-continuationを利用することが推奨される:
':' の前には必ずスペースを入れること。そうでないと "a:1" のような変数の使用と
間違えてしまう可能性がある。
Falsy 演算子
これは "null合体演算子" としても知られている、しかし複雑すぎるため、単に Falsy
演算子と呼ぶことにした。
'??' の前の式が評価される。truthy と評価された場合、これが結果として使われ
る。
そうでないなら、'??' の後の式が評価され、結果として使われる。これがもっとも便
利なのは、ゼロや空な結果になりうる式でデフォルト値を持つ場合:
これは同等だが、同じではない:
expr2 and expr3 expr2 expr3
---------------
expr3 || expr3 .. 論理和 expr-barbar
expr4 && expr4 .. 論理積 expr-&&
演算子 "||" と "&&" は左右に一つずつ引数を取る。引数は数値に変換される。結果は:
入力 出力
n1 n2 n1 || n2 n1 && n2
FALSE FALSE FALSE FALSE
FALSE TRUE TRUE FALSE
TRUE FALSE TRUE FALSE
TRUE TRUE TRUE TRUE
演算子は続けて書く事ができる。例:
Note "&&" は "||" よりも高い優先順位を持っている。これは次の事を意味する:
結果が確定した時点で残りの式は省略され、解釈されない。これはC言語で行われるこ
とに似ている。例:
これはaがTRUEであるため、変数bが宣言されていなくても有効であり、結果は絶対
にTRUEである。次のも同様に:
これも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 expr-isnot expr-is# expr-isnot#
expr-is? expr-isnot?
'ignorecase'次第 大小文字考慮 大小文字無視
等しい == ==# ==?
等しくない != !=# !=?
より大きい > ># >?
より大きいか等しい >= >=# >=?
より小さい < <# <?
より小さいか等しい <= <=# <=?
正規表現マッチ =~ =~# =~?
正規表現非マッチ !~ !~# !~?
同一のインスタンス is is# is?
異なるインスタンス isnot isnot# isnot?
例:
"abc" ==# "Abc" 0と評価される
"abc" ==? "Abc" 1と評価される
"abc" == "Abc" 'ignorecase' が設定されていれば1と、でなければ0と評価
E691 E692
リストListはリストとだけ比較可能で、==系、!=系、is、isnotのみ利用できる。
これらはそれぞれのリストの値を再帰的に比較する。大文字小文字無視にすると要素を
比較するときに大文字小文字を無視する。
E735 E736
辞書Dictionaryは辞書とだけ比較可能で、==系、!=系、is、isnotのみ利用できる。
これらは辞書のキー/値を再帰的に比較する。大文字小文字無視にすると要素を
比較するときに大文字小文字を無視する。
E694
FuncrefはFuncrefとだけ比較可能で、"equal", "not equal", "is", "isnot" のみ
利用できる。大文字小文字は常に区別される。引数や辞書が(部分適用に)バインドされ
ているかどうかも重要である。辞書も同値(あるいは "is" の場合は同一)でなければな
らず、引数も同値(あるいは同一)でなければならない。
関数参照が同じ関数を指しているのかを、バインドされた辞書や引数を無視して比較し
たい場合は、get() を使用して関数名を取得すればよい:
リスト List 、辞書 Dictionary または Blob に対して "is" や "isnot" を使
うと、それらの式が同じリスト、辞書 または Blob のインスタンスを参照している
か判定される。リストのコピーと元のリストは異なると判定される。リスト、辞書また
は Blob 以外に対して "is" は "equal" と同じで、"isnot" は "not equal" と同じ
である。ただし "is"、"isnot" は型が異なると値が等しくない点が "==" とは異なる。
文字列と数値を比較した場合、文字列が数値に変換され、数値として比較される。これ
は以下のようになることを意味する:
文字列同士を比較した場合、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 足し算、リスト List または Blob の連結 expr-+
expr6 - expr6 引き算 expr--
expr6 . expr6 文字列の連結 expr-.
expr6 .. expr6 文字列の連結 expr-..
リストに対しては "+" のみ可能で、expr6は両方ともリストでなければならない。結果
は2つのリストを連結した新しいリスト。
文字列の連結には ".." が推奨される。"." はあいまいで、Dict メンバーアクセス
と浮動小数点数にも使用される。
vimscript-version が2以上の場合は "." を使用することはできない。
expr7 * expr7 掛け算 expr-star
expr7 / expr7 割り算 expr-/
expr7 % expr7 剰余(割った余り) expr-%
"." と ".." を除く全ての演算子は自動的に文字列を数値に変換する。
ビット演算については and(), or(), xor() を参照。
"+" と "." の違いに注意:
"123" + "456" = 579
"123" . "456" = "123456"
'.' は '+' と '-' と等しい優先順位を持つので、次の式は:
れ、それと浮動小数点数 90.0 との和になる。しかし次の式は:
小数点数と文字列を結合することになるからである。
数値をゼロで割った結果は、被除数によって次のようになる:
0 / 0 = -0x80000000 (浮動小数点数の NaN のようなもの)
>0 / 0 = 0x7fffffff (正の無限大のようなもの)
<0 / 0 = -0x7fffffff (負の無限大のようなもの)
{訳注: >0 は正の数、<0 は負の数の意味}
(Vim 7.2 以前では常に 0x7fffffff だった)
64ビット数値が有効化されている場合は:
0 / 0 = -0x8000000000000000 (浮動小数点数の NaN のようなもの)
>0 / 0 = 0x7fffffffffffffff (正の無限大のようなもの)
<0 / 0 = -0x7fffffffffffffff (負の無限大のようなもの)
'%' の右辺(法)が0の場合、結果は0になる。
これらは全てFuncrefには適用できない。
. と % は浮動小数点数には適用できない。 E804
expr7 expr7
-----
! expr7 論理否定 expr-!
- expr7 単項マイナス expr-unary--
+ expr7 単項プラス expr-unary-+
'!' 演算子ではTRUEはFALSEに、FALSEはTRUEになる。
'-' では数値の符号が反転される。
'+" では変化はない。Note: "++" は効果がない。
文字列はまず数値に変換される。
これら2つは繰り返したり混ぜたりできる。例:
!-1 == 0
!!8 == 1
--9 == 9
expr8 expr8
-----
この式は expr9、もしくは連続する以下の選択方式であり、どんな順番でもよい。
例として、これらはすべて可能である:
expr8[expr1].name
expr8.name[expr1]
expr8(expr1, ...)[expr1].name
expr8->(expr1, ...)[expr1]
評価は常に左から右に行われる。
expr8[expr1] 文字列またはリストの要素 expr-[] E111
E909 subscript
旧来の Vim script では:
expr8が数値か文字列ならば、この値は文字列 expr8 の第 expr1 番目のバイトからな
る1バイトの文字列となる。expr8は文字列 (数値の場合は自動で文字列に変換される)、
expr1は数として扱われる。マルチバイトのエンコーディングを認識しないため、代わ
りの方法は byteidx() を参照するか、split()を使って文字列を文字のリストに変
換すれば良い。例えばカーソルの下のバイトを得るには:
Vim9 script では:
expr8 が文字列ならば、この値は文字列 expr8 の第 expr1 番目の文字 (合成文字があ
る場合はそれらを全て含む) に相当する文字列となる。バイトインデックスの場合は
strpart() を使う。
インデックスが0の場合最初のバイトもしくは文字になる。注意: テキストの列番号は0
始まりである!
文字列の長さよりも大きなインデックスが指定された場合、結果は空文字列になる。負
数のインデックスを指定すると、結果は常に空文字列になる(後方互換性のため)。
最後のバイトもしくは文字を得るには[-1:]を使うこと。
Vim9 script では負数のインデックスはリストと同様に使用され、終端からのカウント
になる。
expr8がリストListならばインデックスexpr1の要素が返る。取りうるインデックスの
値についてはlist-indexを参照。インデックスが範囲を超えている場合はエラーとな
る。例:
一般的には、インデックスが正でリストの長さ以上または、負でリストの長さ×-1より
小さいときエラーとなる。
expr8[expr1a : expr1b] 部分文字列または部分リスト expr-[:]
expr8が文字列ならば、バイトか文字数でexpr1aからexpr1bまでの部分文字列となる
(両端を含む)。expr8は文字列として扱われ、expr1aとexpr1bは数値として扱われる。
旧来の Vim script ではインデックスはバイトインデックスとなる。マルチバイトのエ
ンコーディングは認識しない。マルチバイト文字列のインデックスを計算する方法につ
いては byteidx() を参照。expr8が数値ならば最初に文字列に変換される。
Vim9 script ではインデックスは文字インデックスであり、合成文字を含む {訳注: 1
個の基底文字とその任意個の合成文字をまとめて 1 としてカウントする}。バイトイン
デックスを使用するには strpart() を使用する。合成文字を含まない文字インデッ
クスを使用するには strcharpart() を使用する。
インデックスの expr1b の項目は含まれ、内包的である。排他的なインデックスは
slice() 関数を使う。
expr1aが省略されたときは0となる。expr1bが省略されたときは文字列の長さ-1となる。
負数のインデックスを使うことによって文字列の末尾から取り出すことができる。-1は
最後の文字、-2は最後から2文字目…を表す。
インデックスがその文字の範囲外に出てしまったときは、その文字は省かれる。expr1b
がexpr1aより小さいときは空文字列となる。
例:
slice
expr8が List ならば、インデックスexpr1aとexpr1bの間の要素からなる新しい List
となる。すぐ上で説明した文字列の場合と同様である。部分リストsublistも参照の
こと。例:
expr8が Blob ならば、インデックスexpr1aとexpr1bのバイト数を含む新しい Blob
となる。
例:
Funcrefに対してexpr8[expr1]やexpr8[expr1a : expr1b]を使うとエラーになる。
部分リストでスコープと変数に続くコロンとの混乱に注意してください:
expr8.name 辞書Dictionaryの要素 expr-entry
expr8が辞書Dictionaryのとき、ドットをつけるとその後に書かれた名前が辞書の
キーと見なされる。例: expr8[name]。
名前は変数名と同じようにアルファベットと数字だけから構成されなければならない
が、数字で始まってもよい。波括弧は使えない。
ドットの前後に空白があってはならない。
例:
Note ドットは文字列連結にも使われる。混乱を避けるために、文字列連結のドットの
周りには必ずスペースを入れること。
expr8(expr1, ...) Funcref 関数呼び出し
expr8がFuncref型の変数のとき、その参照する関数を呼び出す。
expr8->name([args]) メソッド呼び出し method ->
expr8->{lambda}([args])
E276
グローバル関数としても利用可能なメソッドの場合、これは次と同じである:
これにより、あるメソッドが返す値を次のメソッドに渡して連鎖させることができる:
ラムダの使用例:
-> を使用する場合 expr7 演算子が最初に適用される。したがって:
E274
"->name(" には空白を含めることはできない。"->" の前と "(" の後に空白を含めるこ
とができる。したがって、次のように行を分割できる:
ラムダ形式を使用する場合、} と ( の間に空白があってはならない。
expr9
数
------
number 数定数 expr-number
0x hex-number 0o octal-number binary-number
10進数、16進数(0xか0Xで始まる)、2進数(0bか0Bで始まる)、もしくは8進数(0か0oか0O
で始まる)の数定数。
floating-point-format
浮動小数点数は次の2つの形式で書ける:
[-+]{N}.{M}
[-+]{N}.{M}[eE][-+]{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. {M} が空
1e40 .{M} がない
論理的根拠:
浮動小数点数が導入される前は、123.456 と書くと 123 と 456 の2つの数値と解釈
され、それらが文字列に変換されて結合されて "123456" という文字列になった。
これは無意味であり、Vim script 内で意図的に使われているものが見つからなかった
ので、浮動小数点数の普通の表記法を用いるため、この後方非互換性は許容された。
float-pi float-e
コピー&ペーストしておくのに便利な値:
使用することもできる:
floating-point-precision
浮動小数点数の精度と範囲は、Vim とリンクしたライブラリの "double" の意味によ
る。実行時にこれを変更することはできない。
浮動小数点数 Float は printf("%g", f) とするのと同様に、小数点以下6桁まで表
示される。表示する桁数は printf() を使えば変えられる。例:
文字列 string String 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 と同じだが8桁までの16進数が使える
\b バックスペース <BS>
\e エスケープ <Esc>
\f フォームフィード <FF>
\n 改行 <NL>
\r 改行(キャリッジリターン) <CR>
\t タブ <Tab>
\\ 円記号(バックスラッシュ)
\" ダブルクォート
\<xxx> "xxx" という名の特殊キー。例 "\<C-W>" は CTRL-W。これはマップで使うた
めのものであり、0x80 バイトはエスケープされる。
ダブルクォート文字を使う場合はエスケープしなければならない: "<M-\">"
utf-8 文字を得るためには <Char-xxxx> を使わずに、上述の \uxxxx を使う
こと。
\<*xxx> \<xxx> と同じだが、文字に修飾子を含むのではなくそれを前に付加する。
たとえば、"\<C-w>" は 0x17 の1文字だが、"\<*C-w>" は 4バイトになる:
3は CTRL 修飾子で、その後に文字の "W"。
Note "\xff" は値255の1バイトとなる。これはエンコーディングによっては無効な値か
もしれない。現在の 'encoding' の値に応じた文字255を得るには "\u00ff" を使う。
Note "\000" と "\x00" は強制的に文字列の終端として扱われる。
blobリテラル blob-literal E973
------------
0zまたは0Zで始まる任意のバイト数の16進数。
シーケンスは偶数個の16進数文字でなければならない。例:
:let b = 0zFF00ED015DAF
リテラル文字列 literal-string E115
--------------
'string' 文字列定数 expr-'
Note シングルクォートが使われていることに注意。
この文字列は文字通りに扱われる。バックスラッシュは取り除かれないし、また特別な
意味を持ったりもしない。唯一の例外は、2つのシングルクォートで1つのシングル
クォートになることである。
シングルクォートの文字列は、バックスラッシュを2重にしなくてよいため、正規表現
パターンを表すのに便利である。以下の2つのコマンドは同値である:
オプション expr-option E112 E113
---------
&option オプション変数、ローカルなものが優先
&g:option グローバルオプション変数
&l:option ローカルオプション変数
例:
ここにはあらゆるオプション名を使うことができる。optionsを参照。ローカル変数
を使おうとして、実際にはバッファローカルもウィンドウローカルも存在しない場合に
は、グローバル変数が利用される。
レジスタ expr-register @r
--------
@r レジスタ 'r' の値
名前付きレジスタの中身を1つの文字列として得る。必要なところには改行文字が挿入
されている。無名レジスタの中身を取得するには@"か@@を使う。利用可能なレジスタの
説明についてはregistersを参照。
レジスタ '=' を使うと、式の値でなく式そのものを得る。それを評価するには
eval()を使う。
入れ子 expr-nesting E110
-------
(expr1) 式の入れ子
環境変数 expr-env
--------
$VAR 環境変数
環境変数の文字列。定義されていない環境変数を指定した場合、結果は空文字列。
getenv() と setenv() 関数も使用でき、英数字以外の名前を持つ環境変数に対し
て機能する。
environ() 関数は、すべての環境変数を含む辞書を取得するために使用できる。
expr-env-expand
Note $VARを直接使用した場合とexpand("$VAR")を使用した場合では、動作に違いがあ
ることに注意。直接使用した場合には、現在のVimのセッション中で既知の値に展開さ
れるだけである。expand()を使用した場合、まず最初にVimのセッション中で既知の値
に展開される。それが失敗した場合、変数の展開にシェルが使用されることになる。こ
れは遅くはなるが、シェルの知りうる全ての変数を展開することができる。例:
のシェルがそれをサポートしているなら)
内部変数 expr-variable
--------
variable 内部変数
以下のinternal-variablesを参照。
関数呼出 expr-function E116 E118 E119 E120
--------
function(expr1, ...) 関数呼出
以下のfunctionsを参照。
ラムダ式 expr-lambda lambda
--------
{args -> expr1} ラムダ式
ラムダ式は、expr1 を評価した結果を返す新しい無名関数を作成する。ラムダ式は以
下の点がユーザー定義関数user-functionsと異なる:
1. ラムダ式の本体は単一の式expr1であり、Exコマンド列ではない。
2. 引数に前置詞 "a:" を使用しない。例:
引数は任意である。例:
Note Vim9 script では別の書式のラムダ式を使う: vim9-lambda。
closure
ラムダ式は外側のスコープの変数と引数にアクセスできる。これはよくクロージャと呼
ばれる。以下の例ではラムダの中で "i" と "a:arg" が使われているが、これらは関数
のスコープに既に存在する。これらは関数から抜けても有効であり続ける:
Note: これが正しく機能するためには、ラムダが定義される前の外側のスコープ内にそ
れらの変数が存在していなければならない。:func-closureも参照。
ラムダとクロージャのサポートは以下のように判定できる:
sort(), map(), filter()とともにラムダ式を使う例:
ラムダ式は、チャネル、ジョブ、タイマーを使う際にも有用である:
Handler called
Handler called
Note クロージャが自身の依存するコンテキストから参照されている場合、メモリが使
われたままになり解放されない可能性がある:
クロージャを参照している。この循環の結果解放されることのないメモリになる。
推奨: このようなことはしないこと。
Exコマンドを実行するためにどのように execute() を使っているかに注目せよ。醜い
が。
Vim9 script ではコマンドブロックが使える。inline-function を参照。
ラムダ式は '<lambda>42' のような内部名を持っている。もしラムダ式でエラーが発生
した場合には、以下のコマンドでどのラムダ式でエラーが起きたかを調べることができ
る:
==============================================================================
3. 内部変数 internal-variables E461
内部変数の名前には文字と、数字とアンダーバー('_')を使うことができる。しかし数
字で始めることはできない。波括弧を使うこともできる。
詳細はcurly-braces-namesを参照。
内部変数は ":let" コマンドで作成される :let。":unlet" コマンドで明示的に内部
変数を破棄することができる :unlet。内部変数に使われてない名前か、既に破棄さ
れた内部変数を使うとエラーとなる。
variable-scope
変数には幾つもの名前空間が存在する。実際にどれが利用されるかは、どのような前置
子が使われたかで決まる:
(無し) 関数の中では関数ローカル、それ以外ではグローバル
buffer-variable b: 現在のバッファにローカル
window-variable w: 現在のウィンドウにローカル
tabpage-variable t: 現在のタブページにローカル
global-variable g: グローバル
local-variable l: 関数にローカル
script-variable s: :sourceされたVim scriptにローカル
function-argument a: 関数の引数(関数内のみ)
vim-variable v: グローバル、Vimがあらかじめ定義
これらのスコープそのものに辞書を通じてアクセスできる。例えば、全てのスクリプト
ローカル変数を削除するには次のようにする:
Note: Vim9 script ではこれとは違いがある、vim9-scopes を参照。
buffer-variable b:var b:
"b:" で始まる変数名は、カレントバッファに局所的な変数を意味する。このように一
つ一つのバッファ毎に、変数 "b:foo" を別々に使用することができる。この種の変数
はバッファが掃除(wipe out)された時や、":bdelete" で削除された時に一緒に削除さ
れる。
1つのバッファローカル変数が定義済:
b:changedtick changetick
b:changedtick 現在のバッファに対する総変更の回数。変更を行うたびに増加する。
これには一回のアンドゥ操作もカウントされる。バッファ書き込み時
に 'modified' をリセットすることもカウントされる。
この変数はバッファに変更が行われた際にだけアクションを起こした
い時に利用できる。例:
window-variable w:var w:
"w:" で始まる変数名は、カレントウィンドウにローカルな変数を意味する。これはウィ
ンドウを閉じるときに破棄される。
tabpage-variable t:var t:
"t:" で始まる変数名は、カレントタブページにローカルな変数を意味する。これはタ
ブページを閉じるときに破棄される。{+windows 機能つきでコンパイルしたときのみ
利用可能}
global-variable g:var g:
関数の中からグローバル変数へアクセスするには、"g:" を付けた名前を使用する。こ
れが省略された場合は関数ローカルな変数にアクセスする。ただし "g:" 自体は、関数
の外でも使うことができる。
local-variable l:var l:
関数の中からそのローカル変数にアクセスするには何も前置しなければ良い。明示的
に "l:" を付けることも可能である。ただし "l:" をつけないと予約されている変数名
と衝突してしまうことがある。例: "count" とすると "v:count" を参照してしまう。
"l:count" とすればローカル変数countを参照できる。
script-variable s:var
Vim script 内では "s:" で始まる変数名を使うことができる。これはスクリプトに
ついてローカルであり、スクリプトの外部からはアクセスできない。
スクリプト変数は次の場所で使える:
- そのスクリプトをsourceしている間に実行されるコマンド
- そのスクリプト内で定義される関数
- そのスクリプト内で定義される自動コマンド
- そのスクリプト内で定義される関数や自動コマンドで定義される関数や自動コマンド
(再帰的)
- そのスクリプト内で定義されるユーザー定義コマンド
次の場面では使えない:
- そのスクリプトからsourceされる他のスクリプト
- マッピング
- メニュー
- など。
グローバル変数との衝突を避けるにはスクリプト変数を使う。
次の例を参照:
ここで他のスクリプトから "Tick" を実行してみると、そのスクリプト内の変数
"s:counter" は変化せず、"Tick" が定義されたスクリプト内の "s:counter" だけが変
化する。
これと同じことをするもう1つの例:
関数呼び出しやユーザー定義コマンドを実行するとき、スクリプト変数のコンテキスト
はその関数、コマンドが定義されたスクリプトとなる。
関数の中で関数を定義した場合、スクリプト変数も共有される。例:
このStartCounting()を呼ぶと、カウントアップかカウントダウンのどちらかを行う関
数MyCounter()を定義する。StartCounting()がどこで呼ばれたかに関係なく、
MyCounter()の中では変数s:counterにアクセスできる。
同じスクリプトが再度読み込まれた場合、同一のスクリプト変数が使われる。スクリプ
ト変数はVimが終了するまで存続する。以下の例はカウンタを保持する:
Note これはつまり、ファイルタイププラグインはバッファごとにスクリプト変数を1セッ
ト持つのではないということを意味する。そのような目的にはバッファローカル変数
b:varを使うこと。
Vimの定義済変数 vim-variable v:var v:
E963
一部の変数はユーザーが設定できるが、型を変更することはできない。
v:argv argv-variable
v:argv Vimの起動に使用したコマンドライン引数。これは文字列のリストで
ある。最初の項目はVimコマンドである。
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行に収まるビジュアル領域の上
にあるときはその選択領域となる。<cexpr> も参照。
オプション 'balloonexpr' を評価している最中のみ有効。
v:beval_winnr beval_winnr-variable
v:beval_winnr マウスポインタがあるウィンドウの番号。オプション 'balloonexpr'
を評価している最中のみ有効。1番目のウィンドウの番号はゼロであ
る(他の場所でのウィンドウ番号と異なっている)。
v:beval_winid beval_winid-variable
v:beval_winid マウスポインタがあるウィンドウのウィンドウID window-ID。
それ以外は v:beval_winnr と同様。
v:char char-variable
v:char 'formatexpr' を評価しているときの引数。また、短縮入力
:map-<expr> で <expr> を指定しているとき、タイプされた文字を
保持する。
これは InsertCharPre と InsertEnter イベントでも使われる。
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:collate collate-variable
v:collate 現在のロケール設定での実行環境の照合順序。これは Vim script が
現在のロケールのエンコーディングを検知するのを許可する。技術的
説明: LC_COLLATE の値となる。ロケールを使用していない時の値は
"C" となる。この変数は直接は設定できなく、:language コマンド
を使う。
multi-lang を参照。
v:completed_item completed_item-variable
v:completed_item
最も最近補完された単語が含まれたcomplete-itemsのDictionary
がCompleteDoneイベント後に設定される。補完に失敗した時、その
Dictionaryは空である。
v:count count-variable
v:count 最後に実行されたノーマルモードコマンドに渡されたカウント数。
マッピングの前のカウントを取得するのに使用できる。読出し専用。
使用例:
囲指定を削除するために必要となる。
"3d2w" のようにカウントが2個指定された場合、その数が掛けられる。
よって "d6w" となる。
オプション 'formatexpr' を評価するためにも使われる。
scriptversion が 3以降でなければ、"count" も、以前の版のVim
との互換性の為に動作する。
v:count1 count1-variable
v:count1 "v:count" と同じだが、カウントが指定されなかった時の既定値が 1
となる。
v:ctype ctype-variable
v:ctype 文字に関する実行環境の現在のロケール設定。これを使えばVim
script内で現在のロケール設定に対応できるようになる。技術的な詳
細: LC_CTYPEに等しい。ロケールを使用していないときは "C"になる。
この変数を設定するには:languageコマンドを使うこと。直接設定
することはできない。
multi-langを参照。
v:dying dying-variable
v:dying 通常時は0。致命的なシグナルを受信したとき1が代入される。複数
のシグナルを受信すると値が増加していく。自動コマンド内でVimが
正常に終了するかチェックするために使える。{Unix でのみ動作}
例:
Note: v:dying が 1 のときに別の致命的なシグナルを受信した場合
は VimLeave 自動コマンドは実行されない。
v:exiting exiting-variable
v:exiting Vim の終了コード。通常は0、何か問題があった時は非0。
VimLeavePre と VimLeave の自動コマンドが実行される前は値が
v:null。:q、:x、:cquit を参照。
例:
v:echospace echospace-variable
v:echospace hit-enter-prompt を引き起こす前の最後の画面行の :echo メッ
セージに使用できる画面セルの数。'showcmd', 'ruler' および
'columns' に依存する。最後の行の上に全幅の行があるかどうかを
'cmdheight' で確認する必要がある。
v:errmsg errmsg-variable
v:errmsg 最後に表示されたエラーメッセージ。この変数は代入することが許
されている。例:
との互換性の為に動作する。
v:errors errors-variable assert-return
v:errors assert_true()のような、テスト用関数によって見つかったエラー。
これは文字列のリストである。
テスト用関数はテストに失敗した時にエラーを末尾に追加する。
戻り値が示すもの: 要素が v:errors に追加された場合 1 が返る。
それ以外では 0 が返る。
古い結果を削除する方法はこの変数を空にする:
(次に実行される時に)テスト用関数によって空のリストが設定(上書
き)される。
v:event event-variable
v:event 現在の autocommand に関する情報を含む辞書。辞書に何が入るか
は個々のイベントを参照。
この辞書は autocommand が終了したときに空にされる。独立した
コピーの取得方法については dict-identity を参照。イベントト
リガー後の情報を保持したいのであれば deepcopy() を使うこと。
例:
v:exception exception-variable
v:exception 最も直近に捕捉され、まだ終了していない例外の値。
v:throwpointとthrow-variablesを参照。
例:
v:false false-variable
v:false 数値0。JSONでは "false" として使われる。json_encode()を参照。
文字列として使われた時、これは "v:false" として評価される。
これは eval() がその文字列をパースしたときに、元の値に戻せるよ
うにするためである。読出し専用。
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 fname-variable
v:fname 'includeexpr' の評価中: 検知したファイル名。それ以外のときは空。
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:hlsearch hlsearch-variable
v:hlsearch 検索による強調表示がオンになっているかどうかを示す変数。
設定は +extra_search 機能が必要な 'hlsearch' が有効になって
いる時のみ意味をなす。この変数を0に設定することは、
:nohlsearchコマンドを実行することと同様に働き、1に設定するこ
とは以下と同様に働く
function-search-undo
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 script内で現在のロケール設定に対応できるようになる。
技術的な詳細: LC_MESSAGESに等しい。この値はシステムに依存する。
この変数を設定するには:languageコマンドを使うこと。直接設定
することはできない。
文字エンコーディングに使うのと違う言語でメッセージを表示させた
い場合はv:ctypeと異なる値でもよい。multi-langを参照。
v:lc_time lc_time-variable
v:lc_time 時刻のメッセージに関する実行環境の現在のロケール設定。これを使
えばVim script内で現在のロケール設定に対応できるようになる。
技術的な詳細: LC_TIMEに等しい。この値はシステムに依存する。こ
の変数を設定するには:languageコマンドを使うこと。直接設定す
ることはできない。
v:lnum lnum-variable
v:lnum 'foldexpr' fold-expr と 'indentexpr' に使うための行番号。ま
た 'guitablabel' と 'guitabtooltip' の文脈ではタブページ番号に
なる。これらの式のどれかを評価しているときのみ有効。サンドボッ
クス sandbox の中では読出し専用。
v:mouse_win mouse_win-variable
v:mouse_win getchar()でマウスクリックイベントが発生したときのウィンドウ
番号。winnr()と同じく番号は1から始まる。マウスがクリックされ
なかったときは0となる。
v:mouse_winid mouse_winid-variable
v:mouse_winid getchar()でマウスクリックイベントが発生したときのウィンドウ
ID。マウスがクリックされていないときは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:none none-variable None
v:none 空の文字列。JSONでは空の要素として使われる。
json_encode()を参照。
これは関数の引数のデフォルト値に使うこともできる、
none-function_argument を参照。
数値として使われた時、これは 0 として評価される。
文字列として使われた時、これは "v:none" として評価される。
これは eval() がその文字列をパースしたときに、元の値に戻せるよ
うにするためである。読出し専用。
v:null null-variable
v:null 空の文字列。JSONでは "null" として使われる。json_encode()を
参照。数値として使われた時、これは 0 として評価される。
文字列として使われた時、これは "v:null" として評価される。
これは eval() がその文字列をパースしたときに、元の値に戻せるよ
うにするためである。読出し専用。
v:numbermax numbermax-variable
v:numbermax 数値の最大値。
v:numbermin numbermin-variable
v:numbermin 数値の最小値(負数)。
v:numbersize numbersize-variable
v:numbersize 数値のビット数。これは通常64で、システムによっては32になること
がある。
v:oldfiles oldfiles-variable
v:oldfiles 起動時に viminfo から読み込まれたファイルの名前のリスト。
これらはマークを記憶しているファイルである。リストの長さの上限
はオプション 'viminfo' の引数 ' によって決まる(既定では 100)。
viminfo ファイルが使われていない時、リストは空となる。
:oldfiles と c_#< を参照。
このリストは変更可能であるが、後で viminfo ファイルに書き込ま
れるものには影響しない。文字列以外の値を使うと問題を引き起こす
だろう。
{+viminfo 機能つきでコンパイルされたときのみ有効}
v:option_new
v:option_new オプションに設定された新しい値。自動コマンド OptionSet を実
行している間のみ有効。
v:option_old
v:option_old オプションの以前の値。自動コマンド OptionSet を実行している
間のみ有効。設定に使用されたコマンドおよびオプションの種類に
よって、ローカルの以前の値またはグローバルの以前の値のどちらか
になる。
v:option_oldlocal
v:option_oldlocal
オプションの以前のローカル値。OptionSet 自動コマンドの実行中
に有効である。
v:option_oldglobal
v:option_oldglobal
オプションの以前のグローバル値。OptionSet 自動コマンドの実行
中に有効である。
v:option_type
v:option_type set コマンドのスコープ。自動コマンド OptionSet を実行している
間のみ有効。"global" もしくは "local" のどちらかとなる。
v:option_command
v:option_command
オプションを設定するために使われたコマンド。OptionSet 自動コ
マンドの実行中に有効である。
値 オプションは以下によって設定された
"setlocal" :setlocal または ":let l:xxx"
"setglobal" :setglobal または ":let g:xxx"
"set" :set または :let
"modeline" modeline
v:operator operator-variable
v:operator ノーマルモードにおいて最後に実行したオペレータコマンド。基本的
に1文字である。例外は <g> や <z> で始まるコマンドで、その場合
は2文字になる。v:prevcount と v:register と組み合わせて使う
とよい。オペレータ待機モードをキャンセルして、それからオペレー
タを使いたいときに便利である。例:
る。よって空になると期待してはいけない。
:delete, :yank などの Ex コマンドに対しては v:operator は
セットされない。
読出し専用。
v:prevcount prevcount-variable
v:prevcount 最後の1つ前のノーマルモードコマンドに与えられたカウントの値。
前のコマンドのv:countの値である。ビジュアルモードやオペレータ
待機モードをキャンセルし、その後にカウントを使う場合に便利であ
る。例:
v:profiling profiling-variable
v:profiling 通常時は0。":profile start" を実行すると1が代入される。
profilingを参照。
v:progname progname-variable
v:progname Vimを起動したときのプログラム名(パスは除かれる)。view、
evim などの名前やシンボリックリンクなどで起動した場合に特別な
初期化を行うのに便利。
読出し専用。
v:progpath progpath-variable
v:progpath Vim を起動したときのコマンド (パスを含む)。--remote-expr で
Vim サーバーにメッセージを送信するときに便利。
Vimが呼び出されたときのコマンドが含まれている。シェルに渡され
ると、現在のVimと同じVim実行可能ファイルが実行される($PATHが変
更されない場合)。 --remote-expr を使用してVimサーバーにメッ
セージを送信する場合に便利である。
フルパスを得るには:
でも機能する。したがって、"./vim" を開始すると
"/home/user/path/to/vim/src/vim" という結果になる。
Linuxおよびその他のシステムでは、常にフルパスになる。Macでは単
に "vim" であり、前述の exepath() を使用してフルパスを取得する
必要がある。
MS-Windows では実行ファイルが "vim.exe" として呼び出されるかも
しれないが、".exe" は v:progpath には追加されない。
読出し専用。
v:register register-variable
v:register 現在のノーマルモードコマンドに適用されるレジスタの名前 (そのコ
マンドが実際にレジスタを使うかどうかには依らない)。または、現
在実行しているノーマルモードマッピング用のレジスタの名前 (レジ
スタを使うカスタムコマンドの中で使う)。レジスタが指定されなかっ
たときはデフォルトレジスタ '"' になる。'clipboard' に
"unnamed" か "unnamedplus" が含まれているときはデフォルトはそ
れぞれ '*' か '+' になる。
getreg() と setreg() も参照。
v:scrollstart scrollstart-variable
v:scrollstart 画面のスクロールの原因となったスクリプトや関数を説明する
文字列。空であるときのみ代入される。よってこの変数には最初の原
因だけが記録されている。原因がキーボードから入力されたコマンド
の場合は "Unknown" {訳注: 日本語メッセージの場合: "不明"} が代
入される。
スクリプトを実行したとき現れたhit-enterプロンプトの原因を探る
ために便利。
v:servername servername-variable
v:servername client-server-name で登録された結果。
読出し専用。
v:searchforward v:searchforward searchforward-variable
検索方向: 前方検索の後なら1、後方検索の後なら0。quote/ で示す
方法によって最終検索パターンを直接セットしたときは1(前方検索)
にリセットされる。
関数から戻るとき、この値は呼び出し前の値に復元される。
function-search-undo。
読み書き両用。
v:shell_error shell_error-variable
v:shell_error 最後に実行したシェルコマンドの結果。シェルコマンドの実行時に何
かエラーがあったならば、非零の値を取る。問題がなければ零になる。
これはシェルがエラーコードをVimに通知する時のみ働く。コマンドが
実行されなかった時には、値として-1が良く使われる。読出し専用。
例:
の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:t_TYPE v:t_bool t_bool-variable
v:t_bool 真偽値 Boolean 型の値。読出し専用。 参照: type()
v:t_channel t_channel-variable
v:t_channel チャネル Channel 型の値。読出し専用。 参照: type()
v:t_dict t_dict-variable
v:t_dict 辞書 Dictionary 型の値。読出し専用。 参照: type()
v:t_float t_float-variable
v:t_float 浮動小数点数 Float 型の値。読出し専用。 参照: type()
v:t_func t_func-variable
v:t_func Funcref 型の値。読出し専用。 参照: type()
v:t_job t_job-variable
v:t_job ジョブ Job 型の値。読出し専用。 参照: type()
v:t_list t_list-variable
v:t_list リスト List 型の値。読出し専用。 参照: type()
v:t_none t_none-variable
v:t_none 特殊値 None 型の値。読出し専用。 参照: type()
v:t_number t_number-variable
v:t_number 数値 Number 型の値。読出し専用。 参照: type()
v:t_string t_string-variable
v:t_string 文字列 String 型の値。読出し専用。 参照: type()
v:t_blob t_blob-variable
v:t_blob Blob 型の値。読出し専用。 参照: type()
v:termresponse termresponse-variable
v:termresponse termcapのエントリt_RVで端末から返されるエスケープシーケンス。
ESC [ または CSI で始まり、次に '>' または '?' が来て、途中数
字と ';' だけから構成され 'c' で終わるエスケープシーケンスを受
け取ったとき代入される。このオプションがセットされると自動コマ
ンドイベントTermResponseが発生し、端末からの応答に反応すること
ができる。
terminalprops() を使うことで Vim が端末をどのように認識した
かを知ることができる。
新しいxtermからの応答は次の形式である:
"<Esc>[> Pp ; Pv ; Pc c"。ここでPpは端末のタイプ: 0ならvt100、
1ならvt220。Pvはパッチレベル(パッチ95で導入されたため常に95以
上)。Pcは常に0。
{Vimが+termresponse機能付きでコンパイルされたときのみ有効}
v:termblinkresp
v:termblinkresp termcapのエントリ t_RC で端末から返されるエスケープシーケン
ス。端末カーソルが点滅しているかを調べるために使用される。
term_getcursor() で使用される。
v:termstyleresp
v:termstyleresp termcapのエントリ t_RS で端末から返されるエスケープシーケン
ス。カーソルの形状を調べるために使用される。term_getcursor()
で使用される。
v:termrbgresp
v:termrbgresp termcapのエントリ t_RS で端末から返されるエスケープシーケン
ス。端末の背景色を調べるために使用される。'background' を参照。
v:termrfgresp
v:termrfgresp termcapのエントリ t_RF で端末から返されるエスケープシーケン
ス。端末の文字色を調べるために使用される。
v:termu7resp
v:termu7resp termcapのエントリ t_u7 で端末から返されるエスケープシーケン
ス。曖昧な幅の文字に対して端末が何をするか調べるのに使われる。
'ambiwidth' を参照。
v:testing testing-variable
v:testing test_garbagecollect_now() を使う前に設定する必要がある。
また、これが設定されていると、特定のエラーメッセージが 2 秒間
表示されなくなる。(例: "'dictionary' option is empty")
v:this_session this_session-variable
v:this_session 最後にロードされたか、セーブされたセッションファイルの完全な
ファイル名。:mksessionを参照。この変数は代入することが許さ
れている。それ以前にセーブされたセッションがなければ、この変数
は空となる。
scriptversion が 3以降でなければ、"this_session" も、以前の
版のVimとの互換性の為に動作する。
v:throwpoint throwpoint-variable
v:throwpoint 最も直近に捕捉されてまだ終了していない例外が発生した位置。キー
ボードから入力されたコマンドは記録されていない。v:exception
とthrow-variablesも参照。
例:
v:true true-variable
v:true 数値1。JSONでは "true" として使われる。json_encode()を参照。
文字列として使われた時、これは "v:true" として評価される。
これは eval() がその文字列をパースしたときに、元の値に戻せるよ
うにするためである。読出し専用。
v:val val-variable
v:val リストListもしくは辞書Dictionaryの現在の要素の値。map()
とfilter()で使われる式を評価している最中のみ有効。読出し専
用。
v:version version-variable
v:version Vimのバージョン番号。メジャーバージョン番号は100倍され、マイ
ナーバージョン番号と足されている。Version 5.0は500。Version
5.1は501となる。読出し専用。scriptversion が 3以降でなけれ
ば、"version" も、以前の版のVimとの互換性の為に動作する。
特定のパッチが適用されているかを調べるにはhas()を使う。例:
が違えば番号は同じでもパッチの内容は全く異なっている。
v:versionlong versionlong-variable
v:versionlong v:versionと同じだが、最後の4桁にパッチレベルも含む。パッチ 123
を適用したバージョン 8.1 の値は 8010123 である。これは次のよう
に使用できる:
かない。これは、最近のパッチが古いバージョンに含まれていた場合
に起こる。例えば、セキュリティ修正のため。
パッチが実際に含まれていることを確認するためには has() 関数を
使用すること。
v:vim_did_enter vim_did_enter-variable
v:vim_did_enter ほとんどのスタートアップが完了するまでの間 0。VimEnter 自動
コマンドが実行される直前に 1 にセットされる。
v:warningmsg warningmsg-variable
v:warningmsg 最後に表示された警告メッセージ。この変数は代入することが許され
ている。
v:windowid windowid-variable
v:windowid X11 ベースの GUI を使っているとき、もしくは端末の Vim を使って
いて X サーバーに接続しているとき (-X) は、ウィンドウ ID が
セットされる。
MS-Windows の GUI を使っているときはウィンドウハンドルがセット
される。
それ以外では値はゼロである。
Note: Vim の中のウィンドウを扱うときは winnr() または
win_getid() を使う。window-ID を参照。
==============================================================================
4. 組み込み関数 functions
機能別に分類された一覧は function-list を参照のこと。
(関数名の上でCTRL-]を使うことで、詳細な説明へ飛ぶことができる。)
使用法 結果 説明
abs({expr}) 浮動小数点数または数値 {expr}の絶対値
acos({expr}) 浮動小数点数 {expr}のアークコサイン
add({list}, {item}) リスト {item}をリスト{list}に追加する
add({object}, {item}) リスト/Blob {item}を{object}に追加する
and({expr}, {expr}) 数値 ビット論理積
append({lnum}, {text}) 数値 {lnum}行目に{text}を付け加える
appendbufline({expr}, {lnum}, {text})
数値 バッファ{expr}の{lnum}行目に{text}を付
け加える
argc([{winid}]) 数値 引数内のファイルの数
argidx() 数値 引数リスト内の現在のインデックス
arglistid([{winnr} [, {tabnr}]])
数値 引数リストID
argv({nr} [, {winid}]) 文字列 引数の第{nr}番目
argv([-1, {winid}]) リスト 引数リスト
asin({expr}) 浮動小数点数 {expr}のアークサイン
assert_beeps({cmd}) 数値 {cmd} がビープ音を鳴らすことをテストす
る
assert_equal({exp}, {act} [, {msg}])
数値 {exp}と{act}が等しいかどうかテストする
assert_equalfile({fname-one}, {fname-two} [, {msg}])
数値 ファイルの内容が等しいことをテストする
assert_exception({error} [, {msg}])
数値 v:exceptionが{error}であるかテストする
assert_fails({cmd} [, {error} [, {msg} [, {lnum} [, {context}]]]])
数値 {cmd}が失敗するかどうかテストする
assert_false({actual} [, {msg}])
数値 {actual}がfalseかどうかテストする
assert_inrange({lower}, {upper}, {actual} [, {msg}])
数値 {actual}が範囲内にあるかテストする
assert_match({pat}, {text} [, {msg}]) 数値 {pat}が{text}にマッチするかテス
トする
assert_nobeep({cmd}) 数値 {cmd} がビープ音を鳴らさないことをテス
トする
assert_notequal({exp}, {act} [, {msg}]) 数値 {exp}が{act}と等しくないことを
テストする
assert_notmatch({pat}, {text} [, {msg}]) 数値 {pat}が{text}とマッチしないこと
をテストする
assert_report({msg}) 数値 テストの失敗を報告する
assert_true({actual} [, {msg}])
数値 {actual}がtrueかどうかテストする
atan({expr}) 浮動小数点数 {expr}のアークタンジェント
atan2({expr}, {expr}) 浮動小数点数 {expr1} / {expr2} のアークタン
ジェント
balloon_gettext() 文字列 バルーン内のカレントテキストを得る
balloon_show({expr}) なし {expr} をバルーン内に表示
balloon_split({msg}) リスト {msg} をバルーンで使われるように分割す
る
browse({save}, {title}, {initdir}, {default})
文字列 ファイル選択ダイアログを表示
browsedir({title}, {initdir}) 文字列 ディレクトリ選択ダイアログを表示
bufadd({name}) 数値 バッファリストにバッファを追加する
bufexists({expr}) 数値 バッファ{expr}が存在すればTRUE
buflisted({expr}) 数値 バッファ{expr}がリストにあるならTRUE
bufload({expr}) 数値 まだバッファ{expr}がロードされていなけ
ればバッファをロードする
bufloaded({expr}) 数値 バッファ{expr}がロード済みならTRUE
bufname([{expr}]) 文字列 バッファ{expr}の名前
bufnr([{expr} [, {create}]]) 数値 バッファ{expr}の番号
bufwinid({expr}) 数値 バッファ{expr}のウィンドウID
bufwinnr({nr}) 数値 バッファ{nr}のウィンドウ番号
byte2line({byte}) 数値 {byte}番目のバイトの行番号
byteidx({expr}, {nr}) 数値 {expr}の{nr}文字目のバイトインデックス
byteidxcomp({expr}, {nr}) 数値 {expr}の{nr}文字目のバイトインデックス
call({func}, {arglist} [, {dict}])
任意 引数{arglist}をつけて{func}を呼ぶ
ceil({expr}) 浮動小数点数 {expr} を切り上げる
ch_canread({handle}) 数値 何か読むものがあるかをチェックする
ch_close({handle}) なし {handle} を閉じる
ch_close_in({handle}) なし {handle} の入力を閉じる
ch_evalexpr({handle}, {expr} [, {options}])
任意 {handle} に {expr} を送り応答をJSONと
して評価する
ch_evalraw({handle}, {string} [, {options}])
任意 {handle} に {string} を送り応答を生の
文字列として評価する
ch_getbufnr({handle}, {what}) 数値 {handle}/{what} に割り当てられたバッ
ファ番号を得る
ch_getjob({channel}) ジョブ {channel} の Job を得る
ch_info({handle}) 文字列 チャネル {handle} に関する情報を得る
ch_log({msg} [, {handle}]) なし チャネルのログファイルに {msg} を書き
込む
ch_logfile({fname} [, {mode}]) なし チャネルの挙動ログ出力を開始する
ch_open({address} [, {options}])
チャネル {address} へのチャネルを開く
ch_read({handle} [, {options}]) 文字列 {handle} から読み込む
ch_readblob({handle} [, {options}])
Blob {handle} からBlobを読み込む
ch_readraw({handle} [, {options}])
文字列 {handle} から生の文字列を読み込む
ch_sendexpr({handle}, {expr} [, {options}])
任意 {expr}をJSONチャネル{handle}に送る
ch_sendraw({handle}, {expr} [, {options}])
任意 {expr}をrawチャネル{handle}に送る
ch_setoptions({handle}, {options})
なし {handle}にオプションを設定する
ch_status({handle} [, {options}])
文字列 チャネル{handle}の状態
changenr() 数値 現在の変更番号
char2nr({expr} [, {utf8}]) 数値 {expr}の先頭文字のASCII/UTF8コード
charclass({string}) 数値 {string} の文字クラス
charcol({expr}) 数値 カーソルかマークのカラム番号
charidx({string}, {idx} [, {countcc}])
数値 {string} のバイト {idx} の文字のイン
デックス
chdir({dir}) 文字列 現在の作業ディレクトリを変更する
cindent({lnum}) 数値 {lnum}行目のCインデント量
clearmatches([{win}]) なし 全マッチをクリアする
col({expr}) 数値 カーソルかマークのカラムバイトインデッ
クス
complete({startcol}, {matches}) なし 挿入モード補完を設定する
complete_add({expr}) 数値 補完候補を追加する
complete_check() 数値 補完中に押されたキーをチェックする
complete_info([{what}]) 辞書 現在の補完情報を取得
confirm({msg} [, {choices} [, {default} [, {type}]]])
数値 ユーザーへの選択肢と番号
copy({expr}) 任意 {expr}の浅いコピーを作る
cos({expr}) 浮動小数点数 {expr} の余弦(コサイン)
cosh({expr}) 浮動小数点数 {expr}のハイパボリックコサイン
count({comp}, {expr} [, {ic} [, {start}]])
数値 {comp}中に{expr}が何個現れるか数える
cscope_connection([{num} , {dbpath} [, {prepend}]])
数値 cscope接続の存在を判定する
cursor({lnum}, {col} [, {off}])
数値 カーソルを{lnum}, {col}, {off}へ移動
cursor({list}) 数値 カーソルを{list}の位置へ移動
debugbreak({pid}) 数値 デバッグするプロセスへ割り込む
deepcopy({expr} [, {noref}]) 任意 {expr}の完全なコピーを作る
delete({fname} [, {flags}]) 数値 ファイルやディレクトリ{fname}を消す
deletebufline({expr}, {first} [, {last}])
数値 バッファ {expr} から行を削除する
did_filetype() 数値 FileTypeのautocommandが実行されたか?
diff_filler({lnum}) 数値 差分モードで{lnum}に挿入された行
diff_hlID({lnum}, {col}) 数値 差分モードで{lnum}/{col}位置の強調
digraph_get({chars}) 文字列 {chars} のダイグラフ digraph を取得
digraph_getlist([{listall}]) リスト すべてのダイグラフ digraph を取得
digraph_set({chars}, {digraph}) 真偽値 ダイグラフ digraph の登録
digraph_setlist({digraphlist}) 真偽値 複数のダイグラフ digraph の登録
echoraw({expr}) なし {expr} をそのまま出力する
empty({expr}) 数値 {expr}が空ならTRUE
environ() 辞書 すべての環境変数を返す
escape({string}, {chars}) 文字列 {string}内の{chars}を '\' でエスケープ
eval({string}) 任意 {string}を評価し、値を得る
eventhandler() 数値 イベントハンドラの内側ならTRUE
executable({expr}) 数値 実行可能な{expr}が存在するなら1
execute({command}) 文字列 {command}を実行し、出力を得る
exepath({expr}) 文字列 コマンド {expr} のフルパス
exists({var}) 数値 変数{var}が存在したらTRUE
exp({expr}) 浮動小数点数 {expr}の指数
expand({expr} [, {nosuf} [, {list}]])
任意 {expr}内の特別なキーワードを展開
expandcmd({expr}) 文字列 :edit のように{expr}を展開
extend({expr1}, {expr2} [, {expr3}])
リスト/辞書 {expr1}に{expr2}を要素として挿入
extendnew({expr1}, {expr2} [, {expr3}])
リスト/辞書 extend() と同じだが新しいリスト/
辞書を作る
feedkeys({string} [, {mode}]) 数値 先行入力バッファにキーシーケンスを追加
filereadable({file}) 数値 {file}が読み込み可能ならTRUE
filewritable({file}) 数値 {file}が書き込み可能ならTRUE
filter({expr1}, {expr2}) リスト/辞書 {expr2}が0となる要素を{expr1}から
とり除く
finddir({name} [, {path} [, {count}]])
文字列 {path}からディレクトリ{name}を探す
findfile({name} [, {path} [, {count}]])
文字列 {path}からファイル{name}を探す
flatten({list} [, {maxdepth}]) リスト リスト {list} を {maxdepth} の深さまで
平坦化する
flattennew({list} [, {maxdepth}])
リスト {list} のコピーを平坦化する
float2nr({expr}) 数値 浮動小数点数 {expr} を数値に変換する
floor({expr}) 浮動小数点数 {expr} を切り捨てる
fmod({expr1}, {expr2}) 浮動小数点数 {expr1} / {expr2} の余り
fnameescape({fname}) 文字列 {fname} 内の特殊文字をエスケープする
fnamemodify({fname}, {mods}) 文字列 ファイル名を変更
foldclosed({lnum}) 数値 {lnum}の折り畳みの最初の行(閉じている
なら)
foldclosedend({lnum}) 数値 {lnum}の折り畳みの最後の行(閉じている
なら)
foldlevel({lnum}) 数値 {lnum}の折り畳みレベル
foldtext() 文字列 閉じた折り畳みに表示されている行
foldtextresult({lnum}) 文字列 {lnum}で閉じている折り畳みのテキスト
foreground() 数値 Vimウィンドウを前面に移動する
fullcommand({name}) 文字列 {name} から完全なコマンドを取得
funcref({name} [, {arglist}] [, {dict}])
Funcref 関数{name}への参照
function({name} [, {arglist}] [, {dict}])
Funcref 名前による関数{name}への参照
garbagecollect([{atexit}]) なし メモリを解放する。循環参照を断ち切る
get({list}, {idx} [, {def}]) 任意 {list}や{def}から要素{idx}を取得
get({dict}, {key} [, {def}]) 任意 {dict}や{def}から要素{key}を取得
get({func}, {what}) 任意 funcref/partial {func}のプロパティ取得
getbufinfo([{expr}]) リスト バッファに関する情報
getbufline({expr}, {lnum} [, {end}])
リスト バッファ{expr}の{lnum}から{end}行目
getbufvar({expr}, {varname} [, {def}])
任意 バッファ{expr}の変数 {varname}
getchangelist([{expr}]) リスト 変更リスト要素のリスト
getchar([expr]) 数値/文字列 ユーザーから1文字を取得する
getcharmod() 数値 修飾キーの状態を表す数値を取得
getcharpos({expr}) リスト カーソル、マーク、その他のカーソル位置
getcharsearch() 辞書 最後の文字検索を取得
getcharstr([expr]) 文字列 ユーザーから1文字を取得する
getcmdline() 文字列 現在のコマンドラインを取得
getcmdpos() 数値 コマンドラインのカーソル位置を取得
getcmdtype() 文字列 現在のコマンドラインの種類を取得
getcmdwintype() 文字列 現在のコマンドラインウィンドウの種類
getcompletion({pat}, {type} [, {filtered}])
リスト コマンドライン補完にマッチするリスト
getcurpos([{winnr}]) リスト カーソルの位置
getcursorcharpos([{winnr}]) リスト カーソルの位置の文字
getcwd([{winnr} [, {tabnr}]]) 文字列 現在の作業ディレクトリを取得
getenv({name}) 文字列 環境変数を返す
getfontname([{name}]) 文字列 使用しているフォントの名前
getfperm({fname}) 文字列 ファイル{fname}の許可属性を取得
getfsize({fname}) 数値 ファイル{fname}のバイト数を取得
getftime({fname}) 数値 ファイルの最終更新時間
getftype({fname}) 文字列 ファイル{fname}の種類の説明
getimstatus() 数値 IME がアクティブの場合は TRUE
getjumplist([{winnr} [, {tabnr}]])
リスト ジャンプリスト要素のリスト
getline({lnum}) 文字列 現在のバッファから行の内容を取得
getline({lnum}, {end}) リスト カレントバッファの{lnum}から{end}行目
getloclist({nr}) リスト locationリストの要素のリスト
getloclist({nr}, {what}) 辞書 指定したlocationリストのプロパティ
getmarklist([{expr}]) リスト グローバル/ローカルのマークのリスト
getmatches([{win}]) リスト 現在のマッチのリスト
getmousepos() 辞書 マウスの最新の位置
getpid() 数値 Vim のプロセス ID
getpos({expr}) リスト カーソル・マークなどの位置を取得
getqflist() リスト quickfixリストの要素のリスト
getqflist({what}) 辞書 指定したquickfixリストのプロパティ
getreg([{regname} [, 1 [, {list}]]])
文字列/リスト レジスタの中身を取得
getreginfo([{regname}]) 辞書 レジスタについての情報
getregtype([{regname}]) 文字列 レジスタの種類を取得
gettabinfo([{expr}]) リスト タブページのリスト
gettabvar({nr}, {varname} [, {def}])
任意 タブ{nr}の変数{varname}または{def}
gettabwinvar({tabnr}, {winnr}, {name} [, {def}])
任意 タブページ{tabnr}の{winnr}の{name}
gettagstack([{nr}]) 辞書 ウィンドウ{nr}のタグスタックを取得
gettext({text}) 文字列 {text} の翻訳の検索
getwininfo([{winid}]) リスト 各ウィンドウに関する情報のリスト
getwinpos([{timeout}]) リスト Vim ウィンドウのピクセルでの X および
Y 座標
getwinposx() 数値 Vim ウィンドウのピクセルでの X 座標
getwinposy() 数値 Vim ウィンドウのピクセルでの Y 座標
getwinvar({nr}, {varname} [, {def}])
文字列 ウィンドウ{nr}の変数{varname}
glob({expr} [, {nosuf} [, {list} [, {alllinks}]]])
任意 {expr}内のfile wildcardを展開
glob2regpat({expr}) 文字列 globパターンを検索パターンに変換
globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]])
文字列 {path}の全ディレクトリに対し
glob({expr})を行う
has({feature} [, {check}]) 数値 機能{feature}がサポートならばTRUE
has_key({dict}, {key}) 数値 {dict}が要素{key}を持つならTRUE
haslocaldir([{winnr} [, {tabnr}]])
数値 現在のウィンドウで :lcd か :tcd が
実行されたならTRUE
hasmapto({what} [, {mode} [, {abbr}]])
数値 {what}のマッピングが存在するならTRUE
histadd({history}, {item}) 数値 ヒストリに追加
histdel({history} [, {item}]) 数値 ヒストリからitemを削除
histget({history} [, {index}]) 文字列 ヒストリから{index}アイテムを取得
histnr({history}) 数値 ヒストリの数
hlID({name}) 数値 highlight group {name}のID
hlexists({name}) 数値 highlight group {name}が存在したらTRUE
hostname() 文字列 vimが動作しているマシンの名前
iconv({expr}, {from}, {to}) 文字列 {expr}のエンコーディングを変換する
indent({lnum}) 文字列 行{lnum}のインデントを取得
index({object}, {expr} [, {start} [, {ic}]])
数値 {object}中に{expr}が現れる位置
input({prompt} [, {text} [, {completion}]])
文字列 ユーザーからの入力を取得
inputdialog({prompt} [, {text} [, {completion}]])
文字列 input()と同様。GUIのダイアログを使用
inputlist({textlist}) 数値 ユーザーに選択肢から選ばせる
inputrestore() 数値 先行入力を復元する
inputsave() 数値 先行入力を保存し、クリアする
inputsecret({prompt} [, {text}]) 文字列 input()だがテキストを隠す
insert({object}, {item} [, {idx}])
リスト {object}に要素{item}を挿入 [{idx}の前]
interrupt() なし スクリプトの実行を中断する
invert({expr}) 数値 ビット反転
isdirectory({directory}) 数値 {directory}がディレクトリならばTRUE
isinf({expr}) 数値 {expr}が無限大の値(正または負)かどうか
を判定する
islocked({expr}) 数値 {expr}がロックされているならTRUE
isnan({expr}) 数値 {expr}がNaNならばTRUE
items({dict}) リスト {dict}のキーと値のペアを取得
job_getchannel({job}) チャネル {job}のチャネルハンドルを取得
job_info([{job}]) 辞書 {job}についての情報を取得
job_setoptions({job}, {options}) なし {job}のオプションを設定する
job_start({command} [, {options}])
ジョブ ジョブを開始する
job_status({job}) 文字列 {job}のステータスを取得する
job_stop({job} [, {how}]) 数値 {job}を停止する
join({list} [, {sep}]) 文字列 {list}の要素を連結して文字列にする
js_decode({string}) 任意 JS形式のJSONをデコードする
js_encode({expr}) 文字列 JS形式のJSONにエンコードする
json_decode({string}) 任意 JSONをデコードする
json_encode({expr}) 文字列 JSONにエンコードする
keys({dict}) リスト {dict}のキーを取得
len({expr}) 数値 {expr}の長さを取得
libcall({lib}, {func}, {arg}) 文字列 ライブラリ{lib}の関数{func}をコール
libcallnr({lib}, {func}, {arg}) 数値 上と同じ。ただし数値を返す
line({expr} [, {winid}]) 数値 行番号の取得
line2byte({lnum}) 数値 行{lnum}のバイトカウント
lispindent({lnum}) 数値 {lnum}行目のLispインデント量を取得
list2str({list} [, {utf8}]) 文字列 {list}の数値を文字列に変換する
listener_add({callback} [, {buf}])
数値 変更を監視するためのコールバックを追加
listener_flush([{buf}]) なし リスナーコールバックを呼び出す
listener_remove({id}) なし リスナーコールバックを削除する
localtime() 数値 現在時刻
log({expr}) 浮動小数点数 {expr}の自然対数(底e)
log10({expr}) 浮動小数点数 浮動小数点数 {expr} の 10 を底
とする対数
luaeval({expr} [, {expr}]) 任意 Lua の式を評価する
map({expr1}, {expr2}) リスト/辞書 {expr1}の各要素を{expr2}に変える
maparg({name} [, {mode} [, {abbr} [, {dict}]]])
文字列/辞書
モード{mode}でのマッピング{name}の値
mapcheck({name} [, {mode} [, {abbr}]])
文字列 {name}にマッチするマッピングを確認
mapnew({expr1}, {expr2}) リスト/辞書 map() と同様だが新規のリストか
辞書を作る
mapset({mode}, {abbr}, {dict}) なし maparg() の結果からマッピングを復元
する
match({expr}, {pat} [, {start} [, {count}]])
数値 {expr}内で{pat}がマッチする位置
matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]])
数値 {pattern} を {group} で強調表示する
matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
数値 位置を {group} で強調表示する
matcharg({nr}) リスト :matchの引数
matchdelete({id} [, {win}]) 数値 {id} で指定されるマッチを削除する
matchend({expr}, {pat} [, {start} [, {count}]])
数値 {expr}内で{pat}が終了する位置
matchfuzzy({list}, {str} [, {dict}])
リスト {list} 内について {str} でのファジー
マッチ
matchfuzzypos({list}, {str} [, {dict}])
リスト {list} 内について {str} でのファジー
マッチ
matchlist({expr}, {pat} [, {start} [, {count}]])
リスト {expr}内の{pat}のマッチと部分マッチ
matchstr({expr}, {pat} [, {start} [, {count}]])
文字列 {expr}内の{count}番目の{pat}のマッチ
matchstrpos({expr}, {pat} [, {start} [, {count}]])
リスト {expr}内の{count}番目の{pat}のマッチ
max({expr}) 数値 {expr}内の要素の最大値
menu_info({name} [, {mode}]) 辞書 メニューの項目情報を取得する
min({expr}) 数値 {expr}内の要素の最小値
mkdir({name} [, {path} [, {prot}]])
数値 ディレクトリ{name}を作成
mode([expr]) 文字列 現在の編集モード
mzeval({expr}) 任意 MzScheme の式を評価する
nextnonblank({lnum}) 数値 {lnum}行目以降で空行でない行の行番号
nr2char({expr} [, {utf8}]) 文字列 ASCII/UTF8コード{expr}で示される文字
or({expr}, {expr}) 数値 ビット論理和
pathshorten({expr} [, {len}]) 文字列 path内の短縮したディレクトリ名
perleval({expr}) 任意 Perlの式を評価する
popup_atcursor({what}, {options}) 数値 カーソルの近くにポップアップウィンドウ
を作成する
popup_beval({what}, {options}) 数値 'balloon_eval' のポップアップウィンド
ウを作成する
popup_clear() なし すべてのポップアップウィンドウを閉じる
popup_close({id} [, {result}]) なし {id} のポップアップウィンドウを閉じる
popup_create({id} [, {result}]) 数値 ポップアップウィンドウを作成する
popup_dialog({what}, {options}) 数値 ダイアログとしてポップアップウィンドウ
を作成する
popup_filter_menu({id}, {key}) 数値 ポップアップウィンドウのメニューのフィ
ルター
popup_filter_yesno({id}, {key}) 数値 ポップアップウィンドウのダイアログの
フィルター
popup_findinfo() 数値 情報ポップアップウィンドウの window ID
を取得する
popup_findpreview() 数値 プレビューポップアップウィンドウの
window ID を取得する
popup_getoptions({id}) 辞書 ポップアップウィンドウ {id} のオプショ
ンを取得する
popup_getpos({id}) 辞書 ポップアップウィンドウ {id} の位置を取
得する
popup_hide({id}) なし ポップアップメニュー {id} を隠す
popup_list() リスト 全ポップアップのウィンドウIDのリストを
取得する
popup_locate({row}, {col}) 数値 指定位置のポップアップのウィンドウIDを
取得する
popup_menu({what}, {options}) 数値 メニューとして使われるポップアップウィ
ンドウを作成する
popup_move({id}, {options}) なし ポップアップウィンドウ {id} の位置を
セットする
popup_notifications({id}, {options})
数値 ポップアップウィンドウの通知を作成する
popup_setoptions({id}, {options})
なし ポップアップウィンドウ {id} のオプショ
ンを設定する
popup_settext({id}, {text}) なし ポップアップウィンドウ {id} のテキスト
を設定する
popup_show({id}) なし ポップアップウィンドウ {id} を再表示す
る
pow({x}, {y}) 浮動小数点数 {x} の {y} 乗
prevnonblank({lnum}) 数値 {lnum}行目以前の空行でない行の行番号
printf({fmt}, {expr1}...) 文字列 文字列を組み立てる
prompt_getprompt({buf}) 文字列 プロンプト文字列の取得
prompt_setcallback({buf}, {expr}) なし プロンプトコールバック関数を設定する
prompt_setinterrupt({buf}, {text}) なし プロンプト割り込み関数を設定する
prompt_setprompt({buf}, {text}) なし プロンプトテキストを設定する
prop_add({lnum}, {col}, {props}) なし テキストプロパティを追加
prop_clear({lnum} [, {lnum-end} [, {props}]])
なし 全てのテキストプロパティを削除
prop_find({props} [, {direction}])
辞書 テキストプロパティを検索する
prop_list({lnum} [, {props}]) リスト {lnum}行目のテキストプロパティを取得
prop_remove({props} [, {lnum} [, {lnum-end}]])
数値 テキストプロパティを削除
prop_type_add({name}, {props}) なし 新しいプロパティタイプを定義
prop_type_change({name}, {props})
なし 既存のプロパティタイプを変更
prop_type_delete({name} [, {props}])
なし プロパティタイプを削除
prop_type_get({name} [, {props}])
辞書 プロパティタイプの値を取得
prop_type_list([{props}]) リスト プロパティタイプ一覧を取得
pum_getpos() 辞書 ポップアップメニューが表示されている場
合、位置とサイズを取得
pumvisible() 数値 ポップアップメニューが表示されているか
py3eval({expr}) 任意 python3 の式を評価する
pyeval({expr}) 任意 Python の式を評価する
pyxeval({expr}) 任意 python_x の式を評価する
rand([{expr}]) 数値 疑似乱数を取得する
range({expr} [, {max} [, {stride}]])
リスト {expr}から{max}までの要素のリスト
readblob({fname}) Blob {fname} から Blob を読む
readdir({dir} [, {expr} [, {dict}]])
リスト {expr}によって選択された{dir}内のファ
イル名を取得
readdirex({dir} [, {expr} [, {dict}]])
リスト {expr}によって選択された{dir}内のファ
イル情報を取得
readfile({fname} [, {type} [, {max}]])
リスト ファイル{fname}から行のリストを取得
reduce({object}, {func} [, {initial}])
任意 {func} を使って {object} の 畳み込み
(reduce) を行う
reg_executing() 文字列 実行中のレジスタ名を取得する
reg_recording() 文字列 記録中のレジスタ名を取得する
reltime([{start} [, {end}]]) リスト 時刻の値を取得
reltimefloat({time}) 浮動小数点数 時刻の値を浮動小数点に変換
reltimestr({time}) 文字列 時刻の値を文字列に変換
remote_expr({server}, {string} [, {idvar} [, {timeout}]])
文字列 式を送信する
remote_foreground({server}) 数値 Vimサーバーを前面に出す
remote_peek({serverid} [, {retvar}])
数値 返信文字列を確認する
remote_read({serverid} [, {timeout}])
文字列 返信文字列を読み込む
remote_send({server}, {string} [, {idvar}])
文字列 キーシーケンスを送信する
remote_startserver({name}) なし サーバー {name} になる
remove({list}, {idx} [, {end}]) 任意/リスト
{list}から{idx}と{end}間の要素を削除
remove({blob}, {idx} [, {end}]) 数値/Blob
{Blob}から{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} を四捨五入する
rubyeval({expr}) 任意 Ruby の式を評価
screenattr({row}, {col}) 数値 スクリーン位置の属性
screenchar({row}, {col}) 数値 スクリーン位置の文字
screenchars({row}, {col}) リスト スクリーン位置の文字のリスト
screencol() 数値 現在のカーソル列
screenpos({winid}, {lnum}, {col}) 辞書 スクリーン行と列のテキスト
screenrow() 数値 現在のカーソル行
screenstring({row}, {col}) 文字列 スクリーン位置の文字列
search({pattern} [, {flags} [, {stopline} [, {timeout} [, {skip}]]]])
数値 {pattern} を検索する
searchcount([{options}]) 辞書 検索の統計の取得もしくは更新する
searchdecl({name} [, {global} [, {thisblock}]])
数値 変数の宣言を検索
searchpair({start}, {middle}, {end} [, {flags} [, {skip} [...]]])
数値 開始/終端のペアの他方を検索
searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} [...]]])
リスト 開始/終端のペアの他方を検索
searchpos({pattern} [, {flags} [, {stopline} [, {timeout} [, {skip}]]]])
リスト {pattern}を検索
server2client({clientid}, {string})
数値 返信文字列を送信する
serverlist() 文字列 利用可能なサーバーのリストを取得
setbufline({expr}, {lnum}, {text})
数値 バッファ {expr} の {lnum} 行目に {text}
を設定する
setbufvar({expr}, {varname}, {val}) バッファ{expr}内の変数{varname}に{val}
をセット
setcellwidths({list}) なし 文字のセル幅の上書き設定
setcharpos({expr}, {list}) 数値 {list} の {expr} 位置に設定
setcharsearch({dict}) 辞書 文字検索を{dict}に設定
setcmdpos({pos}) 数値 コマンドライン内のカーソル位置を設定
setcursorcharpos({list}) 数値 {list} の位置へカーソルを移動
setenv({name}, {val}) なし 環境変数を設定
setfperm({fname}, {mode}) 数値 ファイル {fname} のパーミッションを
{mode} に設定
setline({lnum}, {line}) 数値 行{lnum}に{line}(文字列)をセット
setloclist({nr}, {list} [, {action}])
数値 {list}を使ってlocationリストを変更
setloclist({nr}, {list}, {action}, {what})
数値 指定したlocationリストのプロパティを
変更
setmatches({list} [, {win}]) 数値 マッチのリストを復元する
setpos({expr}, {list}) なし {expr}の位置を{list}にする
setqflist({list} [, {action}]) 数値 {list}を使ってquickfixリストを変更
setqflist({list}, {action}, {what})
数値 指定したquickfixリストのプロパティを
変更
setreg({n}, {v} [, {opt}]) 数値 レジスタの値とタイプを設定
settabvar({nr}, {varname}, {val}) なし タブページ{nr}の変数{varname}を{val}に
設定する
settabwinvar({tabnr}, {winnr}, {varname}, {val})
なし タブページ{tabnr}内のウィンドウ{winnr}
の変数{varname}に{val}をセット
settagstack({nr}, {dict} [, {action}])
数値 {dict}を使ってタグスタックを変更
setwinvar({nr}, {varname}, {val}) なし ウィンドウ{nr}の変数{varname}に{val}を
セット
sha256({string}) 文字列 {string}のSHA256チェックサム
shellescape({string} [, {special}])
文字列 {string}をシェルコマンド引数として使う
ためにエスケープする。
shiftwidth([{col}]) 数値 実際に使用される 'shiftwidth' の値
sign_define({name} [, {dict}]) 数値 目印を定義または更新する
sign_define({list}) リスト 目印のリストを定義または更新する
sign_getdefined([{name}]) リスト 定義されている目印のリストを取得する
sign_getplaced([{expr} [, {dict}]])
リスト 設置されている目印のリストを取得する
sign_jump({id}, {group}, {expr})
数値 目印に移動する
sign_place({id}, {group}, {name}, {expr} [, {dict}])
数値 目印を設置する
sign_placelist({list}) リスト 目印のリストを設置する
sign_undefine([{name}]) 数値 目印を削除する
sign_undefine({list}) リスト 目印のリストを削除する
sign_unplace({group} [, {dict}])
数値 目印を解除する
sign_unplacelist({list}) リスト 目印のリストを解除する
simplify({filename}) 文字列 ファイル名を可能なかぎり簡略化する
sin({expr}) 浮動小数点数 {expr} の正弦(サイン)
sinh({expr}) 浮動小数点数 {expr}のハイパボリックサイン
slice({expr}, {start} [, {end}]) 文字列、リスト、Blob
文字列、リスト、Blob のスライス
sort({list} [, {func} [, {dict}]])
リスト 比較に{func}を使って{list}をソートする
sound_clear() なし すべてのサウンドの再生を停止する
sound_playevent({name} [, {callback}])
数値 イベントサウンドを再生する
sound_playfile({path} [, {callback}])
数値 サウンドファイル{path}を再生する
sound_stop({id}) なし サウンド{id}の再生を停止する
soundfold({word}) 文字列 {word}のsound-fold
spellbadword() 文字列 カーソル位置のスペルミスした単語
spellsuggest({word} [, {max} [, {capital}]])
リスト スペリング補完
split({expr} [, {pat} [, {keepempty}]])
リスト {expr}を{pat}で区切ってリストを作る
sqrt({expr}) 浮動小数点数 {expr} の平方根
srand([{expr}]) リスト rand() 用の種を取得する
state([{what}]) 文字列 Vimの現在の状態
str2float({expr}) 浮動小数点数 文字列を浮動小数点数に変換する
str2list({expr} [, {utf8}]) リスト {expr}の各文字をASCII / UTF8値に変換する
str2nr({expr} [, {base} [, {quoted}]])
数値 文字列を数値に変換する
strcharlen({expr}) 数値 文字列 {expr} の文字の長さ
strcharpart({str}, {start} [, {len} [, {skipcc}]])
文字列 {str} 内 {start} 文字目 から {len} 文
字分
strchars({expr} [, {skipcc}]) 数値 文字列{expr}の文字の数
strdisplaywidth({expr} [, {col}]) 数値 文字列{expr}の表示幅
strftime({format} [, {time}]) 文字列 指定されたフォーマットで時刻を書式化
strgetchar({str}, {index}) 数値 {str} から {index} 番目の文字インデッ
クスを得る
stridx({haystack}, {needle} [, {start}])
数値 {haystack}内の{needle}のインデックス
string({expr}) 文字列 {expr}の値の文字列表現
strlen({expr}) 数値 文字列{expr}の長さ
strpart({str}, {start} [, {len} [, {chars}]])
文字列 {str}内{start}バイトから{len}バイト/
文字分
strptime({format}, {timestring})
数値 {timestring} を unix タイムスタンプに
変換
strridx({haystack}, {needle} [, {start}])
数値 {haystack}内の最後の{needle}のインデッ
クス
strtrans({expr}) 文字列 文字列を表示可能に変更
strwidth({expr}) 数値 文字列{expr}の表示セル幅
submatch({nr} [, {list}]) 文字列/リスト
":s" やsubstitute()における特定のマッチ
substitute({expr}, {pat}, {sub}, {flags})
文字列 {expr}の{pat}を{sub}に置換え
swapinfo({fname}) 辞書 スワップファイル {fname} に関する情報
swapname({expr}) 文字列 バッファ{expr}のスワップファイル名
synID({line}, {col}, {trans}) 数値 {line}と{col}のsyntax IDを取得
synIDattr({synID}, {what} [, {mode}])
文字列 syntax ID{synID}の属性{what}を取得
synIDtrans({synID}) 数値 {synID}の翻訳されたsyntax ID
synconcealed({lnum}, {col}) リスト Conceal の情報
synstack({lnum}, {col}) リスト {lnum}行{col}列目における構文IDの
スタック
system({expr} [, {input}]) 文字列 シェルコマンド{expr}の出力結果
systemlist({expr} [, {input}]) リスト シェルコマンド{expr}の出力結果
tabpagebuflist([{arg}]) リスト タブページ内のバッファ番号のリスト
tabpagenr([{arg}]) 数値 現在または最後のタブページの番号
tabpagewinnr({tabarg} [, {arg}])
数値 タブページ内の現在のウィンドウの番号
tagfiles() リスト 使用しているタグファイルのリスト
taglist({expr} [, {filename}]) リスト {expr}にマッチするタグのリスト
tan({expr}) 浮動小数点数 {expr}のタンジェント
tanh({expr}) 浮動小数点数 {expr}のハイパボリックタンジェ
ント
tempname() 文字列 テンポラリファイルの名前
term_dumpdiff({filename}, {filename} [, {options}])
数値 2 つのダンプ間の差分を表示する
term_dumpload({filename} [, {options}])
数値 スクリーンダンプの表示
term_dumpwrite({buf}, {filename} [, {options}])
なし 端末ウィンドウの内容をダンプする
term_getaltscreen({buf}) 数値 代替スクリーンフラグを取得する
term_getansicolors({buf}) リスト GUI カラーモードでの ANSI パレットを取
得する
term_getattr({attr}, {what}) 数値 属性 {what} の値を取得する
term_getcursor({buf}) リスト 端末のカーソル位置を取得する
term_getjob({buf}) ジョブ 端末に関連付けられているジョブを取得す
る
term_getline({buf}, {row}) 文字列 端末から 1 行のテキストを取得する
term_getscrolled({buf}) 数値 端末のスクロール数を取得する
term_getsize({buf}) リスト 端末のサイズを取得する
term_getstatus({buf}) 文字列 端末の状態を取得する
term_gettitle({buf}) 文字列 端末のタイトルを取得する
term_gettty({buf}, [{input}]) 文字列 端末の tty 名を取得する
term_list() リスト 端末バッファのリストを取得する
term_scrape({buf}, {row}) リスト 端末スクリーンの行を取得する
term_sendkeys({buf}, {keys}) なし キー入力を端末に送信する
term_setansicolors({buf}, {colors})
なし GUI カラーモードでの ANSI パレットを設
定する
term_setapi({buf}, {expr}) なし terminal-api の関数名プリフィックス
を設定する
term_setkill({buf}, {how}) なし 端末のジョブを停止するためのシグナルを
設定する
term_setrestore({buf}, {command}) なし 端末を復元するためのコマンドを設定する
term_setsize({buf}, {rows}, {cols})
なし 端末のサイズを設定する
term_start({cmd} [, {options}]) 数値 端末ウィンドウを開きジョブを実行する
term_wait({buf} [, {time}]) 数値 スクリーンが更新されるのを待つ
terminalprops() 辞書 端末のプロパティ
test_alloc_fail({id}, {countdown}, {repeat})
なし メモリの確保を失敗にさせる
test_autochdir() なし 起動時に 'autochdir' を有効にする
test_feedinput({string}) なし キー入力を入力バッファに追加する
test_garbagecollect_now() なし テスト用に直ちにメモリを解放する
test_garbagecollect_soon() なし テスト用にすぐにメモリを解放する
test_getvalue({string}) 任意 内部変数の値を取得する
test_gui_drop_files({list}, {row}, {col}, {mods})
なし ファイルのリストをウィンドウにドロップ
する
test_gui_mouse_event({button}, {row}, {col}, {repeated}, {mods})
なし マウスイベントを入力バッファへ追加する
test_ignore_error({expr}) なし 特定のエラーを無視する
test_null_blob() Blob テスト用のnull値
test_null_channel() チャネル テスト用のnull値
test_null_dict() 辞書 テスト用のnull値
test_null_function() Funcref テスト用のnull値
test_null_job() ジョブ テスト用のnull値
test_null_list() リスト テスト用のnull値
test_null_partial() Funcref テスト用のnull値
test_null_string() 文字列 テスト用のnull値
test_option_not_set({name}) なし オプション設定フラグをリセットする
test_override({expr}, {val}) なし Vimの内部処理を置き換えてテストする
test_refcount({expr}) 数値 {expr}の参照カウントを取得
test_scrollbar({which}, {value}, {dragging})
なし GUIのスクロールのテスト用
test_setmouse({row}, {col}) なし テスト用にマウス位置を設定する
test_settime({expr}) なし テスト用に現在の時刻を設定する
test_srand_seed([seed]) なし srand() のテスト用に種を設定する
test_unknown() 任意 テスト用のunknown値
test_void() 任意 テスト用のvoid値
timer_info([{id}]) リスト タイマーに関する情報
timer_pause({id}, {pause}) なし タイマーの一時停止または一時停止解除
timer_start({time}, {callback} [, {options}])
数値 タイマーを作成する
timer_stop({timer}) なし タイマーを停止する
timer_stopall() なし すべてのタイマーを停止する
tolower({expr}) 文字列 文字列{expr}を小文字にする
toupper({expr}) 文字列 文字列{expr}を大文字にする
tr({src}, {fromstr}, {tostr}) 文字列 {src}中に現れる文字{fromstr}を{tostr}
に変換する
trim({text} [, {mask} [, {dir}]])
文字列 {text} から {mask} 内の文字を切り取る
trunc({expr}) 浮動小数点数 浮動小数点数{expr}を切り詰める
type({expr}) 数値 変数{expr}の型
typename({expr}) 文字列 {expr}の型を表す
undofile({name}) 文字列 {name}に対するアンドゥファイルの名前
undotree() リスト アンドゥファイルツリー
uniq({list} [, {func} [, {dict}]])
リスト リストから隣接した重複を削除
values({dict}) リスト {dict}の値のリスト
virtcol({expr}) 数値 カーソルのスクリーンカラム位置
visualmode([expr]) 文字列 最後に使われたビジュアルモード
wildmenumode() 数値 'wildmenu' モードが有効かどうか
win_execute({id}, {command} [, {silent}])
文字列 ウィンドウ{id}で{command}を実行する
win_findbuf({bufnr}) リスト {bufnr}を含むウィンドウを見つける
win_getid([{win} [, {tab}]]) 数値 {tab}の{win}のウィンドウIDを取得
win_gettype([{nr}]) 文字列 ウィンドウ {nr} の型
win_gotoid({expr}) 数値 ID {expr}のウィンドウに行く
win_id2tabwin({expr}) リスト ウィンドウIDからタブとウィンドウnr取得
win_id2win({expr}) 数値 ウィンドウIDからウィンドウnr取得
win_screenpos({nr}) リスト ウィンドウ {nr} のスクリーン位置を取得
する
win_splitmove({nr}, {target} [, {options}])
数値 ウィンドウ {nr} を {target} の分割へ移
動
winbufnr({nr}) 数値 ウィンドウ{nr}のバッファ番号
wincol() 数値 カーソル位置のウィンドウ桁
winheight({nr}) 数値 ウィンドウ{nr}の高さ
windowsversion() 文字列 MS-Windows OS のバージョン
winlayout([{tabnr}]) リスト タブ {tabnr} 内のウィンドウの配置
winline() 数値 カーソル位置のウィンドウ行
winnr([{expr}]) 数値 現在のウィンドウの番号
winrestcmd() 文字列 ウィンドウサイズを復元するコマンド
winrestview({dict}) なし 現在のウィンドウのビューを復元
winsaveview() 辞書 現在のウィンドウのビューを保存
winwidth({nr}) 数値 ウィンドウ{nr}の幅を取得
wordcount() 辞書 バイト/文字/単語の統計情報を取得
writefile({object}, {fname} [, {flags}])
数値 行の Blob または list をファイルに
書き込む
xor({expr}, {expr}) 数値 ビット排他的論理和
abs({expr}) abs()
{expr} の絶対値を返す。{expr} の値が浮動小数点数である場合は浮
動小数点数を返す。{expr} がNumberに変換可能な場合は数値が戻
り値になる。それ以外の場合はエラーメッセージを表示し、-1
を返す。
例:
method としても使用できる:
{+float 機能を有効にしてコンパイルしたときのみ有効}
acos({expr}) acos()
{expr} の逆余弦 (アークコサイン) をラジアンで返す。
値は [0, pi] の範囲の浮動小数点数 (Float)。
{expr} は [-1, 1] の範囲の浮動小数点数 (Float) か数値
(Number) でなければならない。
例:
method としても使用できる:
{+float 機能を有効にしてコンパイルしたときのみ有効}
add({object}, {expr}) add()
List または Blob {object}の末尾に項目{expr}を追加する。結
果の List か Blob を返す。例:
を連結するにはextend()を使う。
{object}が Blob の場合、{expr}は数値でなければならない。
他の位置に要素を追加するにはinsert()を使う。
method としても使用できる:
and({expr}, {expr}) and()
二つの引数のビット論理積。引数は数値に変換される。リスト、辞
書、浮動小数点数を指定するとエラーになる。
例:
append({lnum}, {text}) append()
{text}がリストListのときは、各要素をカレントバッファの{lnum}
行目以降にテキストとして追加する。
リストでないときは、{text}をテキストとしてカレントバッファの
{lnum}行目以降にテキストとして追加する。
要素としてどの型でも受け入れて文字列に変換される。
{lnum}は0でもよく、その場合は1行目の前に行を挿入する。
{lnum}はgetline()と同様に扱われる。
失敗した場合は1を返す({lnum}が不正な範囲であるか、メモリ不足)。
成功なら0を返す。例:
リストの後に method としても使用でき、ベースは第2引数として
渡される:
appendbufline({expr}, {lnum}, {text}) appendbufline()
append() と同様、ただしバッファ {expr} にテキストを追加する。
この関数は、ロードされたバッファに対してのみ機能する。必要であ
れば、最初に bufload() を呼び出すこと。
{expr} の使い方については bufname() を参照。
{lnum} は append() と同様に扱われる。Note: line() の使用
は、追加対象のバッファではなくカレントバッファに適用される。
バッファの最後に追加するには "$" を使用する。
成功時には 0 が返り、失敗時には 1 が返る。
{expr} が有効なバッファでない、もしくは {lnum} が有効でない場
合、エラーメッセージが与えられる。例:
リストの後に method としても使用でき、ベースは第2引数として
渡される:
引数リスト内の、ファイルの数を返す。arglistを参照。
{winid} が指定されていない場合は、カレントウィンドウの引数リス
トが使われる。
{winid} が -1 の場合、グローバル引数リストが使われる。
もしくは、{winid} は、引数リストが使用されるウィンドウを指定す
る: ウィンドウ番号またはウィンドウID。引数{winid} が無効な場合
は -1 を返す。
argidx()
argidx() 引数リスト内の現在のインデックスを返す。最初のファイルは0とな
る。argc() - 1が最後のファイルとなる。arglistを参照。
arglistid()
arglistid([{winnr} [, {tabnr}]])
引数リストの ID を返す。値は引数リストを区別するための数値であ
る。ゼロはグローバル引数リストを意味する。arglist 参照。
引数が無効な場合は -1 を返す。
引数を指定しなかった場合はカレントウィンドウが使われる。
{winnr} を指定した場合はカレントタブページ内のウィンドウが使わ
れる。
{winnr} と {tabnr} を指定した場合は指定したタブページ内のウィ
ンドウが使われる。
{winnr} にはウィンドウ番号またはwindow-IDが使える。
argv()
argv([{nr} [, {winid}]])
結果は引数リスト内の、{nr}番目のファイル。arglist を参照。
"argv(0)" は一番最初のファイルを示す。例:
ト arglist 全体を返す。
引数{winid} はウィンドウIDを指定する。
Vimのコマンドライン引数については、v:argv を参照。
asin({expr}) asin()
{expr} の逆正弦 (アークサイン) をラジアンで返す。
値は [-pi/2, pi/2] の範囲の浮動小数点数 (Float)。
{expr} は [-1, 1] の範囲の浮動小数点数 (Float) か数値
(Number) でなければならない。
例:
method としても使用できる:
{+float 機能つきでコンパイルされたときのみ有効}
assert_ 関数群はここに文書化されている: assert-functions-details
atan({expr}) atan()
{expr} の逆正接(アークタンジェント)の主値を浮動小数点数
Float で返す。主値はラジアンで[-pi/2, +pi/2]の範囲内にある。
{expr} は Float か Number に評価されなければならない。
例:
method としても使用できる:
{+float 機能つきでコンパイルされたときのみ有効}
atan2({expr1}, {expr2}) atan2()
{expr1} / {expr2} の逆正接 (アークタンジェント) をラジアンで返
す。値は [-pi, pi] の範囲の浮動小数点数 (Float)。
{expr1} と {expr2} は浮動小数点数 (Float) か数値 (Number)
でなければならない。
例:
method としても使用できる:
{+float 機能を有効にしてコンパイルしたときのみ有効}
balloon_gettext() balloon_gettext()
バルーン内の現在のテキストを返す。文字列に対してのみ使用され、
リストには使用されない。
balloon_show({expr}) balloon_show()
{expr} をバルーン内に表示する。GUI では {expr} は文字列として
扱われる。端末では {expr} をバルーンの行を含むリストとしてもよ
い。{expr} がリストでない場合、balloon_split() で分割される。
{expr} が空文字列の場合、既存のバルーンは削除される。
例:
想定される使用方法は、バルーンの内容の取得が 'balloonexpr' か
ら開始されることである。そこから非同期メソッドを呼び出し、コー
ルバックから balloon_show() を呼び出す。'balloonexpr' 自身は
空文字列かプレースホルダーを返すことができる。
バルーンを表示できないときは何も起こらず、エラーメッセージも表
示されない。
{Vimが +balloon_eval もしくは +balloon_eval_term 機能付き
でコンパイルされたときのみ有効}
balloon_split({msg}) balloon_split()
{msg} をバルーン内で表示される行に分割する。カレントウィンドウ
サイズ用に分割され、デバッガ出力を表示するために最適化される。
分割された行の List を返す。
method としても使用できる:
{+balloon_eval_term 機能付きでコンパイルされたときのみ有効}
browse()
browse({save}, {title}, {initdir}, {default})
ファイル選択ダイアログを起動。"has("browse")" がTRUEを返すと
き (幾つかのGUIバージョンに限定)だけ利用可能。
入力フィールドの意味は:
{save} TRUEならば書込み用ファイルの選択
{title} ダイアログのタイトル
{initdir} ダイアログの始まるディレクトリ
{default} ファイル名の省略値
ダイアログがキャンセルされるか、何かエラーがあるか、もしくはブ
ラウジングが不可能ならば、空文字列が戻ってくる。
browsedir()
browsedir({title}, {initdir})
ディレクトリ選択ダイアログを起動。"has("browse")" がTRUEを返
すとき(幾つかのGUIバージョンに限定)だけ利用可能。
ディレクトリ選択ダイアログがないシステムにおいてはファイル選択
ダイアログが使われる。その場合は、指定したいディレクトリの中の
ファイルを選択すること。
入力フィールドの意味は:
{title} ダイアログのタイトル
{initdir} ダイアログの始まるディレクトリ
ダイアログがキャンセルされるか、何かエラーがあるか、もしくはブ
ラウジングが不可能ならば、空文字列が戻ってくる。
bufadd({name}) bufadd()
バッファリストに {name} という名前でバッファを追加する。
もし、ファイル {name} 用のバッファが既に存在した場合、そのバッ
ファの番号を返す。そうでなければ、新しく作られたバッファの番号
を返す。{name} が空の文字列だったときは新しいバッファが常に作
成される。
バッファには 'buflisted' が設定されず、まだロードされない。
バッファにテキストを追加するにはこれを使用する:
bufexists({expr}) bufexists()
結果は数値で、{expr}と呼ばれるバッファが存在すればTRUEとな
る。
{expr}が数値の場合、バッファ番号とみなされる。数値の 0 はカレ
ントウィンドウの代替バッファである。
{expr}が文字列の場合、バッファ名に正確にマッチしなければな
らない。名前として以下のものが許される:
- カレントディレクトリからの相対パス。
- フルパス。
- 'buftype' が "nofile" であるバッファの名前
- URL名。
バッファリストにないバッファも検索される。
Note :buffersの出力で、ヘルプファイルは短い名前でリストされ
ているが、bufexists()は長い名前でないと見つけることができない。
ある名前を bufexists() に与えて非零になったとしても、その名前
をコマンド :buffer に与える際には expand() を使って展開し
なければならない場合がある。特に MS-Windows の "c:\DOCUME~1"
という 8.3 名形式において。
代替ファイル名が存在するかを判定するには "bufexists(0)" を使う。
method としても使用できる:
buffer_exists()
以前の名前: buffer_exists().
buflisted({expr}) buflisted()
戻り値は数値で、{expr}と呼ばれるバッファが存在しリストされてい
る ('buflisted' オプションがオンになっている) ならば結果は
TRUEとなる。引数{expr}はbufexists()と同じように扱われる。
method としても使用できる:
bufload({expr}) bufload()
バッファ{expr}がロードされていることを保証する。バッファの名前
が既存のファイルを参照しているときは、そのファイルが読み込まれ
る。そうでなければバッファは空になる。もし既にバッファが読み込
まれていれば、変更はない。
バッファのファイルに対して既存のスワップファイルがある場合、ダ
イアログなしで、バッファはロードされる。
引数{expr}はbufexists()と同じように扱われる。
method としても使用できる:
bufloaded({expr}) bufloaded()
戻り値は数値で、{expr}と呼ばれるバッファが存在しロード済み(
ウィンドウに表示されているか、隠されているかは問わない)ならば
結果はTRUEとなる。引数{expr}はbufexists()と同じように扱わ
れる。
method としても使用できる:
bufname([{expr}]) bufname()
戻り値はバッファの名前。バッファ名はコマンド :ls で表示され
るものとほとんど同じだが、例えば "[No Name]" などの特殊名は使
用しない。
{expr}が省略された場合は、カレントバッファが使われる。
{expr}が数値ならば、その番号のバッファ名が返される。0は現在の
ウィンドウの代替バッファを意味する。{expr}が文字列ならば、バッ
ファ名に対してファイル名マッチング file-pattern を行うパター
ンとなる。このマッチングは常に、'magic' をセットし 'cpoptions'
を空にした状態で行われる。複数マッチしてしまった場合には空文字
列が返される。
"" や "%" は現在のバッファを意味し、"#" は代替バッファを意味す
る。
完全マッチのものが優先され、完全マッチがなければ、バッファ名の
先頭でのマッチ、末尾でのマッチ、中間でのマッチが探される。完全
マッチのみを探すには、パターン先頭に "^" を、末尾に "$" をつけ
る。
まずバッファリストにあるバッファが探される。そこで1個だけマッ
チが見つかればそれを返す。次にバッファリストにないものが探され
る。
{expr}が文字列のときに、それをバッファ番号として使いたいなら
ば、0を足すことによって強制的に数値にすることができる:
バッファが存在しないか名前を持っていない場合には、空文字列が返
される。
以前の名前: buffer_name().
bufnr()
bufnr([{expr} [, {create}]])
結果はバッファの番号。バッファ番号はコマンド :ls で表示され
るものと同様。{expr}の使い方は前述の bufname() を参照。
バッファが存在しない場合-1が返される。ただし、{create}が与えら
れて真であるときは、バッファリストに載せない新しいバッファを作
成し、その番号を返す。例:
新しいバッファを作成するには、bufadd() を使用する。
bufnr("$")は最後のバッファを意味する:
となる。Note そのバッファ番号より小さいバッファ番号を持つ(ハズ
の)バッファが、必ずしも全て存在するとは限らない。なぜなら
":bwipeout" がバッファを消すことができるからだ。バッファが存在
するかテストするにはbufexists()を使う。
method としても使用できる:
以前の名前: buffer_number(). buffer_number()
last_buffer_nr()
bufnr("$")の以前の名前: last_buffer_nr().
bufwinid({expr}) bufwinid()
その結果は数値で、バッファ{expr}に関連付けられた最初のウィンド
ウのwindow-ID。{expr}の使い方は前述のbufname()を参照。バッ
ファ{expr}が存在しないか、ウィンドウが無い場合は、-1が返され
る。例:
現在のタブページのみを処理する。
method としても使用できる:
bufwinnr({expr}) bufwinnr()
結果は数値で、バッファ{expr}に関連付けられた最初のウィンドウの
番号。{expr}の使い方は前述のbufname()を参照。バッファ{expr}
が存在しないか、ウィンドウが無い場合には-1を返す。例:
この番号はCTRL-W_wや ":wincmd w" :wincmdで使える。
method としても使用できる:
byte2line({byte}) byte2line()
カレントバッファの先頭から{byte}番目の文字が、何行目に含まれる
かを返す。これにはカレントバッファの 'fileformat' に依存した、
改行文字も含まれる。先頭の文字にはバイトカウント1が与えられる。
line2byte()とgoと:gotoも参照。
method としても使用できる:
{+byte_offset 機能付きでコンパイルされたときのみ有効}
byteidx({expr}, {nr}) byteidx()
文字列{expr}の{nr}番目の文字のバイトインデックスを返す。最初の
文字の{nr}は0であり、そして戻り値は0となる。
マルチバイト文字がない時は{nr}に等しい値を返す。
合成文字はまとめて計算される。合成文字のバイト数はそれが合成さ
れているベース文字のバイト数に合算される。合成文字を別々に数え
るには byteidxcomp() を参照。
例 :
{expr}が{nr}文字以下の場合は-1を返す。
{expr}がちょうど{nr}文字の場合は文字列の長さ(バイト単位)を返す。
method としても使用できる:
byteidxcomp({expr}, {nr}) byteidxcomp()
byteidx() と同じだが、合成文字は個別にカウントされる。例:
足すと 3 バイト)。2 番目は 1 が出力される ('e' は 1 バイト)。
'encoding' に Unicode が設定されているときのみ byteidx() と違っ
た動作になる。
method としても使用できる:
call({func}, {arglist} [, {dict}]) call() E699
リストList{arglist}の要素を引数として関数{func}を呼ぶ。
{func}はFuncrefでも関数の名前でもよい。
a:firstlineとa:lastlineにはカレント行が代入される。
呼び出した関数の戻り値を返す。
{dict}は "dict" 属性つきの関数用で、これがローカル変数 "self"
に代入される。Dictionary-functionを参照。
method としても使用できる:
ceil({expr}) ceil()
{expr} 以上となる最小の整数を浮動小数点数 Float で返す
(切り上げる)。
{expr} は Float か Number に評価されなければならない。
例:
method としても使用できる:
{+float 機能つきでコンパイルされたときのみ有効}
ch_ 関数群はここに文書化されている: channel-functions-details
changenr() changenr()
最も最近の変更の番号を返す。:undolistで表示される番号と同じ
であり、:undoコマンドの引数として使うことができる。
変更を行った直後ではその変更の番号となる。redoを行った直後は
redoされた変更の番号となる。undoを行った直後はundoされた変更よ
り1小さい番号になる。
char2nr({expr} [, {utf8}]) char2nr()
{expr}の最初の文字のASCIIコードを返す。例:
用される。"utf-8" の場合の例:
合成文字は個別の文字として扱われる。
nr2char() はこの逆を行う。
文字列を文字の番号のリストに変換するには:
method としても使用できる:
charclass({string}) charclass()
{string} 内の最初の文字の文字クラスを返す。
文字クラスは次のいずれか:
0 空白
1 区切り文字
2 単語文字
3 絵文字
その他 Unicode 固有のクラス
クラスはパターンと単語単位の移動で使われる。
charcol()
charcol({expr}) col() と同様だが {expr} で返す桁位置がバイトインデックスでは
なく文字インデックスになる。
例:
5行目のテキスト "여보세요" の '세' にカーソルがある状態:
charidx()
charidx({string}, {idx} [, {countcc}])
{string} 内の {idx} バイト目の文字インデックスを返す。最初の文
字のインデックスは0。
マルチバイト文字がない時は {idx} に等しい値を返す。
{countcc} がないもしくは FALSE の場合、合成文字は分割して文
字としてカウントせず、先行する基底文字に合成文字のバイト長が足
される。
{countcc} が TRUE の場合、合成文字は分割した文字としてカウン
トされる。
引数が不正であるか {idx} が {string} の最後のバイトより大きい
場合-1が返る。最初の引数が文字列でない、2番目の引数が数値でな
い、もしくは3番目の引数ありで0でも1でもない場合はエラーとなる。
文字インデックスからバイトインデックスを得るには byteidx()
と byteidxcomp() を参照。
例:
method としても使用できる:
chdir({dir}) chdir()
{dir}は文字列でなければならない。
現在の作業ディレクトリを {dir} に変更する。ディレクトリの変更
範囲は、カレントウィンドウのディレクトリによって異なる:
- カレントウィンドウにウィンドウローカルディレクトリ
(:lcd)がある場合は、ウィンドウローカルディレクトリ
を変更する。
- それ以外の場合、カレントタブページにローカルディレク
トリ(:tcd)がある場合は、タブページのローカルディレ
クトリを変更する。
- それ以外の場合、グローバルディレクトリを変更する。
成功した場合は、前の作業ディレクトリを返す。ディレクトリを復元
するには、これを別の chdir() に渡すこと。
失敗した場合は、空の文字列を返す。
例:
method としても使用できる:
cindent({lnum}) cindent()
'cindent' で使われるのと同じC言語用のインデント規則に従った場
合の{lnum}行目のインデント量を返す。
インデント量はスペースで数えられ、'tabstop' の値は関係ない。
{lnum}はgetline()の場合と同様に扱われる。
{lnum}が無効な値のときや+cindent機能なしでコンパイルされてい
るときは-1を返す。
C-indentingを参照。
method としても使用できる:
clearmatches([{win}]) clearmatches()
matchadd() と コマンド :match によりカレントウィンドウに定
義されたマッチをすべて消去する。
{win} が指定されれば、カレントウィンドウではなく指定されたウィ
ンドウあるいはウィンドウID を対象にする。
method としても使用できる:
col()
col({expr}) 戻り値は数値で、{expr}で与えられる位置の桁番号(バイトインデッ
クス)。有効な位置は:
. 現在の位置
$ カレント行の末尾(カレント行のバイト数+1を返す)
'x マークxの位置(マークが設定されていない場合0)
v ビジュアルモードでは: ビジュアル選択領域の開始行
(カーソルがその端)。ビジュアルモード以外ではカーソ
ル位置を返す。すぐに更新される点が '< と違う。
さらに {expr} は [lnum, col] という行番号と桁番号のリストで
あってもよい。col に "$" を指定して、ある行の最後の桁を取得す
るのにとても便利である。"lnum" か "col" が範囲外である場合は
0 を返す。
行番号を取得するにはline()を使う。行番号と桁番号両方を取得す
るにはgetpos()を使う。
画面上の桁番号を取得するにはvirtcol()を使う。文字の位置を取
得するには charcol() を使う。
Note 現在のファイルのマークしか使えないことに注意。
例:
大文字のマークは他のバッファを指しているかもしれない。
'virtualedit' が有効なとき、カーソルが行末を越えていると、桁番
号は行の長さより1大きい値を返す。挿入モードで桁番号を取得する
には次のマップが使える:
method としても使用できる:
complete({startcol}, {matches}) complete() E785
挿入モード補完の候補を設定する。
挿入モードでのみ使用できる。CTRL-R = (i_CTRL-R を参照)と組み
合わせてマッピングを作る必要がある。CTRL-Oの後や、<expr>マッピ
ングの中では正しく動作しない。
{startcol}は補完すべき単語の開始位置を示す、行内のバイトオフセッ
トである。その位置からカーソルまでのテキストが補完すべき単語と
なる。
{matches}はリストListでなければならない。リストの各要素が1つ
の候補となる。この要素として許される値については
complete-itemsを参照。
Note この関数を呼んだ後は補完を停止させるようなテキストの挿入
をしないように注意しなければならない。
この関数で設定した候補は普通の挿入モード補完と同じ様にCTRL-Nと
CTRL-Pで選択できる。設定されていればポップアップメニューが表示
される。ins-completion-menuを参照。
例:
挿入されてしまわないように空文字列を返していることに注意。
method としても使用でき、ベースは第2引数として渡される:
complete_add({expr}) complete_add()
候補のリストに{expr}を追加する。'completefunc' で指定された関
数の中でのみ使われる。
失敗したときは0を返す(空文字列かメモリ不足)。候補が追加された
ときは1を返し、その候補が既にリストに存在するときは2を返す。
{expr}の説明についてはcomplete-functionsを参照。'omnifunc'
が返すリストと同じである。
method としても使用できる:
complete_check() complete_check()
補完候補を探している間にキーがタイプされたかどうか確認する。補
完の検索に時間がかかる場合に使われる。候補の検索を中断しようと
しているときはTRUEを返す。そうでないときは0を返す。
'completefunc' で指定された関数の中でのみ使われる。
complete_info()
complete_info([{what}])
挿入モードの補完に関する情報を辞書 Dictionary で返す。
ins-completion を参照。
要素は以下の通り:
mode 現在の補完モード名の文字列。
値は complete_info_mode を参照。
pum_visible ポップアップメニューが表示されているなら TRUE
pumvisible() を参照。
items 補完マッチのリスト。各要素は "word", "abbr",
"menu", "kind", "info", "user_data" を含む辞書。
complete-items を参照。
selected 選択された補完候補のインデックス。最初のイン
デックスが 0。どの補完候補も選択されていなけれ
ば -1 (入力したテキストのみ表示、もしくは <Up>
や <Down> キーを利用した最後の補完後に選択しな
かった場合)。
inserted 入力された文字列。[現時点では未実装]
complete_info_mode
mode の値は:
"" 補完モードでない
"keyword" キーワード補完 i_CTRL-X_CTRL-N
"ctrl_x" CTRL-X のみが入力された i_CTRL-X
"whole_line" 行全体補完 i_CTRL-X_CTRL-L
"files" ファイル名補完 i_CTRL-X_CTRL-F
"tags" タグ補完 i_CTRL-X_CTRL-]
"path_defines" 定義補完 i_CTRL-X_CTRL-D
"path_patterns" インクルード補完 i_CTRL-X_CTRL-I
"dictionary" 辞書補完 i_CTRL-X_CTRL-K
"thesaurus" 同義語補完 i_CTRL-X_CTRL-T
"cmdline" Vim コマンドライン補完 i_CTRL-X_CTRL-V
"function" ユーザー定義補完 i_CTRL-X_CTRL-U
"omni" オムニ補完 i_CTRL-X_CTRL-O
"spell" スペル補完 i_CTRL-X_s
"eval" complete() 補完
"unknown" その他の内部モード
オプショナル引数としてリスト {what} が与えられると、 {what} に
ある項目のみが返る。{what} 内のサポートされていない項目は無視
される。
ポップアップメニューの位置とサイズを取得するには、
pum_getpos() を参照。CompleteChanged イベント中に v:event
でも利用可能である。
例:
method としても使用できる:
confirm()
confirm({msg} [, {choices} [, {default} [, {type}]]])
confirm()はユーザーに選択させるためのダイアログを提供する。戻
り値は選択した番号になる。最初の選択肢が1である。
Note: confirm()は、ダイアログサポートを有効にしてコンパイルし
た時にだけ動作する。+dialog_conと+dialog_guiを参照。
ダイアログには{msg}に加えて{choices}の選択肢が表示される。
{choices}が指定されない、または空の場合は選択肢 "&OK" が表示さ
れる(使用している言語に翻訳される)。
{msg}は文字列で '\n' を改行として使用できる。幾つかのシステム
では、長すぎる行は自動的に折り返される。
{choices}は文字列で、個々の選択肢は '\n' によって区切られる。
例:
"Cancel" を選択するのに 'c' をタイプすることができる。ショート
カットキーは最初の文字である必要は無い:
の最初の文字が使われる。大文字小文字は区別されない。
省略可能な引数{default}は<CR>キーを叩いた時に選択される選択肢
の番号を指定する。最初の選択肢をデフォルトにするならば1を使用
する。デフォルトを設定したくないのならば0を使用する。
{default}を省略した場合、1が使用される。
省略可能な引数{type}はダイアログの種類を指定する。これは GTK,
Mac, Motif, Win32 の GUI でアイコンを指定するのに使われる。
"Error", "Question", "Info", "Warning", "Generic" のうちどれか
一つを指定する。以上のうちの先頭の文字だけで指定できる。{type}
が省略された場合、"Generic" が使用される。
ユーザーが<Esc>やCTRL-Cや、その他の割りこみキーでダイアログを
中断した場合、confirm()は0を返す。
例:
'guioptions' の 'v' フラグに依存する。もしも 'v' フラグが含ま
れているのなら、ボタンは常に垂直に配置される。そうでなければ水
平に配置しようと試みられる。水平配置がうまくマッチしない場合
は、垂直配置が使われる。幾つかのシステムでは常に水平配置が使わ
れる。
method としても使用できる:
copy()
copy({expr}) {expr}のコピーを作る。数値と文字列の場合は、{expr}そのものとコ
ピーの間に違いはない。
{expr}がリストListの場合は浅いコピーを作る。つまり元のリスト
を変更してもコピーは変更されず、逆も同じである。しかし要素は共
通で、片方の要素に対し変更を加えると、もう一方の要素も変更され
る。
辞書はリストと同様な方法でコピーされる。
deepcopy()も参照。
method としても使用できる:
cos({expr}) cos()
{expr} の余弦(コサイン)をラジアンで浮動小数点数 Float で返す。
{expr} は Float または Number に評価されなければならない。
例:
method としても使用できる:
{+float 機能つきでコンパイルされたときのみ有効}
cosh({expr}) cosh()
{expr} の双曲線余弦 (ハイパボリックコサイン) を返す。
値は [1, inf] の範囲の浮動小数点数 (Float)。
{expr} は浮動小数点数 (Float) か 数値 (Number) でなければ
ならない。
例:
method としても使用できる:
{+float 機能を有効にしてコンパイルしたときのみ有効}
count({comp}, {expr} [, {ic} [, {start}]]) count()
文字列String、リストListまたは辞書Dictionary {comp} の中
に値 {expr} が何回現れるかを返す。
{start} が指定されたときはそのインデックスの要素から検索を開始
する。{start} は {comp} がリストの場合のみ使用できる。
{ic} が指定され、TRUEの場合は大文字・小文字は区別されない。
{comp} が文字列の場合、オーバーラップしていない {expr} の回数
が返される。{expr} が空文字列の場合は 0 が返る。
method としても使用できる:
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" の表示が以下のようになったとする:
実行 戻り値
---------- ----------
cursor({lnum}, {col} [, {off}]) cursor()
cursor({list})
{lnum}行目の{col}桁目(バイトで数える)にカーソルを移動させる。
桁番号{col}は1から始まる。
引数に {list} が 1 つだけ指定された場合は、それは要素が 2 個か
3 個、または 4 個の List として解釈される:
[{lnum}, {col}]
[{lnum}, {col}, {off}]
[{lnum}, {col}, {off}, {curswant}]
これは getpos() や getcurpos() の戻り値とほぼ同じである。
違いは最初の要素がないこと。
カーソルを文字数でカウントして位置させるには、
setcursorcharpos() を使う。
この関数を呼んでもジャンプリストは変更されない。
{lnum}はgetline()と同様に扱われる。
{lnum}がバッファの行数よりも大きい場合は、最後の行へ移動する。
{lnum}が0の場合はカレント行に留まる。
{col}がその行のバイト数より大きい場合は、その行の最後の文字へ
移動する。
{col}が0の場合は、カレント桁に留まる。
{curswant} が与えられた場合は、縦方向移動の優先的列番号として
使われる。指定がない場合は {col} が使われる。
'virtualedit' が有効のとき、{off}は文字の先頭からの画面上のオ
フセットを指定する。例えば、<Tab>の中の位置や最後の文字より後
などへも移動できる。
カーソルを移動できたときは 0 を、できなかったときは-1 を返す。
method としても使用できる:
debugbreak({pid}) debugbreak()
主にデバッグしているプログラムに割り込むために使用される。プロ
セス {pid} に対して SIGTRAP を発生させる。関係のないプロセスへ
の振る舞いは未定義である。terminal-debugger を参照。
{MS-Windows 上でのみ有効}
method としても使用できる:
deepcopy({expr} [, {noref}]) deepcopy() E698
{expr}のコピーを作る。数値と文字列の場合は、{expr}そのものとコ
ピーの間に違いはない。
{expr}がリストListの場合は完全なコピーを作る。つまり元のリス
トを変更してもコピーは変更されず、逆も同じである。要素の1つが
リストまたは辞書であるときは、再帰的にコピーが作成される。
よってコピーの要素に変更を加えても元のリストの要素は変更を受け
ない。
辞書はリストと同様な方法でコピーされる。
{noref}が省略された、または0のとき、含まれているリストや辞書は
1度だけコピーされる。全ての参照はこのただ1つのコピーを指す。
{noref}が1の場合、リストや辞書は現れるたびに新しいコピーが作ら
れる。そのため循環参照があるとdeepcopy()は失敗する。
E724
ネストは100レベルまで可能である。それ以上参照を繰り返している
要素があると、{noref}が1の場合は失敗する。
copy()も参照。
method としても使用できる:
delete({fname} [, {flags}]) delete()
{flags}を指定しないもしくは{flags}を空で指定した場合: ファイル
{fname}を削除する。
これは{fname}がシンボリックリンクの時でも動作する。
{flags}が "d" の場合: ディレクトリ{fname}を削除する。
これはディレクトリ{fname}が空でない場合は失敗する。
{flags}が "rf" の場合: ディレクトリ{fname}、その中に含むすべて
のものを再帰的に削除する。気をつけて!
Note: MS-Windowsでは、使用中のディレクトリを削除することはでき
ない。
シンボリックリンクは、それが示すものではなく、リンク自身が削除
される。
結果は数値であり、削除に成功すれば 0/false、削除に(部分的にで
も)失敗すれば -1/true である。
リスト List から項目を削除するには remove() を使う。
バッファから行を削除するには:deleteもしくはdeletebufline()
を使う。
method としても使用できる:
deletebufline({expr}, {first} [, {last}]) deletebufline()
{first} から {last} (を含む) までの行をバッファ {expr} から削
除する。{last} が省略されている場合、{first} 行だけを削除する。
成功時には 0 が返され、失敗時には 1 が返される。
この関数は、ロードされたバッファに対してのみ機能する。必要であ
れば、最初に bufload() を呼び出すこと。
{expr} の使い方は前述の bufname() を参照。
{first} および {last} は getline() と同様に扱われる。Note:
line() の使用はカレントバッファを参照する。バッファ {expr}
内の最後の行を参照するには "$" を使用する。
method としても使用できる:
did_filetype()
did_filetype() autocommandが実行されFileTypeイベントが一度でも起こっていれば、
TRUEが返る。スクリプトのFileTypeイベントが、複数回呼び出され
るのを回避するのに使える。 FileType
:setf FALLBACK が使用されている場合は FALSE を返す。
他のファイルへ移動すると、このカウンタはリセットされる。よって
実際は、カレントバッファに対してFileTypeイベントが発生したかど
うかを判定する。他のバッファを開く自動コマンドの中でこの関数を
使って 'filetype' を設定し、構文ファイルを読み込むために使え
る。
diff_filler({lnum}) diff_filler()
{lnum}行目より上にある削除行の数を返す。削除行とは、差分モード
で他方のウィンドウにテキストが挿入されていることを表す行のこと
である。削除行は表示はされているが、実際にはバッファに存在しな
い。
{lnum}はgetline()と同様に扱われる。つまり "." はカレント行と
なり、"'m" はマークmを表す。
カレントウィンドウが差分モードでないときは0を返す。
method としても使用できる:
diff_hlID({lnum}, {col}) diff_hlID()
差分モードで{lnum}行{col}桁(バイト単位)の位置のハイライトIDを
返す。カレント行に変更がないときは0を返す。
{lnum}はgetline()と同様に扱われる。つまり "." はカレント行と
なり、"'m" はマークmを表す。
先頭の桁の{col}は1となり、最初の行の{lnum}は1となる。
ハイライトIDはsynIDattr()を使って構文情報を得るために使える。
method としても使用できる:
digraph_get({chars}) digraph_get() E1214
{chars} のダイグラフを返す。これは正確に2文字の文字列である必
要がある。もし {chars} が2文字ちょうどでない、もしくは {chars}
のダイグラフがないなら、エラーとなり空文字列を返す。
必要であれば文字はUnicodeから 'encoding' に変換される。変換が
利用可能である必要があり、失敗することがある。
digraph_getlist() も参照。
例:
method としても使用できる:
この関数は +digraphs 機能付きでコンパイルされたときのみ動作
する。機能が無効の場合、この関数はエラーメッセージを表示する。
digraph_getlist([{listall}]) digraph_getlist()
ダイグラフのリストを返す。引数 {listall} が真で与えられたとき、
デフォルトのダイグラフを含む全ダイグラフを返す。それ以外はユー
ザー定義のダイグラフのみを返す。
必要であれば文字はUnicodeから 'encoding' に変換される。変換が
利用可能である必要があり、失敗することがある。
digraph_get() も参照。
例:
method としても使用できる:
この関数は +digraphs 機能付きでコンパイルされたときのみ動作
する。機能が無効の場合、この関数はエラーメッセージを表示する。
digraph_set({chars}, {digraph}) digraph_set() E1205
ダイグラフ {chars} をリストに追加する。{chars} は2文字の文字列
の必要がある。{digraph} はUTF-8でエンコードされた1文字の文字
列。合成文字は無視されないことに注意。この関数は :digraphs
と同様だがスペース始まりのダイグラフを登録するのに便利である。
この関数はダイグラフ digraph は登録されたなら v:true を返す。
もし失敗したなら、エラーメッセージとともに v:false を返す。
一度に複数のダイグラフを登録したいなら、digraph_setlist() が
使える。
例:
method としても使用できる:
この関数は +digraphs 機能付きでコンパイルされたときのみ動作
する。機能が無効の場合、この関数はエラーメッセージを表示する。
digraph_setlist({digraphlist}) digraph_setlist()
digraph_set() と同じだが複数のダイグラフを一度に追加できる。
{digraphlist} はリストのリストで、各リストは digraph_set()
と同じ {chars} と {digraph} の2つの文字列を持つ。
例:
これは以下と似ている:
フは追加されない点が異なる。
method としても使用できる:
この関数は +digraphs 機能付きでコンパイルされたときのみ動作
する。機能が無効の場合、この関数はエラーメッセージを表示する。
echoraw({expr}) echoraw()
{expr}を表示不可能な文字を含み、そのまま出力する。これは端末
コードを出力するために使える。例えば、modifyOtherKeysを無効に
するためには:
こと。
empty({expr}) empty()
{expr}が空なら1を、そうでなければ0を返す。
- リストListまたは辞書Dictionaryは要素を1個も持たないとき
空とみなされる。
- 文字列 String はその長さが0のとき空とみなされる。
- 数値と浮動小数点数は値が0のとき空とみなされる。
- v:false, v:none, v:null は空であり、v:true は空では
ない。
- ジョブ Job は開始に失敗したときは空である。
- チャネル Channel は閉じられていると空である。
- Blob はその長さが0のときは空である。
長いリストに対しては長さを0と比較するよりこちらの方がずっと高
速である。
method としても使用できる:
environ() environ()
すべての環境変数を辞書として返す。このように環境変数が存在する
かどうかを確認できる:
文字を区別しないためにこれを使用すること:
escape({string}, {chars}) escape()
{string}内に現れる{chars}の文字をバックスラッシュでエスケープ
する。例:
method としても使用できる:
eval()
eval({string}) {string}を評価し、値を返す。string()の戻り値を元の値に戻すの
に非常に便利である。数値、浮動小数点数、文字列、Blob およびそ
れらの複合に対して動作する。実際に存在する関数への Funcref
に対しても動作する。
method としても使用できる:
eventhandler() eventhandler()
イベントハンドラの中では1を返す。つまり、ユーザーの文字入力を
待っている間に、ファイルをドラッグ&ドロップするなど割り込みさ
れたことを表す。このときは対話的なコマンドは使えない。イベント
ハンドラの中でないときは0を返す。
executable({expr}) executable()
{expr}という名前の実行可能ファイルが存在するかどうか判定する。
{expr}は引数を何もつけないプログラム名でなければならない。
executable()は$PATHと通常のプログラム検索ディレクトリを参照す
る。 PATHEXT
MS-Windowsでは ".exe"、".bat" などの拡張子は含めても含めなくて
もよい。省略された場合は$PATHEXTの拡張子を検索する。よって
"foo.exe" が存在しなければ "foo.exe.bat" が見つかることもあり
うる。$PATHEXTが存在しなければ ".com;.exe;.bat;.cmd" が使われ
る。$PATHEXTにドットだけを含めると拡張子なしの名前を検索するこ
とができる。'shell' がUnixシェルのように思われるときは、{expr}
の後に拡張子をつけない名前も検索される。
MS-Windowsではファイルが存在するかどうかだけを判定し、それが
ディレクトリでないことや、それが本当に実行可能であるかどうかは
判定されない。
MS-WindowsではVimと同じディレクトリにある実行ファイルは必ず発
見できる。Vimがこのディレクトリを$PATHに加えるためである。
win32-PATH。
戻り値は数値:
1 存在する
0 存在しない
-1 このシステム上では実装されていない
exepath() は、実行ファイルの絶対パスを取得するのに使用するこ
とができる。
method としても使用できる:
execute({command} [, {silent}]) execute()
単一あるいは複数のExコマンドを実行して、出力を文字列として返
す。
{command} は文字列かリストを使える。リストの場合はそれらの行は
一行ずつ実行される。
以下と同等である:
オプションの {silent} の引数は以下の値を取ることができる:
"" :silent を使わない
"silent" :silent を使う
"silent!" :silent!を使う
デフォルトは "silent" である。Note "silent!" は redir とは異
なり、エラーメッセージは削除されることに注意すること。もし外部
コマンドを使って画面がおかしくなる様であれば、代わりに
system()を使うことができる。
E930
{command} の中のどこかで:redirを使うことができない。
行のリストを得るために、出力にsplit()を使うことができる:
現在のウィンドウとは別のウィンドウでコマンドを実行するには
win_execute() を使用すること。
再帰的に使用されると、再帰呼び出しの出力は、上位呼び出しの出力
に含まれない。
method としても使用できる:
exepath({expr}) exepath()
{expr} が実行ファイルで、それが絶対パス、相対パス、または
$PATH の中に存在する場合は、そのフルパスを返す。
Note: {expr} が "./" で開始している場合はカレントディレクトリ
が使われる。Vim のパスを得る場合に問題になるかもしれない:
かった場合は空文字列が返る。
method としても使用できる:
exists()
exists({expr}) 結果は数値で、変数{expr}が存在すればTRUEとなり、そうでなけれ
ば0となる。
Note: コンパイルされる :def 関数内のローカル変数と引数は
exists() からは見えない。
ある機能がサポートされているか判定するにはhas()を使う。
ファイルが存在するかを判定するにはfilereadable()を使う。
引数{expr}は文字列で次のうちいずれかである。
&option-name Vimオプション(存在するかだけを判定し、
本当に動作するかは判定しない)
+option-name 動作するVimオプション
$ENVNAME 環境変数(空文字列と比較することでも判
定できる)
*funcname 組み込み関数(functions参照)かユーザー
が定義した関数(user-functions参照)の
内、実装済みのもの。また Funcref であ
る変数に対しても動作する。
?funcname 実装されているかもしれない組み込み関数。
"funcname" が有効かチェックするのに利
用できる。
varname 内部変数(internal-variables)
curly-braces-names, Dictionaryの要
素、Listの要素などに対しても動作する。
コンパイルされる :def 関数内のローカ
ル変数には動作しない。
インデックスの評価で無効な式であるとエ
ラーメッセージが出る可能性があることに
注意。例:
0
:cmdname exコマンド: 組み込みコマンド、ユーザー
定義コマンド、コマンド修飾子:command。
戻り値:
1 コマンド名の先頭に一致
2 コマンド名に完全一致
3 複数のユーザー定義コマンドに一致
コマンドが定義されているかどうかを判定
するには、必ず戻り値が2であるかを確認
すること。
:2match :2matchのコマンド。
:3match :3matchのコマンド。
#event このイベントに対する自動コマンド定義
#event#pattern このイベントとパターンに対する自動コマ
ンド定義(パターンは文字そのままに解釈
され、自動コマンドのパターンと1文字ず
つ比較される)
#group 自動コマンドグループが存在するか
#group#event このグループとイベントに対して自動コマ
ンドが定義されているか
#group#event#pattern
このグループ、イベント、パターンに対す
る自動コマンド定義
##event このイベントに対する自動コマンドがサ
ポートされているか
例:
い。
ある少数の場合では無視されるが、名前の後に余計な文字があっては
ならない。将来はもっと厳格になる可能性があるので、現在許される
からといって頼ってはならない。
正しい例:
Note 引数は変数そのものではなく、文字列でなければならない。例
えば、次は動作しない:
を渡し、それが存在するかどうか判定してしまう。
method としても使用できる:
exp({expr}) exp()
{expr} の指数を返す。
値は [0, inf] の範囲の浮動小数点数 (Float)。
{expr} は浮動小数点数 (Float) か数値 (Number) でなければな
らない。
例:
method としても使用できる:
{+float 機能を有効にしてコンパイルしたときのみ有効}
expand({expr} [, {nosuf} [, {list}]]) expand()
ワイルドカードと{expr}内の特殊なキーワードを展開する。
'wildignorecase' が適用される。
{list} が指定されその値がTRUEなら、結果はリストで返される。
そうでない場合は結果は文字列で返される。その場合、複数のマッチ
があるときはそれらは文字 <NL> で区切られる。[Note: バージョン
5.0 では空白文字が用いられ、スペースを含むファイル名について問
題を引き起こしていた]
展開が失敗した場合、結果は空文字列となる。{expr} が '%'、'#'、
'<' で始まらない限り、存在しないファイル名というのは、結果の文
字列には含まれない。下記を参照のこと。
{expr} が '%' か '#' か '<' で始まる場合には、展開は
cmdline-specialのように、変換子を受け付け、それらに関連付け
られた変換が施される。ここに簡単な概略を示す:
% 現在のファイル名
# 代替バッファのファイル名
#n n番の代替バッファのファイル名
<cfile> カーソルの下のファイル名
<afile> autocmdのファイル名
<abuf> autocmdのバッファ名
<amatch> autocmdのマッチした名称
<cexpr> カーソル下のC言語の式
<sfile> 取り込み(source)中のファイル名、関数名
<slnum> 取り込み(source)中の行番号または関数内
の行番号
<sflnum> スクリプトファイルの行番号。関数内でも
同様。
<SID> "<SNR>123_" ここで "123" は現在のスク
リプトのID <SID>
<stack> コールスタック
<cword> カーソル下の単語(word)
<cWORD> カーソル下の単語(WORD)
<client> 最後に受け取ったメッセージの{clientid}
server2client()
変換子:
:p フルパス名を展開
:h ヘッド(ディレクトリ)
:t テイル(ファイル名だけ)
:r 拡張子が削除される
:e 拡張子だけ
例:
キストは無視されることに注意。従ってこれは正しくない:
い参照名であることにも注意が必要。もしも "<cfile>" が
"~/.cshrc" であった場合、"~/" を展開してホームディレクトリにす
るために、もう一度expand()を呼び出す必要がある:
変数と変換子の間には空白文字があってはならない。関数
fnamemodify()が通常のファイル名の変換には使用可能である。
カレントバッファや代替バッファの名前が未定義のときに '%' や
'#' を使うと空文字列になる。"%:p" を名無しのバッファに使用した
場合、結果はカレントディレクトリに '/' が付加されたものになる。
'%' や '#' や '<' で始まらない{expr}は、コマンドラインのファイ
ル名と同じように展開される。{nosuf}引数にTRUEを指定しない限
り、'suffixes' と 'wildignore' が使用される。
存在しないファイルの名前も結果の文字列に含まれる。"**" を使う
とディレクトリツリーを検索できる。例えば、カレントディレクトリ
以下にある全ての "README" を見つけるには次のようにする:
expand() はシェルの持っている変数や環境変数を展開できる。しか
し展開のためにシェルを起動するかもしれないので速度が遅くなるこ
とがある。expr-env-expand 参照。
展開された変数はファイル名のリストのように扱われる。環境変数を
展開できないときはそのままになる。よって、
":echo expand('$FOOBAR')" の結果は "$FOOBAR" となる。
存在するファイルを探すにはglob()を参照。外部コマンドの「生
の」実行結果を扱うにはsystem()を参照。
method としても使用できる:
expandcmd({expr}) expandcmd()
:edit などのExコマンドに対しておこなわれているように、{expr}
の特殊な項目を展開する。これは {expr} の中のどこでも、
expand() のような特殊なキーワードと環境変数を展開する。
"~user" および "~/path" は冒頭でのみ展開される。展開された文字
列を返す。例:
method としても使用できる:
extend({expr1}, {expr2} [, {expr3}]) extend()
{expr1}と{expr2}は両方ともリストListであるか、両方とも辞書
Dictionariesでなければならない。
両方ともリストであるなら、{expr2}を{expr1}に付け加える。
{expr3}が指定された場合は、{expr1}の第{expr3}番目の要素の前に
{expr2}の要素を挿入する。{expr3}が0のときは最初の要素の前に挿
入する。{expr3}がlen({expr1})に等しいときは末尾に{expr2}が付け
加えられる。
例:
数はリストの元の長さと同じである。
例として {expr3} が 1 のとき、最初の要素の N 個の新しいコピー
が挿入される(ここで N はリストの元の長さ)。
リストに1個の要素を加えるにはadd()を使う。2つのリストを連結
して新しいリストを作るには演算子+を使う:
両方とも辞書である場合:
{expr2}の全要素を{expr1}に加える。
{expr1}と{expr2}で共通のキーがある場合は、{expr3}によって動作
が決まる:
{expr3} = "keep" の場合: {expr1}の値そのままにする
{expr3} = "force" の場合: {expr2}の値で上書きする
{expr3} = "error" の場合: エラーメッセージを表示する E737
{expr3}が省略された場合は "force" と同じになる。
{expr2}が空でないならば{expr1}が変更される。必要ならば最初に
{expr1}のコピーを作ること。
{expr2}は変更されない。
{expr1} がロックされていて、かつ {expr2} が空でない場合は操作
は失敗する。
{expr1}を返す。
method としても使用できる:
extendnew({expr1}, {expr2} [, {expr3}]) extendnew()
extend() と同様だが、{expr1} へ要素を追加する代わりに、新し
いリストまたは辞書が作成されて返される。{expr1} は変更されな
い。要素は引き続き {expr2} で変更できるが、そうしたくないなら
最初に deepcopy() を利用すること。
feedkeys({string} [, {mode}]) feedkeys()
{string}中の各文字を、あたかもマッピングまたはユーザーによって
タイプされたかのように、処理キューに入れる。
デフォルトではこれらの文字は先行入力バッファの末尾に付け足され
る。そのためマッピングを展開している途中であれば、これらの文字
はマッピングを展開した後に来ることになる。他の文字の前に挿入す
るには、'i' フラグを使用する。それらはマッピングからの任意の文
字の前の挿入の次に実行される。
この関数は、{string}中の文字が処理されるまでは待たない。
特殊なキーを{string}に含めるにはダブルクォートと "\..." 記法を
使う(expr-quoteを参照)。例えば、feedkeys("\<CR>")は<Enter>
キーの押下をシミュレートする。しかしfeedkeys('\<CR>')とすると、
この文字の通り5文字を挿入する。
役に立つかもしれない特別なコードは <Ignore> だ。それは何もせず
に文字の待機を終了する。 <Ignore>
{mode}は以下の文字フラグを含む文字列:
'm' キーをマップ展開する。これが既定である。{mode}が省略さ
れたときは、挿入されたキーはマップ展開の対象になる。
'n' キーをマップ展開しない。
't' キーをタイプされたかのように扱う。そうでない場合は
マッピングから展開されたかのように扱われる。これは
undoや折り畳みの展開などで違いが現れる。
'L' 低レベル入力。UnixまたはGUIを使用している場合にのみ機
能する。キーは端末から来ているかのように使われる。他の
フラグは使用されない。 E980
CTRL-C で割り込み時、かつ 't' が含まれていると内部
"got_int" フラグが設定される。
'i' 追加する代わりに文字を挿入する。(上記参照)
'x' 先行入力が空になるまでコマンドを実行する。
これは ":normal!" を使うのと似ている。
'x' なしで数回feedkeys()を呼んだ後、'x' ありで1回
({string}が空でも可能) feedkeys()を呼ぶことで先行入力
をすべて実行できる。Note Vimが挿入モードを終了したとき
は、スクリプト続行前の文字入力待ちによる立ち往生を避け
るために、<Esc>が入力されたかのように振る舞う。
Note コマンドの実行中に feedkeys() を再帰的に呼び出し
た場合、最後の呼び出しですべての先行入力が消費される。
'!' 'x' と一緒に使用すると挿入モードを終了しない。タイマー
が少し後で挿入モードを終了するように設定されているとき
にテストで使用できる。CursorHoldIのテストに便利である。
戻り値は常に0。
method としても使用できる:
filereadable()
filereadable({file})
結果は数値で、{file}というファイルが存在し、読み込むことが可能
ならばTRUEとなる。ファイル{file}が存在しないかディレクトリ
だった場合には、結果はFALSEとなる。引数{file}は文字列として
使えればどのような表現でもよい。
ファイルが読み込み可能でなくてもよい場合にはglob()を使う。
{file} はそのまま使用されるため、最初にワイルドカードを展開す
ることを推奨する:
method としても使用できる:
以前の名前: file_readable().
filewritable({file}) filewritable()
結果は数値で、{file}というファイルが存在し、書き込むことが可能
ならば1となる。ファイル{file}が存在しないか書き込み不可能であ
る場合には、結果は0となる。{file}がディレクトリであり、書き込
み可能な場合、結果は2となる。
method としても使用できる:
filter({expr1}, {expr2}) filter()
{expr1}はリストList、Blob、辞書Dictionaryでなければなら
ない。
{expr1}の各要素に対して{expr2}を評価し、その結果が0ならばリス
トまたは辞書からその要素を削除する。Blob であればそのバイト
を削除する。
{expr2}は文字列stringまたは関数参照Funcrefでなければならな
い。
{expr2}が文字列の場合、{expr2}の内部ではv:valが現在の要素の
値を保持している。辞書の場合はv:keyが現在の要素のキーを保持
しており、リストの場合はv:keyが現在の要素のインデックスを保
持している。Blob の場合は v:key が現在のバイトのインデック
スになる。
例:
Note {expr2}は式を表す文字列である。バックスラッシュを二重に
しなくても済むようにliteral-stringを使うとよいだろう。ただし
その場合はシングルクォートを二重にしなければならない。
{expr2}がFuncrefの場合は、2つの引数で呼び出される:
1. 現在の要素のキーまたはインデックス。
2. 現在の要素の値。
関数は、その要素を保持すべきときはTRUEを返さなければならな
い。リストの奇数版目の要素を保持する例:
この操作はその場で(in-place)行われる。リストや辞書を変更したく
ない場合は最初にコピーを作ること:
{expr1}のリスト List、Blob、 または辞書 Dictionary をフ
ィルターした結果を返す。{expr2}を評価している最中にエラーが発
生した場合は、{expr1}内のそれ以降の要素の処理は行われない。
{expr2}が関数参照の場合、関数が "abort" フラグつきで定義されて
いない限り、関数内のエラーは無視される。
method としても使用できる:
finddir({name} [, {path} [, {count}]]) finddir()
{path}から{name}という名前のディレクトリを探す。ディレクトリを
上方・下方のどちらにも再帰的に検索できる。{path}の記法について
はfile-searchingを参照。
最初に見つかったディレクトリのパスを返す。そのディレクトリがカ
レントディレクトリの下にある場合は相対パスを返す。そうでなけれ
ば絶対パスを返す。
{path}が省略されたとき、または空のときはオプション 'path' の値
が使われる。
省略可能な引数{count}が指定されたときは、最初に見つかったディ
レクトリでなく、{count}番目に見つかったディレクトリを返す。
{count}が負の場合は、見つかったディレクトリ全てのリストList
を返す。これはexコマンド:findによく似ている。
{+file_in_path 機能付きでコンパイルされたときのみ利用可能}
method としても使用できる:
findfile({name} [, {path} [, {count}]]) findfile()
finddir()と同様だが、ディレクトリでなくファイルを検索する。
'suffixesadd' が適用される。
例:
"tags.vim" を見つけるまで再帰的に検索する。
method としても使用できる:
flatten({list} [, {maxdepth}]) flatten()
リスト {list} を {maxdepth} の深さまで平坦化する。{maxdepth}
が無い場合の結果は {maxdepth} が非常に巨大な数であるのように、
リスト List からネストを除去する。
{list} は変更が入るので、それを望まないなら flattennew() を
使うこと。
Vim9 script では flatten() は使用できないため、常に
flattennew() を使う必要がある。
E900
{maxdepth} はリストのネストをどれだけ深く変更するかを意味する。
{maxdepth} が0なら {list} は変更されない。
{maxdepth} は正の数でなければならない。
エラーがあったときは数値の0を返す。
例:
flattennew({list} [, {maxdepth}]) flattennew()
flatten() と同様だが最初に {list} のコピーを作る。
float2nr({expr}) float2nr()
{expr} の小数点以下を切り捨てて Number に変換する。
{expr} は Float または Number に評価されなければならない。
{expr} の値が Number の範囲外の場合、結果は 0x7fffffff また
は -0x7fffffff になる(64ビット数値が有効化されている場合は
0x7fffffffffffffff または -0x7fffffffffffffff)。
NaN は -0x80000000 になる(64ビット数値が有効化されている場合は
-0x8000000000000000)。
例:
method としても使用できる:
{+float 機能つきでコンパイルされたときのみ有効}
floor({expr}) floor()
{expr} 以下の最大の整数を Float で返す(切り捨て)。
{expr} は Float または Number に評価されなければならな
い。
例:
method としても使用できる:
{+float 機能つきでコンパイルされたときのみ有効}
fmod({expr1}, {expr2}) fmod()
{expr1} / {expr2} の余りを返す (割り算が表現できなくても)。
{expr2} が非ゼロなら {expr1} - i * {expr2} の結果を返す (i は
戻り値が {expr1} と同じ符号を持ちその絶対値が {expr2} よりも小
さくなるような値)。{expr2} がゼロならゼロが返る。戻り値の型は
浮動小数点数 (Float)。
{expr1} と {expr2} は浮動小数点数 (Float) か数値 (Number)
でなければならない。
例:
method としても使用できる:
{+float 機能を有効にしてコンパイルしたときのみ有効}
fnameescape({string}) fnameescape()
コマンド引数のファイル名として使うために {string} をエスケープ
する。'%' や '|' など特別な意味を持つ全ての文字がバックスラッ
シュでエスケープされる。
特別な文字とは、ほとんどのシステムにおいて
" \t\n*?[{`$\\%#'\"|!<" である。ファイル名にバックスラッシュが
現れるシステムにおいては 'isfname' の値に依存する。
先頭の '+' と '>' もエスケープされる(:edit と :write の引
数では特別な意味を持つ)。{string} が "-" である場合もエスケー
プされる(:cd の引数では意味を持つ)。
例:
method としても使用できる:
fnamemodify({fname}, {mods}) fnamemodify()
ファイル名{fname}を{mods}にしたがって変更する。{mods}はコマン
ドラインで使われるのと同様な文字列である。詳細は
filename-modifiersを参照。
例:
Note: {fname}の中の環境変数は展開されない。環境変数を展開させ
るにはexpand()を使うこと。
method としても使用できる:
foldclosed({lnum}) foldclosed()
結果は数値。{lnum}行目が閉じた折り畳みの中にあるなら、その折り
畳みを構成する最初の行の行番号を返す。{lnum}行目が閉じた折り畳
みに入っていないなら-1を返す。
{lnum} は getline() と同様に扱われる。例えば "." は現在の行、
"'m" は m でマークした行、など。
method としても使用できる:
foldclosedend({lnum}) foldclosedend()
結果は数値。{lnum}行目が閉じた折り畳みの中にあるなら、その折り
畳みを構成する最後の行の行番号を返す。{lnum}行目が閉じた折り畳
みに入っていないなら-1を返す。
{lnum} は getline() と同様に扱われる。例えば "." は現在の行、
"'m" は m でマークした行、など。
method としても使用できる:
foldlevel({lnum}) foldlevel()
カレントバッファの{lnum}行目の折り畳みレベルを表す数値を返す。
折り畳みがネストしているときは一番下のレベルを返す。{lnum}行目
に折り畳みがまったくないときは0を返す。折り畳みが開いているか
閉じているかは関係ない。('foldexpr' の中で)折り畳みを更新して
いる最中に呼ぶと、まだ折り畳みを更新していなく、折り畳みレベル
が未知の行に対しては-1を返す。特別な場合として、普通は1行前の
レベルは取得できる。
{lnum} は getline() と同様に扱われる。例えば "." は現在の行、
"'m" は m でマークした行、など。
method としても使用できる:
foldtext()
foldtext() 閉じた折り畳みに表示する文字列を返す。これはオプション
'foldtext' のデフォルトの関数であり、'foldtext' を評価している
ときにだけ呼ぶようにすべきである。この関数は変数v:foldstart,
v:foldend, v:folddashesを使用する。
戻り値の文字列は次のようになる:
その折り畳みに含まれている行数である。"abcdef" はその折り畳み
の中の最初の空行でない行のテキストである。行頭の空白と、"//"
や "/*"、'foldmarker' と'commentstring' に設定されている文字列
は削除される。
実際に折り畳みテキストを表示するときには、行の残りは
'fillchars' で設定した折り畳み用の文字で埋められる。
{+folding機能付きでコンパイルされたときのみ利用可能}
foldtextresult({lnum}) foldtextresult()
{lnum}行目の閉じた折り畳みに表示される文字列を返す。'foldtext'
を適切なコンテキストの中で評価する。{lnum}行目に閉じた折り畳み
がないときは空文字列を返す。
{lnum}はgetline()のときと同様に扱われる。つまり "." はカレン
ト行、"'m" はマークmを表す。
折り畳まれたテキストをHTMLなどにエクスポートするときに有用。
{+folding機能付きでコンパイルされたときのみ利用可能}
method としても使用できる:
foreground()
foreground() Vimのウィンドウを前面に移動する。この関数はクライアントからVim
サーバーへ送ると便利である。remote_send()
Win32では自分自身のウィンドウを前面に持ってくることが必ずしも
許可されていないので、動作しないかもしれない。そのときは代わり
にremote_foreground()を使うこと。
{Win32, Athena, Motif, GTKいずれかのGUI版とWin32コンソール版で
のみ利用できる}
fullcommand({name}) fullcommand()
短縮コマンド名から完全なコマンド名を取得する。コマンドの短縮名
については 20.2 を参照。
{name} は : から始まっても [range] を含んでよいが、それらは
スキップされ戻り値には含まない。
コマンドが存在しないか、曖昧になってしまう場合空文字列を返す
(ユーザー定義関数用)。
例えば fullcommand('s')、 fullcommand('sub')、
fullcommand(':%substitute') はすべて "substitute" を返す。
method としても使用できる:
funcref()
funcref({name} [, {arglist}] [, {dict}])
function()と同様である。ただし、返されたFuncrefは、関数を名
前ではなく参照で検索する。これは関数{name}が後で再定義されると
きに重要である。
function()とは違い、{name}はユーザー定義関数として存在してい
なければならない。また、autoload関数についても同様である。
{name}は組込み関数であってはならない。
method としても使用できる:
function() partial E700 E922 E923
function({name} [, {arglist}] [, {dict}])
関数{name}を参照するFuncrefの変数を返す。{name}はユーザー定義
関数でも組み込み関数でもよい。
ここで{name}は関数の参照、もしくは部分適用である。部分適用であ
るとき、それに格納されている辞書が使用され、{dict}引数が使用で
きない。例:
Funcrefが利用されるとき、その関数は{name}から見つけられる。こ
れは後で再定義された場合も同様である。常に同じ関数を見つけるた
めにはfuncref()を使うこと。
{arglist}もしくは{dict}が与えられると、関数の部分適用が作られ
る。すなわち引数のリスト及び/または辞書はFuncrefに格納され、
そのFuncrefが呼ばれるときに使用される。
格納された引数は他の引数よりも前に関数に渡される。しかし、メ
ソッドからの任意の引数の後になる。例えば:
method の場合:
function()はFuncrefにより多くの引数を加えるためにネストして呼
び出すことができる。余分な引数は、引数のリストに追加される。
例えば:
辞書は "dict" 関数を呼び出すときのみ有用である。この場合、
{dict}は "self" として渡される。例えば:
ある:
引数のリストと辞書を同時に使用することもできる:
method としても使用できる:
garbagecollect([{atexit}]) garbagecollect()
循環参照を持ち、使われていないリストList、辞書
Dictionaries、チャネルChannels、ジョブJobs をクリーン
アップする。
これはメモリ不足に陥ったときや、'updatetime' 経過後ユーザーの
キー入力を待っているときに自動的に行われるので、この関数を呼ぶ
必要があることはほとんどない。循環参照を持たない要素は、使われ
なくなったとき必ず解放される。長時間実行されるスクリプトの中で
循環参照を持つ非常に大きなリストや辞書を削除したときに有用であ
る。
省略可能な引数 {atexit} に 1 を指定すると、Vim を終了するとき
にもガーベッジコレクションが行われる。これはメモリリークを発見
するのに役に立つ。
ガーベッジコレクションはすぐには実行されず、安全な場合のみ実行
される。これはユーザーが文字を入力するのを待っているときであ
る。ガーベッジコレクションを強制するには、すぐに
test_garbagecollect_now()を使用すること。
get({list}, {idx} [, {default}]) get()
リストList {list}から{idx}番目の要素を取得する。この要素を取
得できないときは{default}を返す。{default}が省略されたときは0
を返す。
method として使用したいなら:
Blob {blob}から{idx}番目のバイトを取得する。このバイトを取得
できないときは{default}を返す。{default}が省略されたときは -1
を返す。
method として使用したいなら:
辞書Dictionary {dict}からキー{key}に関連づけられた値を取得す
る。この要素を取得できないときは{default}を返す。{default}が省
略されたときは0を返す。便利な例:
い場合は 'default' を返す。
method として使用したいなら:
Funcref {func}から項目を取得する。{what}の可能な値は:
"name" 関数名
"func" 関数
"dict" 辞書
"args" 引数リスト
method として使用したいなら:
getbufinfo()
getbufinfo([{expr}])
getbufinfo([{dict}])
バッファの情報を辞書のリストとして取得する。
引数なしの場合、すべてのバッファに関する情報が返される。
引数が辞書 Dictionary の場合、指定された条件を満たすバッファ
のみが返される。{dict}には以下のキーを指定できる:
buflisted リストされたバッファのみを含む。
bufloaded ロードされたバッファのみを含む。
bufmodified 修正されたバッファのみを含む。
それ以外の場合、{expr}は情報を返す特定のバッファを指定する。
{expr}の使用については、上記のbufname()を参照。バッファが見
つかった場合、返されるListには1つの項目がある。それ以外の場合、
結果は空のリストになる。
返される各List項目は、次のエントリを持つ辞書である:
bufnr バッファ番号。
changed バッファが変更されている場合はTRUE。
changedtick バッファに加えられた変更の数。
hidden バッファが隠されている場合はTRUE。
lastused バッファが最後に使用されたときの
localtime() のような秒単位のタイムス
タンプ。
{+viminfo 機能付きでコンパイルされた
ときのみ有効}
listed バッファがリストされている場合はTRUE。
lnum バッファがカレントウィンドウに表示され
ていたときの現在行の行番号。
過去にバッファがカレントウィンドウに表
示されていた場合にのみ有効である。特定
のウィンドウの最後のカーソル位置の行番
号が必要な場合は line() を使うこと:
linecount バッファ内の行数 (ロードされているとき
のみ有効)
loaded バッファがロードされている場合はTRUE。
name バッファ内のファイルへのフルパス。
signs バッファに設置された目印のリスト。
各リスト項目は、次のフィールドを含む辞
書である:
id 目印ID
lnum 行番号
name 目印名
variables バッファローカル変数の辞書への参照。
windows バッファを表示するwindow-IDのリスト
popups バッファを表示するpopupwindow-idのリ
スト
例:
バッファローカルオプションを取得するには:
method としても使用できる:
getbufline()
getbufline({expr}, {lnum} [, {end}])
バッファ{expr}の{lnum}行目から{end}行目まで(両端含む)の行から
なるリストListを返す。{end}が省略されたときは{lnum}行目だけ
からなるリストを返す。
{expr}の指定の仕方についてはbufname()を参照。
{lnum}と{end}では "$" でバッファの最後の行を表すことができる。
それ以外は数値でなければならない。
{lnum}が1より小さいときや、バッファの行数より大きいときは空リ
ストを返す。
{end}がバッファの行数より大きいときは、バッファの行数が設定さ
れたものとして扱う。{end}が{lnum}行目より前に設定された場合は
空リストを返す。
この関数は読み込まれているバッファに対してのみ動作する。既にア
ンロードされているバッファや存在しないバッファに対しては空リス
トを返す。
例:
method としても使用できる:
getbufvar({expr}, {varname} [, {def}]) getbufvar()
バッファ{expr}のオプションの値やバッファローカル変数{varname}
の値を返す。Note "b:" をつけない変数名を指定すること。
{varname} が空文字列の場合、全てのバッファローカル変数からなる
辞書 Dictionary を返す。
{varname} が "&" に等しいとき、すべてのバッファローカルオプショ
ンを持つ辞書 Dictionary を返す。
そうでなく、{varname} が "&" で始まるとき、バッファローカルオ
プションの値を返す。
グローバルオプション、バッファローカルオプションのどちらに対し
ても動作するが、グローバル変数、ウィンドウローカル変数、ウィン
ドウローカルオプションに対しては動作しない。
{expr}の指定の仕方についてはbufname()を参照。
バッファや変数が存在しないときは{def}または空文字列を返し、エ
ラーメッセージは表示されない。
例:
method としても使用できる:
getchangelist([{expr}]) getchangelist()
バッファ {expr} の changelist を返す。{expr} の使い方は前述
の bufname() を参照。バッファ {expr} が存在しない場合、空の
リストが返される。
返されるリストは 2 つのエントリを含む: 変更位置のリストと、リ
スト内の現在地。変更リスト内のそれぞれの項目は、以下の項目を含
む辞書になっている:
col 列番号
coladd 'virtualedit' 用の列のオフセット
lnum 行番号
バッファ {expr} がカレントバッファの場合、現在地はリスト内の位
置を指す。それ以外のバッファではリストの長さに設定される。
method としても使用できる:
getchar([expr]) getchar()
ユーザーまたは入力ストリームから1文字を取得する。
[expr] が省略された場合、1文字を取得できるまで待つ。
[expr] が0の場合、1文字を取得できる時だけ取得する。取得できな
い時は0を返す。
[expr] が1の場合は、1文字を取得できるかを判定するだけである。
入力は消費されない。取得できないと判定された時は0を返
す。
常に文字列として取得したい場合は getcharstr() を使用する。
[expr] が省略されたときや [expr] が0のときは、文字全体または特
殊キーを返す。それが1文字なら戻り値は数値である。これを文字列
に戻すにはnr2char()を使う。それ以外の場合にはエンコードして文
字列にして返す。
特殊キーとは0x80(10進数で128)で始まるバイト列からなる文字列で
ある。これは文字列 "\<Key>" と同じ値である(例: "\<Left>")。戻
り値は文字列であり、修飾キー(shift, control, alt)は含まれない。
[expr] が0や Esc が入力された場合は、これがエスケープシーケン
スの始まりであるかどうかをVimが知るために待つ間、短い遅延があ
るだろう。
[expr] が1のときは最初のバイトだけを返す。1バイト文字の場合、
これはその文字そのものを表す数値である。これを文字列に変換する
にはnr2char()を使う。
修飾キーを取得するには getcharmod() を使う。
ユーザーがマウスをクリックしたときはマウスイベントを返す。クリッ
クした位置はv:mouse_col, v:mouse_lnum, v:mouse_winid,
v:mouse_winで得られる。getmousepos() も使える。マウスの移
動イベントは無視される。
以下の例は、普通にマウスがクリックされたときと同じようにカーソ
ルを移動させる。
bracketed pasteを使用しているときは最初の文字のみが返され、ペー
ストされた残りのテキストは切り捨てられる。
xterm-bracketed-paste.
この関数を呼んだときプロンプトは表示されない。文字入力を待って
いることをなんらかの方法でユーザーがわかるようにしなければなら
ないだろう。画面は再描画されない、例えばウィンドウのリサイズ。
ポップアップウィンドウを使っているなら popup-filter を使うと
よりよく動作する。
入力された文字に対してマッピングは適用されない。
キーコードは置換される。つまりユーザーが<Del>を押した場合、
「生の」文字シーケンスでなく<Del>キーに対応するコードが得られ
る。
例:
あなたは<CursorHold>のような合成文字も取得するかもしれない。
多くの場合、あなたはこれを無視して別の文字を取得することにな
る:
getcharmod() getcharmod()
最後にgetchar()などで得た文字に対する修飾キーの状態を表す数値
を返す。以下の値の和となる:
2 shift
4 control
8 alt (meta)
16 meta (ALT と META が区別される場合)
32 マウスのダブルクリック
64 マウスのトリプルクリック
96 マウスのクアドラプルクリック (== 32 + 64)
128 command (Macintosh のみ)
文字自身に含まれていない修飾キーのみ取得できる。つまり、
Shift-aは修飾キーなしの "A" となる。
getcharpos()
getcharpos({expr})
{expr} の位置を得る。getpos() と同様だが返すリスト内の桁番号
はバイトインデックスの代わりに文字インデックスになっている。
getpos() が 2147483647 のような非常に大きな桁番号を返す場合、
getcharpos() は最後の文字の文字インデックスを返す。
例:
5行目のテキスト "여보세요" の '세' にカーソルがある状態:
method としても使用できる:
getcharsearch() getcharsearch()
現在の文字検索の情報である{dict}を返し、この辞書は下記のエント
リを持つ:
char 文字検索(t, f, T, F)で以前に使われた文
字。
もし文字検索が実行されていないなら空文字列。
forward 文字検索の方向。1は前方、0は後方。
until 文字検索の種類。1はtもしくはTの文字検索、0は
fもしくはFの文字検索。
下記の設定は前回の文字検索の方向にかかわらず、; で前方検索、
, で後方検索を常に行えるようになり便利である:
getcharstr([expr]) getcharstr()
ユーザーまたは入力ストリームから1文字を文字列として取得する。
[expr] が省略された場合、1文字を取得できるまで待つ。
[expr] が0もしくは偽の場合、1文字を取得できる時だけ取得する。
取得できない時は空文字列を返す。
[expr] が1もしくは真の場合は、1文字を取得できるかを判定するだ
けである。入力は消費されない。取得できないと判定された
時は空文字列を返す。
結果の数値が文字列に変換される以外は getchar() と同様に動作
する。
getcmdline() getcmdline()
現在のコマンドラインの内容を取得する。コマンドラインを編集して
いるときのみ動作する。つまりc_CTRL-\_eまたはc_CTRL-R_=を使っ
ているときのみ有効。
例:
パスワードを入力する時や inputsecret() を使う時は空文字列を
返す。
getcmdpos() getcmdpos()
コマンドラインにおけるカーソル位置をバイト単位で取得する。最初
の桁は1となる。コマンドラインを編集しているときのみ動作する。
つまりc_CTRL-\_eまたはc_CTRL-R_=または式マッピングを使って
いるときのみ有効。そうでないときは 0 を返す。
getcmdtype(), setcmdpos(), getcmdline()も参照。
getcmdtype() getcmdtype()
現在のコマンドラインの種類を返す。戻り値は次のいずれか:
: 通常のexコマンド
> デバッグモードコマンド debug-mode
/ 前方検索コマンド
? 後方検索コマンド
@ input() コマンド
- :insert または :append コマンド
= i_CTRL-R_=
コマンドラインを編集しているときのみ動作する。つまり
c_CTRL-\_eまたはc_CTRL-R_=または式マッピングを使っていると
きのみ有効。そうでないときは空文字列を返す。
getcmdpos(), setcmdpos(), getcmdline()も参照。
getcmdwintype() getcmdwintype()
現在のコマンドラインウィンドウ (command-line-window) の種類
を返す。戻り値の意味は getcmdtype() と同じ。コマンドライン
ウィンドウでなければ空文字列を返す。
getcompletion({pat}, {type} [, {filtered}]) getcompletion()
コマンドライン補完のマッチするリストを返す。{type}は何のための
ものかを指定する。次の補完タイプがサポートされている:
arglist 引数リスト内のファイル名
augroup 自動コマンドグループ
buffer バッファ名
behave :behaveサブオプション
color カラースキーム
command Exコマンド (および引数)
cmdline cmdline-completion の結果
compiler コンパイラ
cscope :cscopeのサブオプション
diff_buffer :diffget と :diffput の補完
dir ディレクトリ名
environment 環境変数名
event 自動コマンドのイベント
expression Vim式
file ファイルおよびディレクトリ名
file_in_path 'path'のファイルおよびディレクトリ名
filetype ファイルタイプ名 'filetype'
function 関数名
help ヘルプ項目
highlight ハイライトグループ
history :historyサブオプション
locale ロケール名 (locale -aの出力)
mapclear バッファ引数
mapping マッピング名
menu メニュー
messages :messagesサブオプション
option オプション
packadd 任意パッケージ pack-add 名
shellcmd シェルコマンド
sign :signサブオプション
syntax 構文ファイル名 'syntax'
syntime :syntimeサブオプション
tag タグ
tag_listfiles タグ、ファイル名
user ユーザー名
var ユーザー変数
{pat}が空文字列の場合、すべてのマッチが返される。それ以外の場
合、{pat}と一致する項目のみが返される。{pat}での特殊文字の使用
については、wildcardsを参照。
オプションの{filtered}フラグが1に設定されている場合、結果をフィ
ルタリングするために 'wildignore'が適用される。そうでなければ、
すべての一致が返される。'wildignorecase'オプションは常に適用さ
れる。
{type}が "cmdline" ならば cmdline-completion の結果が返され
る。
例えば、":call" コマンドの後で補完できる値は:
一致するものがなければ、空のリストが返される。{type}の値が無効
だと、エラーが発生する。
method としても使用できる:
getcurpos()
getcurpos([{winid}])
カーソルの位置を返す。これは getpos('.') に似ているが、追加の
"curswant" 情報を含む:
[0, lnum, col, off, curswant]
"curswant" は縦方向移動の優先的列番号である。
getcursorcharpos() と getpos() も参照。
最初の "bufnum" は常に0である。カーソルのバイトでの位置は
'col' に返される。文字の位置を得るには getcursorcharpos() を
使う。
オプションの {winid} 引数はウィンドウを指定する。これはウィン
ドウ番号か window-ID である。最後のカーソル位置を返すが、こ
れはバッファがカレントウィンドウでない場合、現在の値は無効にな
りうる。
{winid} が無効の場合、値がゼロのリストを返す。
次のようにしてカーソル位置の保存と復元ができる:
る方法については winrestview() を参照。
method としても使用できる:
getcursorcharpos()
getcursorcharpos([{winid}])
getcurpos() と同様だが返すリスト内の桁番号はバイトインデック
スの代わりに文字インデックスになっている。
Example:
3行目のテキスト "여보세요" の '보' にカーソルがある状態:
method としても使用できる:
getcwd()
getcwd([{winnr} [, {tabnr}]])
結果は現在の作業ディレクトリ名の文字列である。
{winnr} が指定された場合、現在のタブページ内の {winnr} のウィ
ンドウのローカルカレントディレクトリを返す。{winnr} にはウィン
ドウ番号またはwindow-IDが使える。
{winnr} が -1 の場合、グローバル作業ディレクトリ名を返す。
haslocaldir() も参照。
{winnr}と{tabnr}が指定された場合、{tabnr}のタブページ内の
{winnr}のウィンドウのローカルカレントディレクトリを返す。
{winnr}が -1 の場合、タブページの作業ディレクトリを返す。
{winnr}が 0 の場合、カレントウィンドウを使用し、{tabnr}が 0 の
場合はカレントタブページを使用する。
引数なしの場合は、カレントウィンドウの作業ディレクトリを返す。
もし引数が不正の場合、空文字列を返す。
例:
method としても使用できる:
getenv({name}) getenv()
環境変数{name}の値を返す。
変数が存在しない場合は v:null が返される。これは、空の文字列
に設定された変数とは異なるが、一部のシステムは空の値を削除され
る変数として解釈する。expr-env も参照。
method としても使用できる:
getfontname([{name}]) getfontname()
引数なしで使われた場合には現在の通常のフォント名を返す。ハイラ
イトグループNormalに対して使われるものと同様hl-Normal。
引数が指定された場合には{name}が有効なフォント名であるか判定さ
れる。有効でないときは空文字列を返す。
有効なときは実際のフォント名を返す。またはGUIが実際の名前の取
得をサポートしていないときは{name}をそのまま返す。
GUIモードで実行しているときのみ動作する。よってvimrcやgvimrcの
中では使えない。GUIモードが起動した直後にこの関数を呼ぶには、
自動コマンドGUIEnterを使うこと。
Note GTKのGUIはどんなフォント名でも受け付けてしまうため、名前
が有効であるかのチェックは機能しない。
method としても使用できる:
getfperm({fname}) getfperm()
{fname}で指定されたファイルの読み込み、書き込み、実行の許可属
性を示す文字列を返す。
{fname}が存在しない、またはそのディレクトリが読み込み不可能な
ときは空文字列を返す。
戻り値は "rwxrwxrwx" の形で、"rwx" フラグの各グループは順にファ
イルの所有者、ファイルが所属するグループ、その他のユーザーを表
す。許可属性が与えられていないフラグは "-" で置き換えられる。
例:
ば) "rw-r--r--" あるいは "rw-------" と表示する。
method としても使用できる:
許可属性を設定するにはsetfperm()を使用する。
getfsize({fname}) getfsize()
結果は数値で、{fname}で指定されるファイルのサイズをバイト単位
で返す。
{fname}がディレクトリのときは0を返す。
ファイル{fname}が見つからないときは-1を返す。
{fname} のサイズが Number の範囲外の場合は -2 を返す。
method としても使用できる:
getftime({fname}) getftime()
結果は{fname}で与えられたファイルの、最終更新時間を示す数値。
1970年1月1日からの経過時間(秒)で、strftime()に渡すことができる
だろう。localtime()とstrftime()も参照。
ファイル{fname}が見つからなかった場合には-1を返す。
method としても使用できる:
getftype({fname}) getftype()
{fname}で指定されたファイルの種別を示す文字列を返す。
{fname}が存在しないときは空文字列を返す。
ファイルの種別とそれらの結果の表を以下に示す:
通常ファイル "file"
ディレクトリ "dir"
シンボリックリンク "link"
ブロックデバイス "bdev"
キャラクタデバイス "cdev"
ソケット "socket"
FIFO "fifo"
それ以外 "other"
例:
される。"dir" と "file" しか返らないシステムもある。
MS-Windowsでは、ディレクトリへのシンボリックリンクは "link" の
代わりに "dir" を返す。
method としても使用できる:
getimstatus() getimstatus()
結果は数値で、IMEステータスがアクティブの場合は TRUE である。
'imstatusfunc' を参照。
getjumplist([{winnr} [, {tabnr}]]) getjumplist()
指定されたウィンドウの jumplist を返す。
引数なしの場合、カレントウィンドウを使用する。
{winnr} のみの場合、現在のタブページのこのウィンドウを使用す
る。{winnr} には window-ID も使用できる。
{winnr} と {tabnr} 両方の場合、指定されたタブページのウィンド
ウを使用する。
返されるリストは 2 つのエントリを含む: ジャンプ位置のリストと、
リスト内の最後に使われたジャンプ位置番号。ジャンプ位置リスト内
のそれぞれの項目は、以下の項目を含む辞書になっている:
bufnr バッファ番号
col 列番号
coladd 'virtualedit' 用の列のオフセット
filename 利用可能ならばファイル名
lnum 行番号
method としても使用できる:
getline()
getline({lnum} [, {end}])
{end}が指定されない場合は、カレントバッファの{lnum}行目の内容
を文字列にして返す。例:
よってその文字列が数字に変換される。よって、カーソルのある行の
文字列を取得するには:
文字列が返される。
{end}が指定された場合は、カレントバッファの{lnum}行目から
{end}行目までを要素とするリストListを返す。
{end}は{lnum}と同様に解釈される。
存在しない行は省略され、エラーメッセージは表示されない。
{end}が{lnum}より前になる場合は空リストを返す。
例:
method としても使用できる:
他のバッファの行を取得するにはgetbufline()を参照。
getloclist({nr} [, {what}]) getloclist()
ウィンドウ{nr}のlocationリストの全項目からなるリスト List を
返す。{nr} にはウィンドウ番号または window-ID が使える。{nr}
に0を指定するとカレントウィンドウになる。
locationリストウィンドウに対して使用すると、そこに表示されてい
るlocationリストが返る。ウィンドウ番号{nr}が無効な場合は、空リ
ストが返る。それ以外は getqflist() と同じ。
オプションの{what}辞書引数が指定されている場合、{what}にリスト
されている項目を辞書として返す。{what}のサポートされている項目
については、getqflist()を参照。
getqflist() の{what}でサポートされている項目に加え、
getloclist() では次の項目もサポートされている:
filewinid ロケーションリストからファイルを表示す
るのに使われているウィンドウのID。この
フィールドはロケーションリストウィンド
ウから呼び出されたときのみ適用される。
詳細は location-list-file-window を
参照。
ウィンドウ {nr} にlocationリストがないなら、デフォルト値の辞書
Dictionary を返す。
ウィンドウが存在しない場合、空の辞書を返す。
例 (getqflist-examples もまた参照):
getmarklist([{expr}]) getmarklist()
{expr} 引数が無い場合は全グローバルマークについての情報のリス
トを返す。mark
オプショナル引数 {expr} が指定されている場合、{expr} で指定
されたバッファのローカルマークの値を返す。{expr} の使い方は
bufname() を参照。
戻り値のリストの各要素は以下の内容の辞書Dictになっている:
mark 接頭辞 "'" が付いたマークの名前
pos マークの位置のリストList:
[bufnum, lnum, col, off]
詳細は getpos() を参照。
file ファイル名
特定のマークについて取得した情報の詳細は getpos() を参照。
method としても使用できる:
getmatches([{win}]) getmatches()
matchadd() と :match によりカレントウィンドウに定義された
全てのマッチの List を返す。setmatches() は getmatches()
で保存されたマッチのリストを復元できるので、getmatches() と
setmatches() は組み合わせて使うと便利である。
{win} が指定されたなら、カレントウィンドウの代わりに指定された
番号かウィンドウIDのウィンドウを使う。
例:
'priority': 10, 'id': 1}, {'group': 'MyGroup2',
'pattern': 'FIXME', 'priority': 10, 'id': 2}]
'priority': 10, 'id': 1}, {'group': 'MyGroup2',
'pattern': 'FIXME', 'priority': 10, 'id': 2}]
getmousepos() getmousepos()
マウスの最新の位置を示す辞書 Dictionary を返す。マウスクリッ
クのマッピングやポップアップウィンドウのフィルターで使うことが
できる。辞書の要素は:
screenrow 画面行
screencol 画面桁
winid クリックされたウィンドウ ID
winrow "winid" 内の行
wincol "winid" 内の桁
line "winid" 内のテキスト行
column "winid" 内のテキスト桁
全ての数値は 1 ベースである。
ウィンドウの上ではない場合、例えばコマンドラインの中などでは
"screenrow" と "screencol" のみが有効で、残りは 0 になる。
ウィンドウの下のステータスラインやウィンドウの右の垂直セパレー
ターの場合、"line" と "column" は 0 になる。
位置がテキストより後の場合、"column" はテキストのバイト長+1に
なる。
マウスがポップアップウィンドウの上の場合、そのウィンドウが使わ
れる。
getchar() を使ったとき、Vim 変数 v:mouse_lnum,
v:mouse_col と v:mouse_winid もこれらの値を提供する。
getpid()
getpid() Vim のプロセス ID を数値で返す。Unix と MS-Windows では Vim が
終了するまでこれは一意な数値である。
getpos()
getpos({expr}) {expr}の位置を返す。{expr}として指定できる値については
line()を参照。カーソル位置を得るには getcurpos() を参照。
結果は次の4個の要素を持つリストList:
[bufnum, lnum, col, off]
"bufnum" は、'0 や 'A のようなマークが指定されたときは、その
マークのバッファ番号となる。それ以外では0となる。
"lnum" と "col" はバッファ中の位置。桁番号は1から始まる。
"off" の値は、'virtualedit' がオフのときは常に0で、オンのとき
はその文字の始点からの画面上の桁のオフセットである。つまり、
カーソルが<Tab>の中や、その行の最後の文字より後にあるとき意味
を持つ。
Note: ビジュアルモードの '< と '> について: ビジュアルモードが
"V" (行選択モード) のとき、'< の桁番号はゼロ、'> の桁番号は大
きな値になる。
桁番号は行内のバイト位置のリストとして返される。行内の文字での
位置を取得するなら、getcharpos() を使う。
桁番号は 2147483647 のような非常に大きな値になり得る。これは
"行末の後" を意味する。
この関数はマークの位置を保存し、復元するために使われる:
method としても使用できる:
getqflist([{what}]) getqflist()
現在の全quickfixエラーのリスト List を返す。リストの各要素は
辞書で、以下の要素を持つ:
bufnr ファイル名を持つバッファの番号。その名前を取得
するにはbufname()を使う。
module モジュール名
lnum バッファ中の行番号(最初の行は1)
end_lnum
項目が複数行のときの最後の行番号
col 桁番号(最初の桁は1)
end_col 項目が範囲を持つときの最後の桁番号
vcol TRUE: "col" は画面上の桁
FALSE: "col" はバイトインデックス
nr エラー番号
pattern エラーの位置を特定するために使う検索パターン
text エラーの説明
type エラーメッセージの種類。'E', '1' など。
valid TRUE: エラーメッセージが認識されている
エラーリストがまったくないか、空であるときは空リストを返す。
quickfixリストの項目が存在しないバッファ番号とともに返る場合は
"bufnr" を0にして返される。(Note: いくつかの関数はバッファ番号
0を代替バッファとして受け付けるので、明確に0チェックを行う必要
がある)。
役に立つ応用例: 複数のファイルから正規表現検索を行い、見つかっ
たものに対してなんらかの操作をする:
オプションの{what}辞書引数が指定されている場合は、{what}にリス
トされている項目のみを辞書として返す。{what}では、以下の文字列
項目がサポートされている:
changedtick リストに行われた変更の総数を取得
quickfix-changedtick
context quickfix-context を取得
efm "lines" をパースするときに使われるエラーフォー
マット。存在しない場合はオプション
'errorformat' の値が使用される。
id quickfix-IDに対応するquickfixリストの情報を
取得。0 は現在のリストもしくは "nr" で指定され
たリストのidを意味する
idx 'id' または 'nr' で指定されたquickfixリスト内
の情報を取得した最後のエントリのインデックス。
もし0なら、カレントのエントリが使われる。
quickfix-index を参照
items quickfixリストのエントリ
lines 'efm' を使用して行のリストをパースし、結果のエ
ントリを返す。List 型のみを受け付ける。現在
のquickfixリストは変更を受けない。
quickfix-parseを参照。
nr このquickfixリストの情報を取得。0 は現在の
quickfixリストを意味し、"$" は最後のquickfixリ
ストを意味する
qfbufnr quickfixウィンドウに表示されているバッファの番
号。quickfixバッファが存在しないなら 0 が返る。
quickfix-buffer を参照。
size quickfixリスト内のエントリの数
title リストタイトルを取得 quickfix-title
winid quickfixのwindow-IDを取得
all 上記のquickfixのすべてのプロパティ
{what} の文字列以外の項目は無視される。特定の項目の値を取得す
るには 0 を設定する。
"nr" が存在しない場合、現在のquickfixリストが使用される。"nr"
と 0 でない "id" が両方とも指定されていた場合、"id" で指定され
たリストが使用される。
quickfixスタック内のリストの数を取得するには、{what} 内で "nr"
に "$" を設定する。返される辞書内の "nr" の値がquickfixスタッ
クサイズである。
"lines" が指定された場合、"efm" を除くその他すべての項目は無視
される。返される辞書は、エントリのリストからなるエントリ
"items" を含む。
返される辞書には、次のエントリが含まれる:
changedtick リストに行われた変更の総数
quickfix-changedtick
context quickfixリストコンテキスト。quickfix-context
を参照。存在しない場合、"" に設定される。
id quickfixリストID quickfix-ID。存在しない場
合、0 に設定される。
idx リスト内のquickfixのエントリのインデックス。
存在しない場合、0 に設定される。
items quickfixリストのエントリ。存在しない場合、空リ
ストに設定される。
nr quickfixリスト番号。存在しない場合、0 に設定さ
れる。
qfbufnr quickfixウィンドウに表示されているバッファの番
号。存在しない場合、0 に設定される。
size quickfixリスト内のエントリの数。存在しない場
合、0 に設定される。
title quickfixリストのタイトルテキスト。存在しない場
合、"" に設定される。
winid quickfixのwindow-ID。存在しない場合、0 に設
定される。
例 (getqflist-examplesも参照):
getreg([{regname} [, 1 [, {list}]]]) getreg()
レジスタ{regname}の中身を文字列にして返す。例:
getreg('=')は最後に評価した式レジスタの値を返す。(マップの中で
使用する)。
getreg('=', 1)はその式そのものを返す。これを使ってsetreg()で
復元することができる。他のレジスタの場合は、この引数は無視され
るので、常に指定していても害はない。
{list} が指定され、その値がTRUEのときは、戻り値はリスト
(List) になる。リストの各要素はテキスト 1 行である。これはレ
ジスタの中に値ゼロのバイトが含まれる場合に使用する。{list} を
指定しなかった場合は NL 文字と値ゼロのバイトは両方とも NL 文字
として扱われる (NL-used-for-Nul 参照)。
指定したレジスタがセットされていないときは、空のリストが返され
る。
{regname}を指定しないときはv:registerが使われる。
Vim9-script では {regname} は1文字でなくてはならない。
method としても使用できる:
getreginfo([{regname}]) getreginfo()
レジスタ {regname} についての詳細情報として次の項目を持つ辞書
を返す:
regcontents レジスタ {regname} に格納されている行
の、getreg({regname}, 1, 1) と同様の
リスト。
regtype レジスタ {regname} の getregtype()
相当の種別。
isunnamed 真偽値フラグ、v:true は現在指している
レジスタが無名レジスタであることを示
す。
points_to 無名レジスタであれば、現在指しているレ
ジスタを示す単一文字 (quotequoteを参
照)。
例えば、行を dd で削除後、このフィー
ルドは "1" となりそのレジスタには削除
したテキストが入る。
{regname} が不正なレジスタ名もしくは未設定の場合、空の辞書が返
される。
{regname} が未指定の場合、v:register が使われる。
戻り値の辞書は setreg() に渡すことができる。
Vim9-script では {regname} は1文字でなくてはならない。
method としても使用できる:
getregtype([{regname}]) getregtype()
レジスタ{regname}の種類を表す文字列を返す。
戻り値は次のいずれかとなる:
"v" 文字単位characterwiseの場合
"V" 行単位linewiseの場合
"<CTRL-V>{width}" 矩形blockwise-visualの場合
"" 空、または未知のレジスタの場合
<CTRL-V>は値0x16の1文字である。
{regname}を指定しないときはv:registerが使われる。
Vim9-script では {regname} は1文字でなくてはならない。
method としても使用できる:
gettabinfo([{tabnr}]) gettabinfo()
{tabnr}を指定しないと、すべてのタブページに関する情報がリスト
List として返される。各リスト項目は辞書 Dictionary である。
それ以外の場合、{tabnr} はタブページ番号を指定し、それに関する
情報が返される。タブページが存在しない場合、空のリストが返され
る。
各リストアイテムは、次のエントリを持つ辞書 Dictionary である:
tabnr タブページ番号。
variables タブページローカル変数の辞書への参照。
windows タブページのwindow-IDのリスト。
method としても使用できる:
gettabvar({tabnr}, {varname} [, {def}]) gettabvar()
タブページ {tabnr} のタブローカル変数 {varname} を取得する。
t:var
タブの番号は 1 から始まる。
{varname} が空のときは全タブローカル変数からなる辞書を返す。
Note: 指定する変数名は "t:" を除いた名前。
タブや変数が存在しないときは{def}または空文字列を返し、エラー
メッセージは表示されない。
method としても使用できる:
gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) gettabwinvar()
タブページ{tabnr}内のウィンドウ{winnr}のウィンドウローカル変数
{varname}の値を取得する。
{varname}が空のときは全ウィンドウローカル変数からなる辞書を返
す。
{varname}が "&" と等しい場合はすべてのウィンドウローカルオプ
ションの値を辞書 Dictionary に入れて返す。
{varname}が文字 "&" で始まるときはウィンドウローカルオプション
の値を取得する。
Note {varname}は "w:" をつけずに指定しなければならない。
タブページ番号は1から始まる。カレントタブページを指定するには
getwinvar()を指定する。
{winnr} にはウィンドウ番号またはwindow-IDが使える。
{winnr}が0のときはカレントウィンドウとなる。
グローバルオプション、バッファローカルオプション、ウィンドウ
ローカルオプションに対しても動作するが、グローバル変数やバッ
ファローカル変数に対しては動作しない。
ウィンドウやタブや変数が存在しないときは{def}または空文字列を
返し、エラーメッセージは表示されない。
例:
すべてのウィンドウローカル変数を取得するには:
method としても使用できる:
gettagstack([{winnr}]) gettagstack()
結果は辞書で、それはウィンドウ{winnr}のタグスタックである。
{winnr}にはウィンドウ番号または window-ID を指定できる。
{winnr}を指定しない時は、カレントウィンドウが使用される。
ウィンドウ{winnr}が存在しない場合、空の辞書が返される。
返される辞書には、次のエントリが含まれる:
curidx スタック内の現在のインデックス。スタッ
クの最上部にあるときは、(length + 1)
に設定される。スタックの最下部のイン
デックスは1である。
items スタック内の項目のリスト。各項目は、以
下で説明するエントリを含む辞書である。
length スタック内の項目数
スタック内の各項目は、次のエントリを持つ辞書である:
bufnr 現在のジャンプのバッファ番号
from タグジャンプの前のカーソル位置。返され
るリストの形式は getpos() を参照。
matchnr 現在の一致するタグ番号。名前に一致する
複数のタグが見つかった場合に使用され
る。
tagname タグの名前
タグスタックについての詳細は、tagstack を参照。
method としても使用できる:
gettext({text}) gettext()
可能であれば {text} を翻訳する。
これは主に配布する Vim script で使う。
メッセージの翻訳を生成するときに {text} が xgettext によって抽
出され、翻訳者が .po ファイルで翻訳済みメッセージを追加でき
Vim は gettext() が呼ばれた時に翻訳を検索する。
{text} はダブルクォートの文字列が望しい、なぜなら xgettext は
シングルクォートの文字列でのエスケープを理解しないため。
getwininfo([{winid}]) getwininfo()
ウィンドウに関する情報を、辞書のリスト List として返す。
{winid}が与えられた場合、そのIDを持つウィンドウに関する情報が
リスト List として1項目にして返される。ウィンドウが存在しな
い場合、結果は空のリストになる。
{winid}がなければすべてのタブページのすべてのウィンドウに関す
る情報が返される。
リストの各項目は次のエントリを持つ辞書 Dictionary である:
botline 最下の完全に表示されたバッファ行
bufnr ウィンドウ内のバッファ番号
height ウィンドウの高さ (winbarを除く)
loclist locationリストを表示してる場合は1
{Vimが+quickfix機能付きでコンパイル
されたときのみ有効}
quickfix quickfixまたはlocationリストウィンドウ
の場合は1
 
VIMリファレンスマニュアル by Bram Moolenaar
Vim script expression expr E15 eval
Vim script の利用についてはユーザーマニュアルの41章usr_41.txtでも解説され
ている。
注意: Vim script はコンパイル時に無効化できる。もしそうなっているとこのド
キュメントに書かれている事は有効ではない。+evalとno-eval-featureを参照。
このファイルは後方互換の Vim script について書かれている。より高速で、型チェッ
クや多くの機能に対応する Vim9 script については vim9.txt を参照のこと。
1. 変数 variables
1.1 変数の型
1.2 関数への参照 Funcref
1.3 リスト Lists
1.4 辞書 Dictionaries
1.5 Blobs Blobs
1.6 変数について補足 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. Vim scriptバージョン vimscript-version
11. +eval機能が無効 no-eval-feature
12. サンドボックス eval-sandbox
13. テキストロック textlock
テストのサポートは testing.txt を参照。
プロファイリングは profiling に記録されている。
==============================================================================
1. 変数 variables
1.1 変数の型
E712 E896 E897 E899
変数には10種類の型がある:
Number Integer
数値 32ビットまたは64ビットの符号有整数。expr-number
ビット数は v:numbersize で得られる。
例: -123 0x10 0177 0o177 0b1011
浮動小数点数 浮動小数点数。floating-point-format Float
{+float 機能つきでコンパイルされたときのみ}
例: 123.456 1.15e-6 -1.1e3
文字列 終端がNUL文字である8ビットの符号無し文字(バイト)。
expr-string 例: "ab\txx\"--" 'x-z''a,c'
リスト 要素の順序つきの列。詳細は List を参照。
例: [1, 2, ['a', 'b']]
辞書 順序を持たない連想配列: 各要素はキーと値を持つ。Dictionary
例:
{'blue': "#0000ff", 'red': "#ff0000"}
#{blue: "0000ff", red: "ff0000"}
Funcref 関数への参照 Funcref。
例: function("strlen")
辞書や引数とバインドすることができ、そのときは部分適用(Partial)
のように働く。
例: function("Callback", [arg], myDict)
特殊値 v:false, v:true, v:none と v:null。 Special
ジョブ ジョブに使われる。job_start()を参照。 Job Jobs
チャネル チャネルに使われる。ch_open()を参照。 Channel Channels
Blob バイナリラージオブジェクト。任意のバイトシーケンスを格納する。
詳細は Blob を参照。
例: 0zFF00ED015DAF
0z は空のBlobである。
数値と文字列は文脈に応じて相互に変換される。
数値から文字列への変換は数字のASCII表現によって行われる。例:
数値 123 --> 文字列 "123"
数値 0 --> 文字列 "0"
数値 -1 --> 文字列 "-1"
octal
文字列から数値への変換は旧来の Vim script のみで行われ、Vim9 script では行われ
ない。最初に出る数字を用いて数値に変換する。16進表記 "0xf9" や8進表記 "017" も
しくは "0o17"、2進表記の "0b10" も認識される。
NOTE: scriptversion-4 を使用する場合、先頭が "0" の8進数は認識されない。
"0o" 記法はパッチ 8.2.0886 が必要になる。
文字列が数字で始まらない場合結果は0となる。
例:
文字列 "456" --> 数値 456
文字列 "6bar" --> 数値 6
文字列 "foo" --> 数値 0
文字列 "0xf1" --> 数値 241
文字列 "0100" --> 数値 64
文字列 "0o100" --> 数値 64
文字列 "0b101" --> 数値 5
文字列 "-8" --> 数値 -8
文字列 "+8" --> 数値 0
文字列を強制的に数値に変換するには0を足す:
:echo "0100" + 0
64先頭の0によって8進数とみなされるのを防いだり、異なる基数を使うにはstr2nr()を
使う。
TRUE FALSE Boolean
ブール(真偽値)演算には数値が使われる。0は偽を意味し、非0は真を表す。また、
v:false と v:true を使うこともできる。Vim9 script では false と true
になる。
関数から真が返されたときは数値の 1 であり、偽が返されたときは数値の 0 である。
Note 次のコマンドをみると
:if "foo"
:" 実行されない
"foo" は 0 に変換され、それは偽を意味する。もし文字列がゼロでない数値から始ま:" 実行されない
る場合は真を意味する:
:if "8foo"
:" 実行される
文字列が空ではないか調べるためには empty() を使用して次のようにする。:" 実行される
:if !empty("foo")
falsy truthy
式は、型を無視した値が「真の一種」か「偽の一種」のどちらであるかだけを利用し
て、判定条件として使用できる。Falsy は:
値が0
空の文字列、Blob、リスト、辞書
それ以外の値は truthy。例:
0 falsy
1 truthy
-1 truthy
0.0 falsy
0.1 truthy
'' falsy
'x' truthy
[] falsy
[0] truthy
{} falsy
#{x: 1} truthy
0z falsy
0z00 truthy
non-zero-arg
関数の引数は、TRUE とは少し異なる場合がある: 引数が存在し、それが非ゼロの
Number、v:true または空でない String に評価される場合、値は TRUE と見なされ
る。
Note: " " と "0" も空文字列ではないので、TRUE と見なされる。List、Dictionary、
または Float は数値または文字列ではないため、FALSE と評価される。
E745 E728 E703 E729 E730 E731 E908 E910 E913
E974 E975 E976
リスト List, 辞書 Dictionary, Funcref, ジョブ Job, チャネル Channel
および Blob は自動的に変換されない。
E805 E806 E808
数値と浮動小数点数をまぜると浮動小数点数になる。それ以外には浮動小数点数への自
動的な変換は存在しない。文字列から浮動小数点数へは str2float() を使い、浮動小
数点数から文字列へは printf() を、浮動小数点数から数値へは float2nr() を使う。
E891 E892 E893 E894 E907 E911 E914
浮動小数点数が予期されているところでは数値も使用可能だが、それ以外は使用できな
い。
no-type-checking
変数の型を変更しようとしてもエラーは発生しない。
1.2 関数への参照
Funcref E695 E718
関数への参照は、関数function()、関数funcref()またはラムダ式expr-lambdaを
使うことで得られる。関数への参照は、式の中で関数名が要求される場所で使うと参照
先の関数を呼び出す。例:
:let Fn = function("MyFunc")
:echo Fn()
E704 E705 E707:echo Fn()
関数参照の変数名は、大文字、"s:"、"w:"、"t:"、"b:" のいずれかで始めなければな
らない。"g:" も使えるが、あとに続く名前は大文字で始めなければならない。関数参
照と参照先の関数の名前を同じにすることはできない。
関数を定義して、それへの参照を直接辞書に入れるための特別な形式がある。例:
:function dict.init() dict
: let self.val = 0
:endfunction
: let self.val = 0
:endfunction
この辞書のキーは小文字で始めなければならない。実際の関数名はここでは使われない。
numbered-functionも参照。
:callコマンドでも関数参照を使うことができる:
:call Fn()
:call dict.init()
:call dict.init()
参照先の関数名はstring()で得られる。
:let func = string(Fn)
call()を使うと、リスト型の変数を引数として関数参照を呼び出すことができる:
:let r = call(Fn, mylist)
Partial
関数参照は、辞書および/もしくは引数とバインドすることができる。これは部分適用
(Partial)とも呼ばれる。これは、辞書および/もしくは引数を function() または
funcref() に渡すことで作成される。その関数を呼び出すと、その辞書および/もしく
は引数がその関数に渡される。例:
let Cb = function('Callback', ['foo'], myDict)
call Cb('bar')
call Cb('bar')
これは、関数を以下のようにして呼び出す:
call myDict.Callback('foo', 'bar')
これは関数を何かに渡す場合、例えば ch_open() の引数とする場合などに非常に有
用である。
Note 関数の辞書へのバインドは、その関数が辞書のメンバーであるときにも発生する
ことに注意:
let myDict.myFunction = MyFunction
call myDict.myFunction()
call myDict.myFunction()
ここで、MyFunction() は myDict を "self" として受け取る。これは、"myFunction"
メンバーがアクセスされたときに起こる。"myFunction" を別の辞書 otherDict に代入
して呼び出すと、それは otherDict にバインドされる:
let otherDict.myFunction = myDict.myFunction
call otherDict.myFunction()
call otherDict.myFunction()
今度は、"self" は "otherDict" になる。しかし、辞書を明示的にバインドしたときに
はこれは起こらない:
let myDict.myFunction = function(MyFunction, myDict)
let otherDict.myFunction = myDict.myFunction
call otherDict.myFunction()
let otherDict.myFunction = myDict.myFunction
call otherDict.myFunction()
ここでは、"self" は "myDict" である。なぜなら明示的にバインドされているからで
ある。
1.3 リスト
list List Lists E686
リストとは順序を保つ要素の列である。要素はどんな型でもよい。要素へはインデック
ス番号を使ってアクセスする。列の任意の位置に要素を追加したり削除することができ
る。
リストの作成
E696 E697
リストを作るには、[]の中にコンマで区切って要素を書く。
例:
:let mylist = [1, two, 3, "four"]
:let emptylist = []
: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 = 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")
:echo get(mylist, idx, "NONE")
リストの連結
list-concatenation
2つのリストを連結するには演算子 "+" を使う:
:let longlist = mylist + [5, 6]
:let mylist += [7, 8]
:let mylist += [7, 8]
1個の要素を先頭または末尾に付け加えるには、[]で囲んでリストにして連結する。リ
ストの特定の要素を変更するには後述のlist-modificationを参照。
部分リスト
sublist
リストの一部分を取り出すには、[]の中に始点と終点のインデックスを書き、コロンで
区切る:
: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[:] " リストのコピーを作る
:let shortlist = mylist[2:2] " 1個の要素からなるリスト: [3]
:let otherlist = mylist[:] " リストのコピーを作る
最後のインデックスが含まれることに注意。排他的なインデックスを利用するなら
slice() メソッドを利用する。
終点のインデックスが始点のインデックスよりも前になってしまった場合は空リストと
なる。エラーメッセージは表示されない。
終点のインデックスがリストの長さより大きい場合は、長さ-1を指定したときと同じに
なる:
:let mylist = [0, 1, 2, 3]
:echo mylist[2:8] " 結果: [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]:let bb = aa
:call add(aa, 4)
:echo bb
リストのコピーを作るには関数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]:let bb = copy(aa)
:call add(aa, 4)
:let aa[0][1] = 'aaa'
:echo aa
: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:let blist = [1, 2, 3]
:echo alist is blist
:echo alist == blist
1Note リストの比較について注意: 2つのリストは、同じ長さを持ち、全要素が "==" の
意味で等しいとき、等しいとみなされる。ただ、1つ例外がある: 数値と文字列を比較
するとそれらは異なるとみなされる。変数に対して "==" で比較したときに行われるよ
うな自動的な型変換は行われない。例:
echo 4 == "4"
1 echo [4] == ["4"]
0つまり、リストの比較は数値や文字列の比較よりも厳格である。単純な値もリストに入
れることによりこの方法で比較することができる:
:let a = 5
:let b = "5"
:echo a == b
1:let b = "5"
:echo a == b
: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:]
:let var2 = mylist[1]
:let rest = mylist[2:]
要素が 2 つしかないときでもエラーにはならない。"rest" は空リストになる。
リストの変更
list-modification
リストの中の特定の要素を変更するには次のように:letを使う:
:let list[4] = "four"
:let listlist[0][3] = item
: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 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) " 要素の順序を反転させる
:call uniq(sort(list)) " ソートして重複を削除する
:call reverse(list) " 要素の順序を反転させる
:call uniq(sort(list)) " ソートして重複を削除する
for ループ
:for ループは、リスト、文字列または Blob の各要素に対してコマンドを実行する。
変数に各要素が順番に代入される。リストを使った例:
:for item in mylist
: call Doit(item)
:endfor
: call Doit(item)
:endfor
上の例は次と同じ:
:let index = 0
:while index < len(mylist)
: let item = mylist[index]
: :call Doit(item)
: let index = index + 1
:endwhile
:while index < len(mylist)
: let item = mylist[index]
: :call Doit(item)
: let index = index + 1
:endwhile
やりたいことがリストの各要素を変更するだけなら、forループを使うより関数map()
を使った方がよりシンプルになる。
:letコマンドと同じように、:forは変数のリストをループ変数にすることができる。
この場合、引数はリストのリストでなければならない。
:for [lnum, col] in [[1, 3], [2, 8], [3, 0]]
: call Doit(lnum, col)
:endfor
: 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
: call Doit(i, j)
: if !empty(rest)
: echo "remainder: " . string(rest)
: endif
:endfor
Blob の場合、一度に 1 バイトが使われる。
文字列の場合、任意の合成文字を含む 1 文字が文字列として使われる。例:
for c in text
echo 'This character is ' .. c
endfor
echo 'This character is ' .. c
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') " 各要素の前に ">> " をつける
: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 辞書
dict Dict Dictionaries Dictionary
辞書とは連想配列である。各要素はキーと値を持つ。要素はキーによって特定できる。
要素は特に順序を持たずに保持される。
辞書の作成
E720 E721 E722 E723
辞書を作るには、{}の中にコンマで区切って要素を書く。各要素のキーと値はコロンで
区切る。それぞれのキーは1度しか現れてはならない。例:
:let mydict = {1: 'one', 2: 'two', 3: 'three'}
:let emptydict = {}
E713 E716 E717:let emptydict = {}
キーは必ず文字列である。数値を使うこともできるが、自動的に文字列に変換される。
よって文字列 '4' のキーと数値4のキーは同一の要素を参照する。
Note 文字列 '04' と数値04は異なることに注意。なぜなら数値04は文字列 '4' に変換
されるからである。空文字列もまたキーとして使用できる。
literal-Dict #{}
すべてのキーを引用符で囲む必要を避けるために、#{} 形式を使用できる。この形式
は、ASCII文字、数字、'-' および '_' のみで構成されるキーを必要とする。
例:
:let mydict = #{zero: 0, one_key: 1, two-key: 2, 333: 3}
Note ここでは 333 は 文字列 "333" であることに注意。空のキーは #{} を使うことができない。
値はどんな式でもよい。辞書を値にすると、ネストした辞書ができる:
:let nestdict = {1: {11: 'a', 12: 'b'}, 2: {21: 'c'}}
最後の要素の後に余分なコンマがあると無視される。
要素にアクセスする
通常、要素にアクセスするには[]の中にキーを書く:
:let val = mydict["one"]
:let mydict["four"] = 4
:let mydict["four"] = 4
また、この書き方で既存の辞書に要素を追加できる。この点はリストと異なる。
キー名がアルファベット、数字、アンダースコアだけからなる場合は、以下の形式が使
えるexpr-entry:
:let val = mydict.one
:let mydict.four = 4
:let mydict.four = 4
要素はリストや辞書を含むどんな型でもよいため、インデックス参照とキー参照を続け
て書くことができる:
:echo dict.key[idx].key
辞書からリストへの変換
辞書の全要素に対してループを行いたい場合がある。そのためには辞書をリストに変換
し、そのリストに対して:forループを行う。
多くの場合はキーに対してループを行う。これには関数keys()を使う:
:for key in keys(mydict)
: echo key . ': ' . mydict[key]
:endfor
: echo key . ': ' . mydict[key]
:endfor
このキーのリストはソートされていない。ソートさせるには関数sort()を使う:
:for key in sort(keys(mydict))
値に対してループを行うには関数values()を使う:
:for v in values(mydict)
: echo "value: " . v
:endfor
: echo "value: " . v
:endfor
キーと値両方を得るには関数items()を使う。この関数は、キーと値の2個の要素から
なるリストのリストを返す:
:for [key, value] in items(mydict)
: echo key . ': ' . value
:endfor
: 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
: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
:let dict['one'] = item
辞書から要素を取り除くにはremove()か:unletを使う。以下のように辞書からキー
"aaa" を取り除くには3つの方法がある:
:let i = remove(dict, 'aaa')
:unlet dict.aaa
:unlet 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' にマッチしない要素を全て取り除く。このコマンドで全てのエントリを除去することもできる:
call filter(dict, 0)
関数を辞書に入れる
Dictionary-function self E725 E862
関数が "dict" 属性つきで定義されると、特殊な方法で呼び出すことができる。例:
:function Mylen() dict
: return len(self.data)
:endfunction
:let mydict = {'data': [0, 1, 2, 3], 'len': function("Mylen")}
:echo mydict.len()
: 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()
: return len(self.data)
:endfunction
:echo mydict.len()
:function mydict.len()
: return len(self.data)
:endfunction
:echo mydict.len()
こうすると関数に番号がふられ、dict.lenがこの関数を参照するFuncrefとなる。こ
の関数はFuncrefを通してのみ呼び出せる。参照しているFuncrefがなくなると、こ
の関数は自動的に削除される。
番号付き関数には "dict" 属性を付ける必要はない。
番号付き関数でエラーが発生したときは、あるトリックを使うことで発生源を確認でき
る。例えば 42 という関数なら次のようにする:
:function {42}
辞書操作関数
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') " 各要素の前に ">> " をつける
: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 Blobs
blob Blob Blobs E978
Blobは、バイナリオブジェクトである。例えば、ファイルから画像を読んでチャネルを
通し送信することなどに使える。
Blobは、ほとんどの場合、数値の List のように振る舞う。数値は、0 から 255 の
8ビットの値を持つ。
Blobの作成
BlobはBlobリテラル blob-literal を使って作成できる:
:let b = 0zFF00ED015DAF
読みやすくするために、ドットをバイト間(16進文字のペア)に挿入することができる。ドットは値を変更しない:
:let b = 0zFF00.ED01.5DAF
Blobは readfile() で引数{type}を "B" に設定してファイルから読み込むことがで
きる。例:
:let b = readfile('image.png', 'B')
Blobは、ch_readblob() 関数を使用してチャネルから読み取ることができる。
Blobのインデックス
blob-index E979
Blob内のバイトは、Blobの後ろに角括弧でインデックスを入れることによってアクセス
することができる。インデックスは 0 から始まるため、最初のバイトのインデックス
は 0 になる。
:let myblob = 0z00112233
:let byte = myblob[0] " 1番目のバイトを取得: 0x00
:let byte = myblob[2] " 3番目のバイトを取得: 0x22
:let byte = myblob[0] " 1番目のバイトを取得: 0x00
:let byte = myblob[2] " 3番目のバイトを取得: 0x22
負のインデックスは終端から数えられる。インデックス -1 はBlobの最後のバイト、-2
は最後の1つ前のバイトを表す。
:let last = myblob[-1] " 最後のバイトを取得: 0x33
無効なインデックスに対するエラーを回避するには、get() 関数を使用すること。項
目が利用できない場合、-1 または指定したデフォルト値が返される:
:echo get(myblob, idx)
:echo get(myblob, idx, 999)
:echo get(myblob, idx, 999)
Blobの繰り返し
:for ループは、Blobの各バイトに対してコマンドを実行する。ループ変数はBlobの
各バイトに設定される。例:
:for byte in 0z112233
: call Doit(byte)
:endfor
これは、0x11, 0x22 および 0x33 で Doit() を呼び出す。: call Doit(byte)
:endfor
Blobの連結
2つのBlobは "+" 演算子で連結できる:
:let longblob = myblob + 0z4455
:let myblob += 0z6677
:let myblob += 0z6677
Blobの決まった場所を変更するには、下記の blob-modification を参照。
Blobの一部
Blobの一部は、角括弧内のコロンで区切られた最初と最後のインデックスを指定するこ
とによって取得できる:
:let myblob = 0z00112233
:let shortblob = myblob[1:2] " 0z1122 を取得
:let shortblob = myblob[2:-1] " 0z2233 を取得
:let shortblob = myblob[1:2] " 0z1122 を取得
:let shortblob = myblob[2:-1] " 0z2233 を取得
最初のインデックスを省略することはゼロと同じである。最後のインデックスを省略す
ることは -1 と同じである。
:let endblob = myblob[2:] " 項目2から終端まで: 0z2233
:let shortblob = myblob[2:2] " 1バイトのBlob: 0z22
:let otherblob = myblob[:] " Blobのコピーを作成
:let shortblob = myblob[2:2] " 1バイトのBlob: 0z22
:let otherblob = myblob[:] " Blobのコピーを作成
最初のインデックスがBlobの最後のバイトを超えている場合、または2番目のインデッ
クスが最初のインデックスより前にある場合、結果は空のBlobになる。エラーメッセー
ジはない。
2番目のインデックスがリストの長さ以上の場合、長さから 1 を引いたものが使用され
る:
:echo myblob[2:8] " result: 0z2233
Blobの変更
blob-modification
Blobの特定のバイトを変更するには、 :let を使用する:
:let blob[4] = 0x44
インデックスがBlobの終端を1つ超える場合は、それが追加される。それより上のイン
デックスはエラーである。
バイトシーケンスを変更するには、[:] 表記が使用できる:
let blob[1:3] = 0z445566
置き換えられたバイトの長さは、提供された値と丁度同じでなければならない。 E972Blobの一部を変更するには、変更する最初と最後のバイトを指定する。値の範囲内のバ
イト数は同じでなければならない:
:let blob[3:5] = 0z334455
関数 add(), remove() および insert() も使用できる。
Blobの同一性
Blobは等しいかどうか比較することができる:
if blob == 0z001122
または、同一性の等しさのために: if blob is otherblob
blob-identity E977変数 "aa" がBlobで、別の変数 "bb" に代入すると、両方の変数は同じBlobを参照す
る。そして、"is" 演算子はtrueを返す。
[:] または copy() を使用してコピーを作成する場合、値は同じだが、同一性は異な
る:
:let blob = 0z112233
:let blob2 = blob
:echo blob == blob2
1:let blob2 = blob
:echo blob == blob2
:echo blob is blob2
1 :let blob3 = blob[:]
:echo blob == blob3
1:echo blob == blob3
:echo blob is blob3
0Blobのコピーを作成するには、copy() 関数を使用する。[:] を使っても上で説明し
たように動作する。
1.6 変数について補足
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
expr2 ? expr1 : expr1 if-then-else 条件式
expr2 expr3
expr3 || expr3 ... 論理和
expr3 expr4
expr4 && expr4 ... 論理積
expr4 expr5
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、辞書 Dictionary または
Blob のインスタンス
expr5 isnot expr5 異なるリスト List、辞書 Dictionary または
Blob のインスタンス
expr5 expr6
expr6 + expr6 ... 足し算、リストまたはBlobの連結
expr6 - expr6 ... 引き算
expr6 . expr6 ... 文字列の連結
expr6 .. expr6 ... 文字列の連結
expr6 expr7
expr7 * expr7 ... 掛け算
expr7 / expr7 ... 割り算
expr7 % expr7 ... 剰余(割った余り)
expr7 expr8
! expr7 論理否定
- expr7 単項のマイナス {訳注: -1等}
+ expr7 単項のプラス
expr8 expr9
expr8[expr1] 文字列のバイト、またはリストの要素
expr8[expr1 : expr1] 文字列の部分文字列、またはリストの部分リスト
expr8.name 辞書 Dictionary の要素
expr8(expr1, ...) Funcref 変数による関数呼び出し
expr8->name(expr1, ...) method 呼び出し
expr9 number 数定数
"string" 文字列定数。バックスラッシュは特別な意味を持つ
'string' リテラル文字列定数。'を含めるには2重にする
[expr1, ...] リスト List
{expr1: expr1, ...} 辞書 Dictionary
#{key: expr1, ...} 辞書 Dictionary
&option オプション変数
(expr1) 式の入れ子
variable 内部変数
va{ria}ble 波括弧付きの内部変数
$VAR 環境変数
@r レジスタ 'r' の値
function(expr1, ...) 関数呼出し
func{ti}on(expr1, ...) 波括弧付きの関数呼出し
{args -> expr1} ラムダ式
"..." はその演算が、その後に他の演算を続ける事ができることを示している。
例:
&nu || &list && &shell == "csh"
一つのレベルにある全ての式は左から右に解釈される。
expr1 expr1 trinary falsy-operator ?? E109
-----
三項演算子: expr2 ? expr1 : expr1
Falsy 演算子: expr2 ?? expr1
三項演算子
'?' より前の式は数値として評価される。その結果がTRUEであった場合、'?' と ':'
に挟まれた式の値がこの式全体の値となり、そうでなかった場合は ':' 以降の式の値
が全体の値となる。
例:
:echo lnum == 1 ? "先頭" : lnum
始めの式が "expr2" であるから、そこに別の?:を含むことはできない。残り二つの式
については以下のように再帰的な?:の利用が許される。
例:
:echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum
読み易くするために、行継続line-continuationを利用することが推奨される:
:echo lnum == 1
:\ ? "top"
:\ : lnum == 1000
:\ ? "last"
:\ : lnum
:\ ? "top"
:\ : lnum == 1000
:\ ? "last"
:\ : lnum
':' の前には必ずスペースを入れること。そうでないと "a:1" のような変数の使用と
間違えてしまう可能性がある。
Falsy 演算子
これは "null合体演算子" としても知られている、しかし複雑すぎるため、単に Falsy
演算子と呼ぶことにした。
'??' の前の式が評価される。truthy と評価された場合、これが結果として使われ
る。
そうでないなら、'??' の後の式が評価され、結果として使われる。これがもっとも便
利なのは、ゼロや空な結果になりうる式でデフォルト値を持つ場合:
echo theList ?? 'list is empty'
echo GetName() ?? 'unknown'
echo GetName() ?? 'unknown'
これは同等だが、同じではない:
expr2 ?? expr1
expr2 ? expr2 : expr1
2行目は "expr2" が2度評価される。expr2 ? expr2 : expr1
expr2 and expr3 expr2 expr3
---------------
expr3 || expr3 .. 論理和 expr-barbar
expr4 && expr4 .. 論理積 expr-&&
演算子 "||" と "&&" は左右に一つずつ引数を取る。引数は数値に変換される。結果は:
入力 出力
n1 n2 n1 || n2 n1 && n2
FALSE FALSE FALSE FALSE
FALSE TRUE TRUE FALSE
TRUE FALSE TRUE FALSE
TRUE TRUE TRUE TRUE
演算子は続けて書く事ができる。例:
&nu || &list && &shell == "csh"
Note "&&" は "||" よりも高い優先順位を持っている。これは次の事を意味する:
&nu || (&list && &shell == "csh")
結果が確定した時点で残りの式は省略され、解釈されない。これはC言語で行われるこ
とに似ている。例:
let a = 1
echo a || b
echo a || b
これはaがTRUEであるため、変数bが宣言されていなくても有効であり、結果は絶対
にTRUEである。次のも同様に:
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 expr-isnot expr-is# expr-isnot#
expr-is? expr-isnot?
'ignorecase'次第 大小文字考慮 大小文字無視
等しい == ==# ==?
等しくない != !=# !=?
より大きい > ># >?
より大きいか等しい >= >=# >=?
より小さい < <# <?
より小さいか等しい <= <=# <=?
正規表現マッチ =~ =~# =~?
正規表現非マッチ !~ !~# !~?
同一のインスタンス is is# is?
異なるインスタンス isnot isnot# isnot?
例:
"abc" ==# "Abc" 0と評価される
"abc" ==? "Abc" 1と評価される
"abc" == "Abc" 'ignorecase' が設定されていれば1と、でなければ0と評価
E691 E692
リストListはリストとだけ比較可能で、==系、!=系、is、isnotのみ利用できる。
これらはそれぞれのリストの値を再帰的に比較する。大文字小文字無視にすると要素を
比較するときに大文字小文字を無視する。
E735 E736
辞書Dictionaryは辞書とだけ比較可能で、==系、!=系、is、isnotのみ利用できる。
これらは辞書のキー/値を再帰的に比較する。大文字小文字無視にすると要素を
比較するときに大文字小文字を無視する。
E694
FuncrefはFuncrefとだけ比較可能で、"equal", "not equal", "is", "isnot" のみ
利用できる。大文字小文字は常に区別される。引数や辞書が(部分適用に)バインドされ
ているかどうかも重要である。辞書も同値(あるいは "is" の場合は同一)でなければな
らず、引数も同値(あるいは同一)でなければならない。
関数参照が同じ関数を指しているのかを、バインドされた辞書や引数を無視して比較し
たい場合は、get() を使用して関数名を取得すればよい:
if get(Part1, 'name') == get(Part2, 'name')
" Part1 と Part2 は同じ関数を指している
" Part1 と Part2 は同じ関数を指している
リスト List 、辞書 Dictionary または Blob に対して "is" や "isnot" を使
うと、それらの式が同じリスト、辞書 または Blob のインスタンスを参照している
か判定される。リストのコピーと元のリストは異なると判定される。リスト、辞書また
は Blob 以外に対して "is" は "equal" と同じで、"isnot" は "not equal" と同じ
である。ただし "is"、"isnot" は型が異なると値が等しくない点が "==" とは異なる。
echo 4 == '4'
1
echo 4 is '4'
0
echo 0 is []
0
"is#"/"isnot#" と "is?"/"isnot?" は大文字小文字を区別するかどうかが違う。1
echo 4 is '4'
0
echo 0 is []
0
文字列と数値を比較した場合、文字列が数値に変換され、数値として比較される。これ
は以下のようになることを意味する:
echo 0 == 'x'
1
なぜなら、'x' は数値のゼロに変換されるからである。しかし、1
echo [0] == ['x']
0
リストや辞書の中ではこの変換は行われない。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 足し算、リスト List または Blob の連結 expr-+
expr6 - expr6 引き算 expr--
expr6 . expr6 文字列の連結 expr-.
expr6 .. expr6 文字列の連結 expr-..
リストに対しては "+" のみ可能で、expr6は両方ともリストでなければならない。結果
は2つのリストを連結した新しいリスト。
文字列の連結には ".." が推奨される。"." はあいまいで、Dict メンバーアクセス
と浮動小数点数にも使用される。
vimscript-version が2以上の場合は "." を使用することはできない。
expr7 * expr7 掛け算 expr-star
expr7 / expr7 割り算 expr-/
expr7 % expr7 剰余(割った余り) expr-%
"." と ".." を除く全ての演算子は自動的に文字列を数値に変換する。
ビット演算については and(), or(), xor() を参照。
"+" と "." の違いに注意:
"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 だった)
64ビット数値が有効化されている場合は:
0 / 0 = -0x8000000000000000 (浮動小数点数の NaN のようなもの)
>0 / 0 = 0x7fffffffffffffff (正の無限大のようなもの)
<0 / 0 = -0x7fffffffffffffff (負の無限大のようなもの)
'%' の右辺(法)が0の場合、結果は0になる。
これらは全てFuncrefには適用できない。
. と % は浮動小数点数には適用できない。 E804
expr7 expr7
-----
! expr7 論理否定 expr-!
- expr7 単項マイナス expr-unary--
+ expr7 単項プラス expr-unary-+
'!' 演算子ではTRUEはFALSEに、FALSEはTRUEになる。
'-' では数値の符号が反転される。
'+" では変化はない。Note: "++" は効果がない。
文字列はまず数値に変換される。
これら2つは繰り返したり混ぜたりできる。例:
!-1 == 0
!!8 == 1
--9 == 9
expr8 expr8
-----
この式は expr9、もしくは連続する以下の選択方式であり、どんな順番でもよい。
例として、これらはすべて可能である:
expr8[expr1].name
expr8.name[expr1]
expr8(expr1, ...)[expr1].name
expr8->(expr1, ...)[expr1]
評価は常に左から右に行われる。
expr8[expr1] 文字列またはリストの要素 expr-[] E111
E909 subscript
旧来の Vim script では:
expr8が数値か文字列ならば、この値は文字列 expr8 の第 expr1 番目のバイトからな
る1バイトの文字列となる。expr8は文字列 (数値の場合は自動で文字列に変換される)、
expr1は数として扱われる。マルチバイトのエンコーディングを認識しないため、代わ
りの方法は byteidx() を参照するか、split()を使って文字列を文字のリストに変
換すれば良い。例えばカーソルの下のバイトを得るには:
:let c = getline(".")[col(".") - 1]
Vim9 script では:
expr8 が文字列ならば、この値は文字列 expr8 の第 expr1 番目の文字 (合成文字があ
る場合はそれらを全て含む) に相当する文字列となる。バイトインデックスの場合は
strpart() を使う。
インデックスが0の場合最初のバイトもしくは文字になる。注意: テキストの列番号は0
始まりである!
文字列の長さよりも大きなインデックスが指定された場合、結果は空文字列になる。負
数のインデックスを指定すると、結果は常に空文字列になる(後方互換性のため)。
最後のバイトもしくは文字を得るには[-1:]を使うこと。
Vim9 script では負数のインデックスはリストと同様に使用され、終端からのカウント
になる。
expr8がリストListならばインデックスexpr1の要素が返る。取りうるインデックスの
値についてはlist-indexを参照。インデックスが範囲を超えている場合はエラーとな
る。例:
:let item = mylist[-1] " 最後の要素を取得
一般的には、インデックスが正でリストの長さ以上または、負でリストの長さ×-1より
小さいときエラーとなる。
expr8[expr1a : expr1b] 部分文字列または部分リスト expr-[:]
expr8が文字列ならば、バイトか文字数でexpr1aからexpr1bまでの部分文字列となる
(両端を含む)。expr8は文字列として扱われ、expr1aとexpr1bは数値として扱われる。
旧来の Vim script ではインデックスはバイトインデックスとなる。マルチバイトのエ
ンコーディングは認識しない。マルチバイト文字列のインデックスを計算する方法につ
いては byteidx() を参照。expr8が数値ならば最初に文字列に変換される。
Vim9 script ではインデックスは文字インデックスであり、合成文字を含む {訳注: 1
個の基底文字とその任意個の合成文字をまとめて 1 としてカウントする}。バイトイン
デックスを使用するには strpart() を使用する。合成文字を含まない文字インデッ
クスを使用するには strcharpart() を使用する。
インデックスの expr1b の項目は含まれ、内包的である。排他的なインデックスは
slice() 関数を使う。
expr1aが省略されたときは0となる。expr1bが省略されたときは文字列の長さ-1となる。
負数のインデックスを使うことによって文字列の末尾から取り出すことができる。-1は
最後の文字、-2は最後から2文字目…を表す。
インデックスがその文字の範囲外に出てしまったときは、その文字は省かれる。expr1b
がexpr1aより小さいときは空文字列となる。
例:
:let c = name[-1:] " 文字列の最後のバイト
:let c = name[0:-1] " 文字列全体
:let c = name[-2:-2] " 文字列の最後から2バイト目
:let s = line(".")[4:] " 5バイト目から末尾まで
:let s = s[:-3] " 最後の2文字を削除する
:let c = name[0:-1] " 文字列全体
:let c = name[-2:-2] " 文字列の最後から2バイト目
:let s = line(".")[4:] " 5バイト目から末尾まで
:let s = s[:-3] " 最後の2文字を削除する
slice
expr8が List ならば、インデックスexpr1aとexpr1bの間の要素からなる新しい List
となる。すぐ上で説明した文字列の場合と同様である。部分リストsublistも参照の
こと。例:
:let l = mylist[:3] " 最初の4個の要素
:let l = mylist[4:4] " 1個の要素からなるリスト
:let l = mylist[:] " リストの浅いコピー
:let l = mylist[4:4] " 1個の要素からなるリスト
:let l = mylist[:] " リストの浅いコピー
expr8が Blob ならば、インデックスexpr1aとexpr1bのバイト数を含む新しい Blob
となる。
例:
:let b = 0zDEADBEEF
:let bs = b[1:2] " 0zADBE
:let bs = b[:] " 0zDEADBEEF のコピー
:let bs = b[1:2] " 0zADBE
:let bs = b[:] " 0zDEADBEEF のコピー
Funcrefに対してexpr8[expr1]やexpr8[expr1a : expr1b]を使うとエラーになる。
部分リストでスコープと変数に続くコロンとの混乱に注意してください:
mylist[n:] " 変数nは使える
mylist[s:] " スコープs:を使うとエラー!
mylist[s:] " スコープs:を使うとエラー!
expr8.name 辞書Dictionaryの要素 expr-entry
expr8が辞書Dictionaryのとき、ドットをつけるとその後に書かれた名前が辞書の
キーと見なされる。例: expr8[name]。
名前は変数名と同じようにアルファベットと数字だけから構成されなければならない
が、数字で始まってもよい。波括弧は使えない。
ドットの前後に空白があってはならない。
例:
:let dict = {"one": 1, 2: "two"}
:echo dict.one " "1" を表示
:echo dict.2 " "two" を表示
:echo dict .2 " ドットの前のスペースによるエラー
:echo dict.one " "1" を表示
:echo dict.2 " "two" を表示
:echo dict .2 " ドットの前のスペースによるエラー
Note ドットは文字列連結にも使われる。混乱を避けるために、文字列連結のドットの
周りには必ずスペースを入れること。
expr8(expr1, ...) Funcref 関数呼び出し
expr8がFuncref型の変数のとき、その参照する関数を呼び出す。
expr8->name([args]) メソッド呼び出し method ->
expr8->{lambda}([args])
E276
グローバル関数としても利用可能なメソッドの場合、これは次と同じである:
name(expr8 [, args])
これらは "expr8" 専用としても利用できるこれにより、あるメソッドが返す値を次のメソッドに渡して連鎖させることができる:
mylist->filter(filterexpr)->map(mapexpr)->sort()->join()
ラムダの使用例:
GetPercentage()->{x -> x * 100}()->printf('%d%%')
-> を使用する場合 expr7 演算子が最初に適用される。したがって:
-1.234->string()
は、以下と同等である: (-1.234)->string()
以下ではない: -(1.234->string())
E274
"->name(" には空白を含めることはできない。"->" の前と "(" の後に空白を含めるこ
とができる。したがって、次のように行を分割できる:
mylist
\ ->filter(filterexpr)
\ ->map(mapexpr)
\ ->sort()
\ ->join()
\ ->filter(filterexpr)
\ ->map(mapexpr)
\ ->sort()
\ ->join()
ラムダ形式を使用する場合、} と ( の間に空白があってはならない。
expr9
数
------
number 数定数 expr-number
0x hex-number 0o octal-number binary-number
10進数、16進数(0xか0Xで始まる)、2進数(0bか0Bで始まる)、もしくは8進数(0か0oか0O
で始まる)の数定数。
floating-point-format
浮動小数点数は次の2つの形式で書ける:
[-+]{N}.{M}
[-+]{N}.{M}[eE][-+]{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. {M} が空
1e40 .{M} がない
論理的根拠:
浮動小数点数が導入される前は、123.456 と書くと 123 と 456 の2つの数値と解釈
され、それらが文字列に変換されて結合されて "123456" という文字列になった。
これは無意味であり、Vim script 内で意図的に使われているものが見つからなかった
ので、浮動小数点数の普通の表記法を用いるため、この後方非互換性は許容された。
float-pi float-e
コピー&ペーストしておくのに便利な値:
:let pi = 3.14159265359
:let e = 2.71828182846
または、浮動小数点リテラルとして書き込むことを望まない場合は、次のような関数を:let e = 2.71828182846
使用することもできる:
:let pi = acos(-1.0)
:let e = exp(1.0)
:let e = exp(1.0)
floating-point-precision
浮動小数点数の精度と範囲は、Vim とリンクしたライブラリの "double" の意味によ
る。実行時にこれを変更することはできない。
浮動小数点数 Float は printf("%g", f) とするのと同様に、小数点以下6桁まで表
示される。表示する桁数は printf() を使えば変えられる。例:
:echo printf('%.15e', atan(1))
7.853981633974483e-01文字列 string String 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 と同じだが8桁までの16進数が使える
\b バックスペース <BS>
\e エスケープ <Esc>
\f フォームフィード <FF>
\n 改行 <NL>
\r 改行(キャリッジリターン) <CR>
\t タブ <Tab>
\\ 円記号(バックスラッシュ)
\" ダブルクォート
\<xxx> "xxx" という名の特殊キー。例 "\<C-W>" は CTRL-W。これはマップで使うた
めのものであり、0x80 バイトはエスケープされる。
ダブルクォート文字を使う場合はエスケープしなければならない: "<M-\">"
utf-8 文字を得るためには <Char-xxxx> を使わずに、上述の \uxxxx を使う
こと。
\<*xxx> \<xxx> と同じだが、文字に修飾子を含むのではなくそれを前に付加する。
たとえば、"\<C-w>" は 0x17 の1文字だが、"\<*C-w>" は 4バイトになる:
3は CTRL 修飾子で、その後に文字の "W"。
Note "\xff" は値255の1バイトとなる。これはエンコーディングによっては無効な値か
もしれない。現在の 'encoding' の値に応じた文字255を得るには "\u00ff" を使う。
Note "\000" と "\x00" は強制的に文字列の終端として扱われる。
blobリテラル blob-literal E973
------------
0zまたは0Zで始まる任意のバイト数の16進数。
シーケンスは偶数個の16進数文字でなければならない。例:
:let b = 0zFF00ED015DAF
リテラル文字列 literal-string E115
--------------
'string' 文字列定数 expr-'
Note シングルクォートが使われていることに注意。
この文字列は文字通りに扱われる。バックスラッシュは取り除かれないし、また特別な
意味を持ったりもしない。唯一の例外は、2つのシングルクォートで1つのシングル
クォートになることである。
シングルクォートの文字列は、バックスラッシュを2重にしなくてよいため、正規表現
パターンを表すのに便利である。以下の2つのコマンドは同値である:
if a =~ "\\s*"
if a =~ '\s*'
if a =~ '\s*'
オプション expr-option E112 E113
---------
&option オプション変数、ローカルなものが優先
&g:option グローバルオプション変数
&l:option ローカルオプション変数
例:
echo "タブストップは " . &tabstop . " です"
if &insertmode
if &insertmode
ここにはあらゆるオプション名を使うことができる。optionsを参照。ローカル変数
を使おうとして、実際にはバッファローカルもウィンドウローカルも存在しない場合に
は、グローバル変数が利用される。
レジスタ expr-register @r
--------
@r レジスタ 'r' の値
名前付きレジスタの中身を1つの文字列として得る。必要なところには改行文字が挿入
されている。無名レジスタの中身を取得するには@"か@@を使う。利用可能なレジスタの
説明についてはregistersを参照。
レジスタ '=' を使うと、式の値でなく式そのものを得る。それを評価するには
eval()を使う。
入れ子 expr-nesting E110
-------
(expr1) 式の入れ子
環境変数 expr-env
--------
$VAR 環境変数
環境変数の文字列。定義されていない環境変数を指定した場合、結果は空文字列。
getenv() と setenv() 関数も使用でき、英数字以外の名前を持つ環境変数に対し
て機能する。
environ() 関数は、すべての環境変数を含む辞書を取得するために使用できる。
expr-env-expand
Note $VARを直接使用した場合とexpand("$VAR")を使用した場合では、動作に違いがあ
ることに注意。直接使用した場合には、現在のVimのセッション中で既知の値に展開さ
れるだけである。expand()を使用した場合、まず最初にVimのセッション中で既知の値
に展開される。それが失敗した場合、変数の展開にシェルが使用されることになる。こ
れは遅くはなるが、シェルの知りうる全ての変数を展開することができる。例:
:echo $shell
:echo expand("$shell")
最初の一つは恐らく何も返ってこず、2つ目は $shell の値が返ってくるだろう (貴方:echo expand("$shell")
のシェルがそれをサポートしているなら)
内部変数 expr-variable
--------
variable 内部変数
以下のinternal-variablesを参照。
関数呼出 expr-function E116 E118 E119 E120
--------
function(expr1, ...) 関数呼出
以下のfunctionsを参照。
ラムダ式 expr-lambda lambda
--------
{args -> expr1} ラムダ式
ラムダ式は、expr1 を評価した結果を返す新しい無名関数を作成する。ラムダ式は以
下の点がユーザー定義関数user-functionsと異なる:
1. ラムダ式の本体は単一の式expr1であり、Exコマンド列ではない。
2. 引数に前置詞 "a:" を使用しない。例:
:let F = {arg1, arg2 -> arg1 - arg2}
:echo F(5, 2)
3:echo F(5, 2)
引数は任意である。例:
:let F = {-> 'error function'}
:echo F('ignored')
error function:echo F('ignored')
Note Vim9 script では別の書式のラムダ式を使う: vim9-lambda。
closure
ラムダ式は外側のスコープの変数と引数にアクセスできる。これはよくクロージャと呼
ばれる。以下の例ではラムダの中で "i" と "a:arg" が使われているが、これらは関数
のスコープに既に存在する。これらは関数から抜けても有効であり続ける:
:function Foo(arg)
: let i = 3
: return {x -> x + i - a:arg}
:endfunction
:let Bar = Foo(4)
:echo Bar(6)
5: let i = 3
: return {x -> x + i - a:arg}
:endfunction
:let Bar = Foo(4)
:echo Bar(6)
Note: これが正しく機能するためには、ラムダが定義される前の外側のスコープ内にそ
れらの変数が存在していなければならない。:func-closureも参照。
ラムダとクロージャのサポートは以下のように判定できる:
if has('lambda')
sort(), map(), filter()とともにラムダ式を使う例:
:echo map([1, 2, 3], {idx, val -> val + 1})
[2, 3, 4] :echo sort([3,7,2,1,4], {a, b -> a - b})
[1, 2, 3, 4, 7]ラムダ式は、チャネル、ジョブ、タイマーを使う際にも有用である:
:let timer = timer_start(500,
\ {-> execute("echo 'Handler called'", "")},
\ {'repeat': 3})
Handler called\ {-> execute("echo 'Handler called'", "")},
\ {'repeat': 3})
Handler called
Handler called
Note クロージャが自身の依存するコンテキストから参照されている場合、メモリが使
われたままになり解放されない可能性がある:
function Function()
let x = 0
let F = {-> x}
endfunction
このクロージャが関数スコープの "x" を使用しており、そして同じスコープの "F" がlet x = 0
let F = {-> x}
endfunction
クロージャを参照している。この循環の結果解放されることのないメモリになる。
推奨: このようなことはしないこと。
Exコマンドを実行するためにどのように execute() を使っているかに注目せよ。醜い
が。
Vim9 script ではコマンドブロックが使える。inline-function を参照。
ラムダ式は '<lambda>42' のような内部名を持っている。もしラムダ式でエラーが発生
した場合には、以下のコマンドでどのラムダ式でエラーが起きたかを調べることができ
る:
:function <lambda>42
numbered-functionも参照。==============================================================================
3. 内部変数 internal-variables E461
内部変数の名前には文字と、数字とアンダーバー('_')を使うことができる。しかし数
字で始めることはできない。波括弧を使うこともできる。
詳細はcurly-braces-namesを参照。
内部変数は ":let" コマンドで作成される :let。":unlet" コマンドで明示的に内部
変数を破棄することができる :unlet。内部変数に使われてない名前か、既に破棄さ
れた内部変数を使うとエラーとなる。
variable-scope
変数には幾つもの名前空間が存在する。実際にどれが利用されるかは、どのような前置
子が使われたかで決まる:
(無し) 関数の中では関数ローカル、それ以外ではグローバル
buffer-variable b: 現在のバッファにローカル
window-variable w: 現在のウィンドウにローカル
tabpage-variable t: 現在のタブページにローカル
global-variable g: グローバル
local-variable l: 関数にローカル
script-variable s: :sourceされたVim scriptにローカル
function-argument a: 関数の引数(関数内のみ)
vim-variable v: グローバル、Vimがあらかじめ定義
これらのスコープそのものに辞書を通じてアクセスできる。例えば、全てのスクリプト
ローカル変数を削除するには次のようにする:
:for k in keys(s:)
: unlet s:[k]
:endfor
: unlet s:[k]
:endfor
Note: Vim9 script ではこれとは違いがある、vim9-scopes を参照。
buffer-variable b:var b:
"b:" で始まる変数名は、カレントバッファに局所的な変数を意味する。このように一
つ一つのバッファ毎に、変数 "b:foo" を別々に使用することができる。この種の変数
はバッファが掃除(wipe out)された時や、":bdelete" で削除された時に一緒に削除さ
れる。
1つのバッファローカル変数が定義済:
b:changedtick changetick
b:changedtick 現在のバッファに対する総変更の回数。変更を行うたびに増加する。
これには一回のアンドゥ操作もカウントされる。バッファ書き込み時
に 'modified' をリセットすることもカウントされる。
この変数はバッファに変更が行われた際にだけアクションを起こした
い時に利用できる。例:
:if my_changedtick != b:changedtick
: let my_changedtick = b:changedtick
: call My_Update()
:endif
b:changedtick 変数を変更したり削除することはできない。: let my_changedtick = b:changedtick
: call My_Update()
:endif
window-variable w:var w:
"w:" で始まる変数名は、カレントウィンドウにローカルな変数を意味する。これはウィ
ンドウを閉じるときに破棄される。
tabpage-variable t:var t:
"t:" で始まる変数名は、カレントタブページにローカルな変数を意味する。これはタ
ブページを閉じるときに破棄される。{+windows 機能つきでコンパイルしたときのみ
利用可能}
global-variable g:var g:
関数の中からグローバル変数へアクセスするには、"g:" を付けた名前を使用する。こ
れが省略された場合は関数ローカルな変数にアクセスする。ただし "g:" 自体は、関数
の外でも使うことができる。
local-variable l:var l:
関数の中からそのローカル変数にアクセスするには何も前置しなければ良い。明示的
に "l:" を付けることも可能である。ただし "l:" をつけないと予約されている変数名
と衝突してしまうことがある。例: "count" とすると "v:count" を参照してしまう。
"l:count" とすればローカル変数countを参照できる。
script-variable s:var
Vim script 内では "s:" で始まる変数名を使うことができる。これはスクリプトに
ついてローカルであり、スクリプトの外部からはアクセスできない。
スクリプト変数は次の場所で使える:
- そのスクリプトをsourceしている間に実行されるコマンド
- そのスクリプト内で定義される関数
- そのスクリプト内で定義される自動コマンド
- そのスクリプト内で定義される関数や自動コマンドで定義される関数や自動コマンド
(再帰的)
- そのスクリプト内で定義されるユーザー定義コマンド
次の場面では使えない:
- そのスクリプトからsourceされる他のスクリプト
- マッピング
- メニュー
- など。
グローバル変数との衝突を避けるにはスクリプト変数を使う。
次の例を参照:
let s:counter = 0
function MyCounter()
let s:counter = s:counter + 1
echo s:counter
endfunction
command Tick call MyCounter()
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
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
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
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:
E963
一部の変数はユーザーが設定できるが、型を変更することはできない。
v:argv argv-variable
v:argv Vimの起動に使用したコマンドライン引数。これは文字列のリストで
ある。最初の項目はVimコマンドである。
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行に収まるビジュアル領域の上
にあるときはその選択領域となる。<cexpr> も参照。
オプション 'balloonexpr' を評価している最中のみ有効。
v:beval_winnr beval_winnr-variable
v:beval_winnr マウスポインタがあるウィンドウの番号。オプション 'balloonexpr'
を評価している最中のみ有効。1番目のウィンドウの番号はゼロであ
る(他の場所でのウィンドウ番号と異なっている)。
v:beval_winid beval_winid-variable
v:beval_winid マウスポインタがあるウィンドウのウィンドウID window-ID。
それ以外は v:beval_winnr と同様。
v:char char-variable
v:char 'formatexpr' を評価しているときの引数。また、短縮入力
:map-<expr> で <expr> を指定しているとき、タイプされた文字を
保持する。
これは InsertCharPre と InsertEnter イベントでも使われる。
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:collate collate-variable
v:collate 現在のロケール設定での実行環境の照合順序。これは Vim script が
現在のロケールのエンコーディングを検知するのを許可する。技術的
説明: LC_COLLATE の値となる。ロケールを使用していない時の値は
"C" となる。この変数は直接は設定できなく、:language コマンド
を使う。
multi-lang を参照。
v:completed_item completed_item-variable
v:completed_item
最も最近補完された単語が含まれたcomplete-itemsのDictionary
がCompleteDoneイベント後に設定される。補完に失敗した時、その
Dictionaryは空である。
v:count count-variable
v:count 最後に実行されたノーマルモードコマンドに渡されたカウント数。
マッピングの前のカウントを取得するのに使用できる。読出し専用。
使用例:
:map _x :<C-U>echo "the count is " . v:count<CR>
Note: <C-U>は、カウントの後に ':' をタイプした時に示される行範囲指定を削除するために必要となる。
"3d2w" のようにカウントが2個指定された場合、その数が掛けられる。
よって "d6w" となる。
オプション 'formatexpr' を評価するためにも使われる。
scriptversion が 3以降でなければ、"count" も、以前の版のVim
との互換性の為に動作する。
v:count1 count1-variable
v:count1 "v:count" と同じだが、カウントが指定されなかった時の既定値が 1
となる。
v:ctype ctype-variable
v:ctype 文字に関する実行環境の現在のロケール設定。これを使えばVim
script内で現在のロケール設定に対応できるようになる。技術的な詳
細: 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
Note: v:dying が 1 のときに別の致命的なシグナルを受信した場合
は VimLeave 自動コマンドは実行されない。
v:exiting exiting-variable
v:exiting Vim の終了コード。通常は0、何か問題があった時は非0。
VimLeavePre と VimLeave の自動コマンドが実行される前は値が
v:null。:q、:x、:cquit を参照。
例:
:au VimLeave * echo "Exit value is " .. v:exiting
v:echospace echospace-variable
v:echospace hit-enter-prompt を引き起こす前の最後の画面行の :echo メッ
セージに使用できる画面セルの数。'showcmd', 'ruler' および
'columns' に依存する。最後の行の上に全幅の行があるかどうかを
'cmdheight' で確認する必要がある。
v:errmsg errmsg-variable
v:errmsg 最後に表示されたエラーメッセージ。この変数は代入することが許
されている。例:
:let errmsg = ""
:next
:if (errmsg != "")
: ...
scriptversion が 3以降でなければ、"errmsg" も、以前の版のVim:next
:if (errmsg != "")
: ...
との互換性の為に動作する。
v:errors errors-variable assert-return
v:errors assert_true()のような、テスト用関数によって見つかったエラー。
これは文字列のリストである。
テスト用関数はテストに失敗した時にエラーを末尾に追加する。
戻り値が示すもの: 要素が v:errors に追加された場合 1 が返る。
それ以外では 0 が返る。
古い結果を削除する方法はこの変数を空にする:
:let v:errors = []
たとえv:errors にリスト以外のいかなる値をセットしたとしても、(次に実行される時に)テスト用関数によって空のリストが設定(上書
き)される。
v:event event-variable
v:event 現在の autocommand に関する情報を含む辞書。辞書に何が入るか
は個々のイベントを参照。
この辞書は autocommand が終了したときに空にされる。独立した
コピーの取得方法については dict-identity を参照。イベントト
リガー後の情報を保持したいのであれば deepcopy() を使うこと。
例:
au TextYankPost * let g:foo = deepcopy(v:event)
v:exception exception-variable
v:exception 最も直近に捕捉され、まだ終了していない例外の値。
v:throwpointとthrow-variablesを参照。
例:
:try
: throw "oops"
:catch /.*/
: echo "caught " .. v:exception
:endtry
出力: "caught oops".: throw "oops"
:catch /.*/
: echo "caught " .. v:exception
:endtry
v:false false-variable
v:false 数値0。JSONでは "false" として使われる。json_encode()を参照。
文字列として使われた時、これは "v:false" として評価される。
echo v:false
v:falseこれは eval() がその文字列をパースしたときに、元の値に戻せるよ
うにするためである。読出し専用。
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 fname-variable
v:fname 'includeexpr' の評価中: 検知したファイル名。それ以外のときは空。
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:hlsearch hlsearch-variable
v:hlsearch 検索による強調表示がオンになっているかどうかを示す変数。
設定は +extra_search 機能が必要な 'hlsearch' が有効になって
いる時のみ意味をなす。この変数を0に設定することは、
:nohlsearchコマンドを実行することと同様に働き、1に設定するこ
とは以下と同様に働く
let &hlsearch = &hlsearch
関数から戻ったときに値が復元されることに注意すること。function-search-undo
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 script内で現在のロケール設定に対応できるようになる。
技術的な詳細: LC_MESSAGESに等しい。この値はシステムに依存する。
この変数を設定するには:languageコマンドを使うこと。直接設定
することはできない。
文字エンコーディングに使うのと違う言語でメッセージを表示させた
い場合はv:ctypeと異なる値でもよい。multi-langを参照。
v:lc_time lc_time-variable
v:lc_time 時刻のメッセージに関する実行環境の現在のロケール設定。これを使
えばVim script内で現在のロケール設定に対応できるようになる。
技術的な詳細: LC_TIMEに等しい。この値はシステムに依存する。こ
の変数を設定するには:languageコマンドを使うこと。直接設定す
ることはできない。
v:lnum lnum-variable
v:lnum 'foldexpr' fold-expr と 'indentexpr' に使うための行番号。ま
た 'guitablabel' と 'guitabtooltip' の文脈ではタブページ番号に
なる。これらの式のどれかを評価しているときのみ有効。サンドボッ
クス sandbox の中では読出し専用。
v:mouse_win mouse_win-variable
v:mouse_win getchar()でマウスクリックイベントが発生したときのウィンドウ
番号。winnr()と同じく番号は1から始まる。マウスがクリックされ
なかったときは0となる。
v:mouse_winid mouse_winid-variable
v:mouse_winid getchar()でマウスクリックイベントが発生したときのウィンドウ
ID。マウスがクリックされていないときは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:none none-variable None
v:none 空の文字列。JSONでは空の要素として使われる。
json_encode()を参照。
これは関数の引数のデフォルト値に使うこともできる、
none-function_argument を参照。
数値として使われた時、これは 0 として評価される。
文字列として使われた時、これは "v:none" として評価される。
echo v:none
v:noneこれは eval() がその文字列をパースしたときに、元の値に戻せるよ
うにするためである。読出し専用。
v:null null-variable
v:null 空の文字列。JSONでは "null" として使われる。json_encode()を
参照。数値として使われた時、これは 0 として評価される。
文字列として使われた時、これは "v:null" として評価される。
echo v:null
v:nullこれは eval() がその文字列をパースしたときに、元の値に戻せるよ
うにするためである。読出し専用。
v:numbermax numbermax-variable
v:numbermax 数値の最大値。
v:numbermin numbermin-variable
v:numbermin 数値の最小値(負数)。
v:numbersize numbersize-variable
v:numbersize 数値のビット数。これは通常64で、システムによっては32になること
がある。
v:oldfiles oldfiles-variable
v:oldfiles 起動時に viminfo から読み込まれたファイルの名前のリスト。
これらはマークを記憶しているファイルである。リストの長さの上限
はオプション 'viminfo' の引数 ' によって決まる(既定では 100)。
viminfo ファイルが使われていない時、リストは空となる。
:oldfiles と c_#< を参照。
このリストは変更可能であるが、後で viminfo ファイルに書き込ま
れるものには影響しない。文字列以外の値を使うと問題を引き起こす
だろう。
{+viminfo 機能つきでコンパイルされたときのみ有効}
v:option_new
v:option_new オプションに設定された新しい値。自動コマンド OptionSet を実
行している間のみ有効。
v:option_old
v:option_old オプションの以前の値。自動コマンド OptionSet を実行している
間のみ有効。設定に使用されたコマンドおよびオプションの種類に
よって、ローカルの以前の値またはグローバルの以前の値のどちらか
になる。
v:option_oldlocal
v:option_oldlocal
オプションの以前のローカル値。OptionSet 自動コマンドの実行中
に有効である。
v:option_oldglobal
v:option_oldglobal
オプションの以前のグローバル値。OptionSet 自動コマンドの実行
中に有効である。
v:option_type
v:option_type set コマンドのスコープ。自動コマンド OptionSet を実行している
間のみ有効。"global" もしくは "local" のどちらかとなる。
v:option_command
v:option_command
オプションを設定するために使われたコマンド。OptionSet 自動コ
マンドの実行中に有効である。
値 オプションは以下によって設定された
"setlocal" :setlocal または ":let l:xxx"
"setglobal" :setglobal または ":let g:xxx"
"set" :set または :let
"modeline" modeline
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 最後の1つ前のノーマルモードコマンドに与えられたカウントの値。
前のコマンドの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:progpath progpath-variable
v:progpath Vim を起動したときのコマンド (パスを含む)。--remote-expr で
Vim サーバーにメッセージを送信するときに便利。
Vimが呼び出されたときのコマンドが含まれている。シェルに渡され
ると、現在のVimと同じVim実行可能ファイルが実行される($PATHが変
更されない場合)。 --remote-expr を使用してVimサーバーにメッ
セージを送信する場合に便利である。
フルパスを得るには:
echo exepath(v:progpath)
コマンドが相対パスの場合、フルパスに展開されるため、:cd の後でも機能する。したがって、"./vim" を開始すると
"/home/user/path/to/vim/src/vim" という結果になる。
Linuxおよびその他のシステムでは、常にフルパスになる。Macでは単
に "vim" であり、前述の exepath() を使用してフルパスを取得する
必要がある。
MS-Windows では実行ファイルが "vim.exe" として呼び出されるかも
しれないが、".exe" は v:progpath には追加されない。
読出し専用。
v:register register-variable
v:register 現在のノーマルモードコマンドに適用されるレジスタの名前 (そのコ
マンドが実際にレジスタを使うかどうかには依らない)。または、現
在実行しているノーマルモードマッピング用のレジスタの名前 (レジ
スタを使うカスタムコマンドの中で使う)。レジスタが指定されなかっ
たときはデフォルトレジスタ '"' になる。'clipboard' に
"unnamed" か "unnamedplus" が含まれているときはデフォルトはそ
れぞれ '*' か '+' になる。
getreg() と setreg() も参照。
v:scrollstart scrollstart-variable
v:scrollstart 画面のスクロールの原因となったスクリプトや関数を説明する
文字列。空であるときのみ代入される。よってこの変数には最初の原
因だけが記録されている。原因がキーボードから入力されたコマンド
の場合は "Unknown" {訳注: 日本語メッセージの場合: "不明"} が代
入される。
スクリプトを実行したとき現れたhit-enterプロンプトの原因を探る
ために便利。
v:servername servername-variable
v:servername client-server-name で登録された結果。
読出し専用。
v:searchforward v:searchforward searchforward-variable
検索方向: 前方検索の後なら1、後方検索の後なら0。quote/ で示す
方法によって最終検索パターンを直接セットしたときは1(前方検索)
にリセットされる。
関数から戻るとき、この値は呼び出し前の値に復元される。
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
scriptversion が 3以降でなければ、"shell_error" も、以前の版:if v:shell_error
: echo 'could not rename "foo" to "bar"!'
:endif
の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:t_TYPE v:t_bool t_bool-variable
v:t_bool 真偽値 Boolean 型の値。読出し専用。 参照: type()
v:t_channel t_channel-variable
v:t_channel チャネル Channel 型の値。読出し専用。 参照: type()
v:t_dict t_dict-variable
v:t_dict 辞書 Dictionary 型の値。読出し専用。 参照: type()
v:t_float t_float-variable
v:t_float 浮動小数点数 Float 型の値。読出し専用。 参照: type()
v:t_func t_func-variable
v:t_func Funcref 型の値。読出し専用。 参照: type()
v:t_job t_job-variable
v:t_job ジョブ Job 型の値。読出し専用。 参照: type()
v:t_list t_list-variable
v:t_list リスト List 型の値。読出し専用。 参照: type()
v:t_none t_none-variable
v:t_none 特殊値 None 型の値。読出し専用。 参照: type()
v:t_number t_number-variable
v:t_number 数値 Number 型の値。読出し専用。 参照: type()
v:t_string t_string-variable
v:t_string 文字列 String 型の値。読出し専用。 参照: type()
v:t_blob t_blob-variable
v:t_blob Blob 型の値。読出し専用。 参照: type()
v:termresponse termresponse-variable
v:termresponse termcapのエントリt_RVで端末から返されるエスケープシーケンス。
ESC [ または CSI で始まり、次に '>' または '?' が来て、途中数
字と ';' だけから構成され 'c' で終わるエスケープシーケンスを受
け取ったとき代入される。このオプションがセットされると自動コマ
ンドイベントTermResponseが発生し、端末からの応答に反応すること
ができる。
terminalprops() を使うことで Vim が端末をどのように認識した
かを知ることができる。
新しいxtermからの応答は次の形式である:
"<Esc>[> Pp ; Pv ; Pc c"。ここでPpは端末のタイプ: 0ならvt100、
1ならvt220。Pvはパッチレベル(パッチ95で導入されたため常に95以
上)。Pcは常に0。
{Vimが+termresponse機能付きでコンパイルされたときのみ有効}
v:termblinkresp
v:termblinkresp termcapのエントリ t_RC で端末から返されるエスケープシーケン
ス。端末カーソルが点滅しているかを調べるために使用される。
term_getcursor() で使用される。
v:termstyleresp
v:termstyleresp termcapのエントリ t_RS で端末から返されるエスケープシーケン
ス。カーソルの形状を調べるために使用される。term_getcursor()
で使用される。
v:termrbgresp
v:termrbgresp termcapのエントリ t_RS で端末から返されるエスケープシーケン
ス。端末の背景色を調べるために使用される。'background' を参照。
v:termrfgresp
v:termrfgresp termcapのエントリ t_RF で端末から返されるエスケープシーケン
ス。端末の文字色を調べるために使用される。
v:termu7resp
v:termu7resp termcapのエントリ t_u7 で端末から返されるエスケープシーケン
ス。曖昧な幅の文字に対して端末が何をするか調べるのに使われる。
'ambiwidth' を参照。
v:testing testing-variable
v:testing test_garbagecollect_now() を使う前に設定する必要がある。
また、これが設定されていると、特定のエラーメッセージが 2 秒間
表示されなくなる。(例: "'dictionary' option is empty")
v:this_session this_session-variable
v:this_session 最後にロードされたか、セーブされたセッションファイルの完全な
ファイル名。:mksessionを参照。この変数は代入することが許さ
れている。それ以前にセーブされたセッションがなければ、この変数
は空となる。
scriptversion が 3以降でなければ、"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": throw "oops"
:catch /.*/
: echo "Exception from" v:throwpoint
:endtry
v:true true-variable
v:true 数値1。JSONでは "true" として使われる。json_encode()を参照。
文字列として使われた時、これは "v:true" として評価される。
echo v:true
v:trueこれは eval() がその文字列をパースしたときに、元の値に戻せるよ
うにするためである。読出し専用。
v:val val-variable
v:val リストListもしくは辞書Dictionaryの現在の要素の値。map()
とfilter()で使われる式を評価している最中のみ有効。読出し専
用。
v:version version-variable
v:version Vimのバージョン番号。メジャーバージョン番号は100倍され、マイ
ナーバージョン番号と足されている。Version 5.0は500。Version
5.1は501となる。読出し専用。scriptversion が 3以降でなけれ
ば、"version" も、以前の版のVimとの互換性の為に動作する。
特定のパッチが適用されているかを調べるにはhas()を使う。例:
if has("patch-7.4.123")
Note 5.0と5.1には両方ともパッチ123が存在しているが、バージョンが違えば番号は同じでもパッチの内容は全く異なっている。
v:versionlong versionlong-variable
v:versionlong v:versionと同じだが、最後の4桁にパッチレベルも含む。パッチ 123
を適用したバージョン 8.1 の値は 8010123 である。これは次のよう
に使用できる:
if v:versionlong >= 8010123
ただし、含まれているパッチのリストに隙間がある場合は、うまくいかない。これは、最近のパッチが古いバージョンに含まれていた場合
に起こる。例えば、セキュリティ修正のため。
パッチが実際に含まれていることを確認するためには has() 関数を
使用すること。
v:vim_did_enter vim_did_enter-variable
v:vim_did_enter ほとんどのスタートアップが完了するまでの間 0。VimEnter 自動
コマンドが実行される直前に 1 にセットされる。
v:warningmsg warningmsg-variable
v:warningmsg 最後に表示された警告メッセージ。この変数は代入することが許され
ている。
v:windowid windowid-variable
v:windowid X11 ベースの GUI を使っているとき、もしくは端末の Vim を使って
いて X サーバーに接続しているとき (-X) は、ウィンドウ ID が
セットされる。
MS-Windows の GUI を使っているときはウィンドウハンドルがセット
される。
それ以外では値はゼロである。
Note: Vim の中のウィンドウを扱うときは winnr() または
win_getid() を使う。window-ID を参照。
==============================================================================
4. 組み込み関数 functions
機能別に分類された一覧は function-list を参照のこと。
(関数名の上でCTRL-]を使うことで、詳細な説明へ飛ぶことができる。)
使用法 結果 説明
abs({expr}) 浮動小数点数または数値 {expr}の絶対値
acos({expr}) 浮動小数点数 {expr}のアークコサイン
add({list}, {item}) リスト {item}をリスト{list}に追加する
add({object}, {item}) リスト/Blob {item}を{object}に追加する
and({expr}, {expr}) 数値 ビット論理積
append({lnum}, {text}) 数値 {lnum}行目に{text}を付け加える
appendbufline({expr}, {lnum}, {text})
数値 バッファ{expr}の{lnum}行目に{text}を付
け加える
argc([{winid}]) 数値 引数内のファイルの数
argidx() 数値 引数リスト内の現在のインデックス
arglistid([{winnr} [, {tabnr}]])
数値 引数リストID
argv({nr} [, {winid}]) 文字列 引数の第{nr}番目
argv([-1, {winid}]) リスト 引数リスト
asin({expr}) 浮動小数点数 {expr}のアークサイン
assert_beeps({cmd}) 数値 {cmd} がビープ音を鳴らすことをテストす
る
assert_equal({exp}, {act} [, {msg}])
数値 {exp}と{act}が等しいかどうかテストする
assert_equalfile({fname-one}, {fname-two} [, {msg}])
数値 ファイルの内容が等しいことをテストする
assert_exception({error} [, {msg}])
数値 v:exceptionが{error}であるかテストする
assert_fails({cmd} [, {error} [, {msg} [, {lnum} [, {context}]]]])
数値 {cmd}が失敗するかどうかテストする
assert_false({actual} [, {msg}])
数値 {actual}がfalseかどうかテストする
assert_inrange({lower}, {upper}, {actual} [, {msg}])
数値 {actual}が範囲内にあるかテストする
assert_match({pat}, {text} [, {msg}]) 数値 {pat}が{text}にマッチするかテス
トする
assert_nobeep({cmd}) 数値 {cmd} がビープ音を鳴らさないことをテス
トする
assert_notequal({exp}, {act} [, {msg}]) 数値 {exp}が{act}と等しくないことを
テストする
assert_notmatch({pat}, {text} [, {msg}]) 数値 {pat}が{text}とマッチしないこと
をテストする
assert_report({msg}) 数値 テストの失敗を報告する
assert_true({actual} [, {msg}])
数値 {actual}がtrueかどうかテストする
atan({expr}) 浮動小数点数 {expr}のアークタンジェント
atan2({expr}, {expr}) 浮動小数点数 {expr1} / {expr2} のアークタン
ジェント
balloon_gettext() 文字列 バルーン内のカレントテキストを得る
balloon_show({expr}) なし {expr} をバルーン内に表示
balloon_split({msg}) リスト {msg} をバルーンで使われるように分割す
る
browse({save}, {title}, {initdir}, {default})
文字列 ファイル選択ダイアログを表示
browsedir({title}, {initdir}) 文字列 ディレクトリ選択ダイアログを表示
bufadd({name}) 数値 バッファリストにバッファを追加する
bufexists({expr}) 数値 バッファ{expr}が存在すればTRUE
buflisted({expr}) 数値 バッファ{expr}がリストにあるならTRUE
bufload({expr}) 数値 まだバッファ{expr}がロードされていなけ
ればバッファをロードする
bufloaded({expr}) 数値 バッファ{expr}がロード済みならTRUE
bufname([{expr}]) 文字列 バッファ{expr}の名前
bufnr([{expr} [, {create}]]) 数値 バッファ{expr}の番号
bufwinid({expr}) 数値 バッファ{expr}のウィンドウID
bufwinnr({nr}) 数値 バッファ{nr}のウィンドウ番号
byte2line({byte}) 数値 {byte}番目のバイトの行番号
byteidx({expr}, {nr}) 数値 {expr}の{nr}文字目のバイトインデックス
byteidxcomp({expr}, {nr}) 数値 {expr}の{nr}文字目のバイトインデックス
call({func}, {arglist} [, {dict}])
任意 引数{arglist}をつけて{func}を呼ぶ
ceil({expr}) 浮動小数点数 {expr} を切り上げる
ch_canread({handle}) 数値 何か読むものがあるかをチェックする
ch_close({handle}) なし {handle} を閉じる
ch_close_in({handle}) なし {handle} の入力を閉じる
ch_evalexpr({handle}, {expr} [, {options}])
任意 {handle} に {expr} を送り応答をJSONと
して評価する
ch_evalraw({handle}, {string} [, {options}])
任意 {handle} に {string} を送り応答を生の
文字列として評価する
ch_getbufnr({handle}, {what}) 数値 {handle}/{what} に割り当てられたバッ
ファ番号を得る
ch_getjob({channel}) ジョブ {channel} の Job を得る
ch_info({handle}) 文字列 チャネル {handle} に関する情報を得る
ch_log({msg} [, {handle}]) なし チャネルのログファイルに {msg} を書き
込む
ch_logfile({fname} [, {mode}]) なし チャネルの挙動ログ出力を開始する
ch_open({address} [, {options}])
チャネル {address} へのチャネルを開く
ch_read({handle} [, {options}]) 文字列 {handle} から読み込む
ch_readblob({handle} [, {options}])
Blob {handle} からBlobを読み込む
ch_readraw({handle} [, {options}])
文字列 {handle} から生の文字列を読み込む
ch_sendexpr({handle}, {expr} [, {options}])
任意 {expr}をJSONチャネル{handle}に送る
ch_sendraw({handle}, {expr} [, {options}])
任意 {expr}をrawチャネル{handle}に送る
ch_setoptions({handle}, {options})
なし {handle}にオプションを設定する
ch_status({handle} [, {options}])
文字列 チャネル{handle}の状態
changenr() 数値 現在の変更番号
char2nr({expr} [, {utf8}]) 数値 {expr}の先頭文字のASCII/UTF8コード
charclass({string}) 数値 {string} の文字クラス
charcol({expr}) 数値 カーソルかマークのカラム番号
charidx({string}, {idx} [, {countcc}])
数値 {string} のバイト {idx} の文字のイン
デックス
chdir({dir}) 文字列 現在の作業ディレクトリを変更する
cindent({lnum}) 数値 {lnum}行目のCインデント量
clearmatches([{win}]) なし 全マッチをクリアする
col({expr}) 数値 カーソルかマークのカラムバイトインデッ
クス
complete({startcol}, {matches}) なし 挿入モード補完を設定する
complete_add({expr}) 数値 補完候補を追加する
complete_check() 数値 補完中に押されたキーをチェックする
complete_info([{what}]) 辞書 現在の補完情報を取得
confirm({msg} [, {choices} [, {default} [, {type}]]])
数値 ユーザーへの選択肢と番号
copy({expr}) 任意 {expr}の浅いコピーを作る
cos({expr}) 浮動小数点数 {expr} の余弦(コサイン)
cosh({expr}) 浮動小数点数 {expr}のハイパボリックコサイン
count({comp}, {expr} [, {ic} [, {start}]])
数値 {comp}中に{expr}が何個現れるか数える
cscope_connection([{num} , {dbpath} [, {prepend}]])
数値 cscope接続の存在を判定する
cursor({lnum}, {col} [, {off}])
数値 カーソルを{lnum}, {col}, {off}へ移動
cursor({list}) 数値 カーソルを{list}の位置へ移動
debugbreak({pid}) 数値 デバッグするプロセスへ割り込む
deepcopy({expr} [, {noref}]) 任意 {expr}の完全なコピーを作る
delete({fname} [, {flags}]) 数値 ファイルやディレクトリ{fname}を消す
deletebufline({expr}, {first} [, {last}])
数値 バッファ {expr} から行を削除する
did_filetype() 数値 FileTypeのautocommandが実行されたか?
diff_filler({lnum}) 数値 差分モードで{lnum}に挿入された行
diff_hlID({lnum}, {col}) 数値 差分モードで{lnum}/{col}位置の強調
digraph_get({chars}) 文字列 {chars} のダイグラフ digraph を取得
digraph_getlist([{listall}]) リスト すべてのダイグラフ digraph を取得
digraph_set({chars}, {digraph}) 真偽値 ダイグラフ digraph の登録
digraph_setlist({digraphlist}) 真偽値 複数のダイグラフ digraph の登録
echoraw({expr}) なし {expr} をそのまま出力する
empty({expr}) 数値 {expr}が空ならTRUE
environ() 辞書 すべての環境変数を返す
escape({string}, {chars}) 文字列 {string}内の{chars}を '\' でエスケープ
eval({string}) 任意 {string}を評価し、値を得る
eventhandler() 数値 イベントハンドラの内側ならTRUE
executable({expr}) 数値 実行可能な{expr}が存在するなら1
execute({command}) 文字列 {command}を実行し、出力を得る
exepath({expr}) 文字列 コマンド {expr} のフルパス
exists({var}) 数値 変数{var}が存在したらTRUE
exp({expr}) 浮動小数点数 {expr}の指数
expand({expr} [, {nosuf} [, {list}]])
任意 {expr}内の特別なキーワードを展開
expandcmd({expr}) 文字列 :edit のように{expr}を展開
extend({expr1}, {expr2} [, {expr3}])
リスト/辞書 {expr1}に{expr2}を要素として挿入
extendnew({expr1}, {expr2} [, {expr3}])
リスト/辞書 extend() と同じだが新しいリスト/
辞書を作る
feedkeys({string} [, {mode}]) 数値 先行入力バッファにキーシーケンスを追加
filereadable({file}) 数値 {file}が読み込み可能ならTRUE
filewritable({file}) 数値 {file}が書き込み可能ならTRUE
filter({expr1}, {expr2}) リスト/辞書 {expr2}が0となる要素を{expr1}から
とり除く
finddir({name} [, {path} [, {count}]])
文字列 {path}からディレクトリ{name}を探す
findfile({name} [, {path} [, {count}]])
文字列 {path}からファイル{name}を探す
flatten({list} [, {maxdepth}]) リスト リスト {list} を {maxdepth} の深さまで
平坦化する
flattennew({list} [, {maxdepth}])
リスト {list} のコピーを平坦化する
float2nr({expr}) 数値 浮動小数点数 {expr} を数値に変換する
floor({expr}) 浮動小数点数 {expr} を切り捨てる
fmod({expr1}, {expr2}) 浮動小数点数 {expr1} / {expr2} の余り
fnameescape({fname}) 文字列 {fname} 内の特殊文字をエスケープする
fnamemodify({fname}, {mods}) 文字列 ファイル名を変更
foldclosed({lnum}) 数値 {lnum}の折り畳みの最初の行(閉じている
なら)
foldclosedend({lnum}) 数値 {lnum}の折り畳みの最後の行(閉じている
なら)
foldlevel({lnum}) 数値 {lnum}の折り畳みレベル
foldtext() 文字列 閉じた折り畳みに表示されている行
foldtextresult({lnum}) 文字列 {lnum}で閉じている折り畳みのテキスト
foreground() 数値 Vimウィンドウを前面に移動する
fullcommand({name}) 文字列 {name} から完全なコマンドを取得
funcref({name} [, {arglist}] [, {dict}])
Funcref 関数{name}への参照
function({name} [, {arglist}] [, {dict}])
Funcref 名前による関数{name}への参照
garbagecollect([{atexit}]) なし メモリを解放する。循環参照を断ち切る
get({list}, {idx} [, {def}]) 任意 {list}や{def}から要素{idx}を取得
get({dict}, {key} [, {def}]) 任意 {dict}や{def}から要素{key}を取得
get({func}, {what}) 任意 funcref/partial {func}のプロパティ取得
getbufinfo([{expr}]) リスト バッファに関する情報
getbufline({expr}, {lnum} [, {end}])
リスト バッファ{expr}の{lnum}から{end}行目
getbufvar({expr}, {varname} [, {def}])
任意 バッファ{expr}の変数 {varname}
getchangelist([{expr}]) リスト 変更リスト要素のリスト
getchar([expr]) 数値/文字列 ユーザーから1文字を取得する
getcharmod() 数値 修飾キーの状態を表す数値を取得
getcharpos({expr}) リスト カーソル、マーク、その他のカーソル位置
getcharsearch() 辞書 最後の文字検索を取得
getcharstr([expr]) 文字列 ユーザーから1文字を取得する
getcmdline() 文字列 現在のコマンドラインを取得
getcmdpos() 数値 コマンドラインのカーソル位置を取得
getcmdtype() 文字列 現在のコマンドラインの種類を取得
getcmdwintype() 文字列 現在のコマンドラインウィンドウの種類
getcompletion({pat}, {type} [, {filtered}])
リスト コマンドライン補完にマッチするリスト
getcurpos([{winnr}]) リスト カーソルの位置
getcursorcharpos([{winnr}]) リスト カーソルの位置の文字
getcwd([{winnr} [, {tabnr}]]) 文字列 現在の作業ディレクトリを取得
getenv({name}) 文字列 環境変数を返す
getfontname([{name}]) 文字列 使用しているフォントの名前
getfperm({fname}) 文字列 ファイル{fname}の許可属性を取得
getfsize({fname}) 数値 ファイル{fname}のバイト数を取得
getftime({fname}) 数値 ファイルの最終更新時間
getftype({fname}) 文字列 ファイル{fname}の種類の説明
getimstatus() 数値 IME がアクティブの場合は TRUE
getjumplist([{winnr} [, {tabnr}]])
リスト ジャンプリスト要素のリスト
getline({lnum}) 文字列 現在のバッファから行の内容を取得
getline({lnum}, {end}) リスト カレントバッファの{lnum}から{end}行目
getloclist({nr}) リスト locationリストの要素のリスト
getloclist({nr}, {what}) 辞書 指定したlocationリストのプロパティ
getmarklist([{expr}]) リスト グローバル/ローカルのマークのリスト
getmatches([{win}]) リスト 現在のマッチのリスト
getmousepos() 辞書 マウスの最新の位置
getpid() 数値 Vim のプロセス ID
getpos({expr}) リスト カーソル・マークなどの位置を取得
getqflist() リスト quickfixリストの要素のリスト
getqflist({what}) 辞書 指定したquickfixリストのプロパティ
getreg([{regname} [, 1 [, {list}]]])
文字列/リスト レジスタの中身を取得
getreginfo([{regname}]) 辞書 レジスタについての情報
getregtype([{regname}]) 文字列 レジスタの種類を取得
gettabinfo([{expr}]) リスト タブページのリスト
gettabvar({nr}, {varname} [, {def}])
任意 タブ{nr}の変数{varname}または{def}
gettabwinvar({tabnr}, {winnr}, {name} [, {def}])
任意 タブページ{tabnr}の{winnr}の{name}
gettagstack([{nr}]) 辞書 ウィンドウ{nr}のタグスタックを取得
gettext({text}) 文字列 {text} の翻訳の検索
getwininfo([{winid}]) リスト 各ウィンドウに関する情報のリスト
getwinpos([{timeout}]) リスト Vim ウィンドウのピクセルでの X および
Y 座標
getwinposx() 数値 Vim ウィンドウのピクセルでの X 座標
getwinposy() 数値 Vim ウィンドウのピクセルでの Y 座標
getwinvar({nr}, {varname} [, {def}])
文字列 ウィンドウ{nr}の変数{varname}
glob({expr} [, {nosuf} [, {list} [, {alllinks}]]])
任意 {expr}内のfile wildcardを展開
glob2regpat({expr}) 文字列 globパターンを検索パターンに変換
globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]])
文字列 {path}の全ディレクトリに対し
glob({expr})を行う
has({feature} [, {check}]) 数値 機能{feature}がサポートならばTRUE
has_key({dict}, {key}) 数値 {dict}が要素{key}を持つならTRUE
haslocaldir([{winnr} [, {tabnr}]])
数値 現在のウィンドウで :lcd か :tcd が
実行されたならTRUE
hasmapto({what} [, {mode} [, {abbr}]])
数値 {what}のマッピングが存在するならTRUE
histadd({history}, {item}) 数値 ヒストリに追加
histdel({history} [, {item}]) 数値 ヒストリからitemを削除
histget({history} [, {index}]) 文字列 ヒストリから{index}アイテムを取得
histnr({history}) 数値 ヒストリの数
hlID({name}) 数値 highlight group {name}のID
hlexists({name}) 数値 highlight group {name}が存在したらTRUE
hostname() 文字列 vimが動作しているマシンの名前
iconv({expr}, {from}, {to}) 文字列 {expr}のエンコーディングを変換する
indent({lnum}) 文字列 行{lnum}のインデントを取得
index({object}, {expr} [, {start} [, {ic}]])
数値 {object}中に{expr}が現れる位置
input({prompt} [, {text} [, {completion}]])
文字列 ユーザーからの入力を取得
inputdialog({prompt} [, {text} [, {completion}]])
文字列 input()と同様。GUIのダイアログを使用
inputlist({textlist}) 数値 ユーザーに選択肢から選ばせる
inputrestore() 数値 先行入力を復元する
inputsave() 数値 先行入力を保存し、クリアする
inputsecret({prompt} [, {text}]) 文字列 input()だがテキストを隠す
insert({object}, {item} [, {idx}])
リスト {object}に要素{item}を挿入 [{idx}の前]
interrupt() なし スクリプトの実行を中断する
invert({expr}) 数値 ビット反転
isdirectory({directory}) 数値 {directory}がディレクトリならばTRUE
isinf({expr}) 数値 {expr}が無限大の値(正または負)かどうか
を判定する
islocked({expr}) 数値 {expr}がロックされているならTRUE
isnan({expr}) 数値 {expr}がNaNならばTRUE
items({dict}) リスト {dict}のキーと値のペアを取得
job_getchannel({job}) チャネル {job}のチャネルハンドルを取得
job_info([{job}]) 辞書 {job}についての情報を取得
job_setoptions({job}, {options}) なし {job}のオプションを設定する
job_start({command} [, {options}])
ジョブ ジョブを開始する
job_status({job}) 文字列 {job}のステータスを取得する
job_stop({job} [, {how}]) 数値 {job}を停止する
join({list} [, {sep}]) 文字列 {list}の要素を連結して文字列にする
js_decode({string}) 任意 JS形式のJSONをデコードする
js_encode({expr}) 文字列 JS形式のJSONにエンコードする
json_decode({string}) 任意 JSONをデコードする
json_encode({expr}) 文字列 JSONにエンコードする
keys({dict}) リスト {dict}のキーを取得
len({expr}) 数値 {expr}の長さを取得
libcall({lib}, {func}, {arg}) 文字列 ライブラリ{lib}の関数{func}をコール
libcallnr({lib}, {func}, {arg}) 数値 上と同じ。ただし数値を返す
line({expr} [, {winid}]) 数値 行番号の取得
line2byte({lnum}) 数値 行{lnum}のバイトカウント
lispindent({lnum}) 数値 {lnum}行目のLispインデント量を取得
list2str({list} [, {utf8}]) 文字列 {list}の数値を文字列に変換する
listener_add({callback} [, {buf}])
数値 変更を監視するためのコールバックを追加
listener_flush([{buf}]) なし リスナーコールバックを呼び出す
listener_remove({id}) なし リスナーコールバックを削除する
localtime() 数値 現在時刻
log({expr}) 浮動小数点数 {expr}の自然対数(底e)
log10({expr}) 浮動小数点数 浮動小数点数 {expr} の 10 を底
とする対数
luaeval({expr} [, {expr}]) 任意 Lua の式を評価する
map({expr1}, {expr2}) リスト/辞書 {expr1}の各要素を{expr2}に変える
maparg({name} [, {mode} [, {abbr} [, {dict}]]])
文字列/辞書
モード{mode}でのマッピング{name}の値
mapcheck({name} [, {mode} [, {abbr}]])
文字列 {name}にマッチするマッピングを確認
mapnew({expr1}, {expr2}) リスト/辞書 map() と同様だが新規のリストか
辞書を作る
mapset({mode}, {abbr}, {dict}) なし maparg() の結果からマッピングを復元
する
match({expr}, {pat} [, {start} [, {count}]])
数値 {expr}内で{pat}がマッチする位置
matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]])
数値 {pattern} を {group} で強調表示する
matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
数値 位置を {group} で強調表示する
matcharg({nr}) リスト :matchの引数
matchdelete({id} [, {win}]) 数値 {id} で指定されるマッチを削除する
matchend({expr}, {pat} [, {start} [, {count}]])
数値 {expr}内で{pat}が終了する位置
matchfuzzy({list}, {str} [, {dict}])
リスト {list} 内について {str} でのファジー
マッチ
matchfuzzypos({list}, {str} [, {dict}])
リスト {list} 内について {str} でのファジー
マッチ
matchlist({expr}, {pat} [, {start} [, {count}]])
リスト {expr}内の{pat}のマッチと部分マッチ
matchstr({expr}, {pat} [, {start} [, {count}]])
文字列 {expr}内の{count}番目の{pat}のマッチ
matchstrpos({expr}, {pat} [, {start} [, {count}]])
リスト {expr}内の{count}番目の{pat}のマッチ
max({expr}) 数値 {expr}内の要素の最大値
menu_info({name} [, {mode}]) 辞書 メニューの項目情報を取得する
min({expr}) 数値 {expr}内の要素の最小値
mkdir({name} [, {path} [, {prot}]])
数値 ディレクトリ{name}を作成
mode([expr]) 文字列 現在の編集モード
mzeval({expr}) 任意 MzScheme の式を評価する
nextnonblank({lnum}) 数値 {lnum}行目以降で空行でない行の行番号
nr2char({expr} [, {utf8}]) 文字列 ASCII/UTF8コード{expr}で示される文字
or({expr}, {expr}) 数値 ビット論理和
pathshorten({expr} [, {len}]) 文字列 path内の短縮したディレクトリ名
perleval({expr}) 任意 Perlの式を評価する
popup_atcursor({what}, {options}) 数値 カーソルの近くにポップアップウィンドウ
を作成する
popup_beval({what}, {options}) 数値 'balloon_eval' のポップアップウィンド
ウを作成する
popup_clear() なし すべてのポップアップウィンドウを閉じる
popup_close({id} [, {result}]) なし {id} のポップアップウィンドウを閉じる
popup_create({id} [, {result}]) 数値 ポップアップウィンドウを作成する
popup_dialog({what}, {options}) 数値 ダイアログとしてポップアップウィンドウ
を作成する
popup_filter_menu({id}, {key}) 数値 ポップアップウィンドウのメニューのフィ
ルター
popup_filter_yesno({id}, {key}) 数値 ポップアップウィンドウのダイアログの
フィルター
popup_findinfo() 数値 情報ポップアップウィンドウの window ID
を取得する
popup_findpreview() 数値 プレビューポップアップウィンドウの
window ID を取得する
popup_getoptions({id}) 辞書 ポップアップウィンドウ {id} のオプショ
ンを取得する
popup_getpos({id}) 辞書 ポップアップウィンドウ {id} の位置を取
得する
popup_hide({id}) なし ポップアップメニュー {id} を隠す
popup_list() リスト 全ポップアップのウィンドウIDのリストを
取得する
popup_locate({row}, {col}) 数値 指定位置のポップアップのウィンドウIDを
取得する
popup_menu({what}, {options}) 数値 メニューとして使われるポップアップウィ
ンドウを作成する
popup_move({id}, {options}) なし ポップアップウィンドウ {id} の位置を
セットする
popup_notifications({id}, {options})
数値 ポップアップウィンドウの通知を作成する
popup_setoptions({id}, {options})
なし ポップアップウィンドウ {id} のオプショ
ンを設定する
popup_settext({id}, {text}) なし ポップアップウィンドウ {id} のテキスト
を設定する
popup_show({id}) なし ポップアップウィンドウ {id} を再表示す
る
pow({x}, {y}) 浮動小数点数 {x} の {y} 乗
prevnonblank({lnum}) 数値 {lnum}行目以前の空行でない行の行番号
printf({fmt}, {expr1}...) 文字列 文字列を組み立てる
prompt_getprompt({buf}) 文字列 プロンプト文字列の取得
prompt_setcallback({buf}, {expr}) なし プロンプトコールバック関数を設定する
prompt_setinterrupt({buf}, {text}) なし プロンプト割り込み関数を設定する
prompt_setprompt({buf}, {text}) なし プロンプトテキストを設定する
prop_add({lnum}, {col}, {props}) なし テキストプロパティを追加
prop_clear({lnum} [, {lnum-end} [, {props}]])
なし 全てのテキストプロパティを削除
prop_find({props} [, {direction}])
辞書 テキストプロパティを検索する
prop_list({lnum} [, {props}]) リスト {lnum}行目のテキストプロパティを取得
prop_remove({props} [, {lnum} [, {lnum-end}]])
数値 テキストプロパティを削除
prop_type_add({name}, {props}) なし 新しいプロパティタイプを定義
prop_type_change({name}, {props})
なし 既存のプロパティタイプを変更
prop_type_delete({name} [, {props}])
なし プロパティタイプを削除
prop_type_get({name} [, {props}])
辞書 プロパティタイプの値を取得
prop_type_list([{props}]) リスト プロパティタイプ一覧を取得
pum_getpos() 辞書 ポップアップメニューが表示されている場
合、位置とサイズを取得
pumvisible() 数値 ポップアップメニューが表示されているか
py3eval({expr}) 任意 python3 の式を評価する
pyeval({expr}) 任意 Python の式を評価する
pyxeval({expr}) 任意 python_x の式を評価する
rand([{expr}]) 数値 疑似乱数を取得する
range({expr} [, {max} [, {stride}]])
リスト {expr}から{max}までの要素のリスト
readblob({fname}) Blob {fname} から Blob を読む
readdir({dir} [, {expr} [, {dict}]])
リスト {expr}によって選択された{dir}内のファ
イル名を取得
readdirex({dir} [, {expr} [, {dict}]])
リスト {expr}によって選択された{dir}内のファ
イル情報を取得
readfile({fname} [, {type} [, {max}]])
リスト ファイル{fname}から行のリストを取得
reduce({object}, {func} [, {initial}])
任意 {func} を使って {object} の 畳み込み
(reduce) を行う
reg_executing() 文字列 実行中のレジスタ名を取得する
reg_recording() 文字列 記録中のレジスタ名を取得する
reltime([{start} [, {end}]]) リスト 時刻の値を取得
reltimefloat({time}) 浮動小数点数 時刻の値を浮動小数点に変換
reltimestr({time}) 文字列 時刻の値を文字列に変換
remote_expr({server}, {string} [, {idvar} [, {timeout}]])
文字列 式を送信する
remote_foreground({server}) 数値 Vimサーバーを前面に出す
remote_peek({serverid} [, {retvar}])
数値 返信文字列を確認する
remote_read({serverid} [, {timeout}])
文字列 返信文字列を読み込む
remote_send({server}, {string} [, {idvar}])
文字列 キーシーケンスを送信する
remote_startserver({name}) なし サーバー {name} になる
remove({list}, {idx} [, {end}]) 任意/リスト
{list}から{idx}と{end}間の要素を削除
remove({blob}, {idx} [, {end}]) 数値/Blob
{Blob}から{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} を四捨五入する
rubyeval({expr}) 任意 Ruby の式を評価
screenattr({row}, {col}) 数値 スクリーン位置の属性
screenchar({row}, {col}) 数値 スクリーン位置の文字
screenchars({row}, {col}) リスト スクリーン位置の文字のリスト
screencol() 数値 現在のカーソル列
screenpos({winid}, {lnum}, {col}) 辞書 スクリーン行と列のテキスト
screenrow() 数値 現在のカーソル行
screenstring({row}, {col}) 文字列 スクリーン位置の文字列
search({pattern} [, {flags} [, {stopline} [, {timeout} [, {skip}]]]])
数値 {pattern} を検索する
searchcount([{options}]) 辞書 検索の統計の取得もしくは更新する
searchdecl({name} [, {global} [, {thisblock}]])
数値 変数の宣言を検索
searchpair({start}, {middle}, {end} [, {flags} [, {skip} [...]]])
数値 開始/終端のペアの他方を検索
searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} [...]]])
リスト 開始/終端のペアの他方を検索
searchpos({pattern} [, {flags} [, {stopline} [, {timeout} [, {skip}]]]])
リスト {pattern}を検索
server2client({clientid}, {string})
数値 返信文字列を送信する
serverlist() 文字列 利用可能なサーバーのリストを取得
setbufline({expr}, {lnum}, {text})
数値 バッファ {expr} の {lnum} 行目に {text}
を設定する
setbufvar({expr}, {varname}, {val}) バッファ{expr}内の変数{varname}に{val}
をセット
setcellwidths({list}) なし 文字のセル幅の上書き設定
setcharpos({expr}, {list}) 数値 {list} の {expr} 位置に設定
setcharsearch({dict}) 辞書 文字検索を{dict}に設定
setcmdpos({pos}) 数値 コマンドライン内のカーソル位置を設定
setcursorcharpos({list}) 数値 {list} の位置へカーソルを移動
setenv({name}, {val}) なし 環境変数を設定
setfperm({fname}, {mode}) 数値 ファイル {fname} のパーミッションを
{mode} に設定
setline({lnum}, {line}) 数値 行{lnum}に{line}(文字列)をセット
setloclist({nr}, {list} [, {action}])
数値 {list}を使ってlocationリストを変更
setloclist({nr}, {list}, {action}, {what})
数値 指定したlocationリストのプロパティを
変更
setmatches({list} [, {win}]) 数値 マッチのリストを復元する
setpos({expr}, {list}) なし {expr}の位置を{list}にする
setqflist({list} [, {action}]) 数値 {list}を使ってquickfixリストを変更
setqflist({list}, {action}, {what})
数値 指定したquickfixリストのプロパティを
変更
setreg({n}, {v} [, {opt}]) 数値 レジスタの値とタイプを設定
settabvar({nr}, {varname}, {val}) なし タブページ{nr}の変数{varname}を{val}に
設定する
settabwinvar({tabnr}, {winnr}, {varname}, {val})
なし タブページ{tabnr}内のウィンドウ{winnr}
の変数{varname}に{val}をセット
settagstack({nr}, {dict} [, {action}])
数値 {dict}を使ってタグスタックを変更
setwinvar({nr}, {varname}, {val}) なし ウィンドウ{nr}の変数{varname}に{val}を
セット
sha256({string}) 文字列 {string}のSHA256チェックサム
shellescape({string} [, {special}])
文字列 {string}をシェルコマンド引数として使う
ためにエスケープする。
shiftwidth([{col}]) 数値 実際に使用される 'shiftwidth' の値
sign_define({name} [, {dict}]) 数値 目印を定義または更新する
sign_define({list}) リスト 目印のリストを定義または更新する
sign_getdefined([{name}]) リスト 定義されている目印のリストを取得する
sign_getplaced([{expr} [, {dict}]])
リスト 設置されている目印のリストを取得する
sign_jump({id}, {group}, {expr})
数値 目印に移動する
sign_place({id}, {group}, {name}, {expr} [, {dict}])
数値 目印を設置する
sign_placelist({list}) リスト 目印のリストを設置する
sign_undefine([{name}]) 数値 目印を削除する
sign_undefine({list}) リスト 目印のリストを削除する
sign_unplace({group} [, {dict}])
数値 目印を解除する
sign_unplacelist({list}) リスト 目印のリストを解除する
simplify({filename}) 文字列 ファイル名を可能なかぎり簡略化する
sin({expr}) 浮動小数点数 {expr} の正弦(サイン)
sinh({expr}) 浮動小数点数 {expr}のハイパボリックサイン
slice({expr}, {start} [, {end}]) 文字列、リスト、Blob
文字列、リスト、Blob のスライス
sort({list} [, {func} [, {dict}]])
リスト 比較に{func}を使って{list}をソートする
sound_clear() なし すべてのサウンドの再生を停止する
sound_playevent({name} [, {callback}])
数値 イベントサウンドを再生する
sound_playfile({path} [, {callback}])
数値 サウンドファイル{path}を再生する
sound_stop({id}) なし サウンド{id}の再生を停止する
soundfold({word}) 文字列 {word}のsound-fold
spellbadword() 文字列 カーソル位置のスペルミスした単語
spellsuggest({word} [, {max} [, {capital}]])
リスト スペリング補完
split({expr} [, {pat} [, {keepempty}]])
リスト {expr}を{pat}で区切ってリストを作る
sqrt({expr}) 浮動小数点数 {expr} の平方根
srand([{expr}]) リスト rand() 用の種を取得する
state([{what}]) 文字列 Vimの現在の状態
str2float({expr}) 浮動小数点数 文字列を浮動小数点数に変換する
str2list({expr} [, {utf8}]) リスト {expr}の各文字をASCII / UTF8値に変換する
str2nr({expr} [, {base} [, {quoted}]])
数値 文字列を数値に変換する
strcharlen({expr}) 数値 文字列 {expr} の文字の長さ
strcharpart({str}, {start} [, {len} [, {skipcc}]])
文字列 {str} 内 {start} 文字目 から {len} 文
字分
strchars({expr} [, {skipcc}]) 数値 文字列{expr}の文字の数
strdisplaywidth({expr} [, {col}]) 数値 文字列{expr}の表示幅
strftime({format} [, {time}]) 文字列 指定されたフォーマットで時刻を書式化
strgetchar({str}, {index}) 数値 {str} から {index} 番目の文字インデッ
クスを得る
stridx({haystack}, {needle} [, {start}])
数値 {haystack}内の{needle}のインデックス
string({expr}) 文字列 {expr}の値の文字列表現
strlen({expr}) 数値 文字列{expr}の長さ
strpart({str}, {start} [, {len} [, {chars}]])
文字列 {str}内{start}バイトから{len}バイト/
文字分
strptime({format}, {timestring})
数値 {timestring} を unix タイムスタンプに
変換
strridx({haystack}, {needle} [, {start}])
数値 {haystack}内の最後の{needle}のインデッ
クス
strtrans({expr}) 文字列 文字列を表示可能に変更
strwidth({expr}) 数値 文字列{expr}の表示セル幅
submatch({nr} [, {list}]) 文字列/リスト
":s" やsubstitute()における特定のマッチ
substitute({expr}, {pat}, {sub}, {flags})
文字列 {expr}の{pat}を{sub}に置換え
swapinfo({fname}) 辞書 スワップファイル {fname} に関する情報
swapname({expr}) 文字列 バッファ{expr}のスワップファイル名
synID({line}, {col}, {trans}) 数値 {line}と{col}のsyntax IDを取得
synIDattr({synID}, {what} [, {mode}])
文字列 syntax ID{synID}の属性{what}を取得
synIDtrans({synID}) 数値 {synID}の翻訳されたsyntax ID
synconcealed({lnum}, {col}) リスト Conceal の情報
synstack({lnum}, {col}) リスト {lnum}行{col}列目における構文IDの
スタック
system({expr} [, {input}]) 文字列 シェルコマンド{expr}の出力結果
systemlist({expr} [, {input}]) リスト シェルコマンド{expr}の出力結果
tabpagebuflist([{arg}]) リスト タブページ内のバッファ番号のリスト
tabpagenr([{arg}]) 数値 現在または最後のタブページの番号
tabpagewinnr({tabarg} [, {arg}])
数値 タブページ内の現在のウィンドウの番号
tagfiles() リスト 使用しているタグファイルのリスト
taglist({expr} [, {filename}]) リスト {expr}にマッチするタグのリスト
tan({expr}) 浮動小数点数 {expr}のタンジェント
tanh({expr}) 浮動小数点数 {expr}のハイパボリックタンジェ
ント
tempname() 文字列 テンポラリファイルの名前
term_dumpdiff({filename}, {filename} [, {options}])
数値 2 つのダンプ間の差分を表示する
term_dumpload({filename} [, {options}])
数値 スクリーンダンプの表示
term_dumpwrite({buf}, {filename} [, {options}])
なし 端末ウィンドウの内容をダンプする
term_getaltscreen({buf}) 数値 代替スクリーンフラグを取得する
term_getansicolors({buf}) リスト GUI カラーモードでの ANSI パレットを取
得する
term_getattr({attr}, {what}) 数値 属性 {what} の値を取得する
term_getcursor({buf}) リスト 端末のカーソル位置を取得する
term_getjob({buf}) ジョブ 端末に関連付けられているジョブを取得す
る
term_getline({buf}, {row}) 文字列 端末から 1 行のテキストを取得する
term_getscrolled({buf}) 数値 端末のスクロール数を取得する
term_getsize({buf}) リスト 端末のサイズを取得する
term_getstatus({buf}) 文字列 端末の状態を取得する
term_gettitle({buf}) 文字列 端末のタイトルを取得する
term_gettty({buf}, [{input}]) 文字列 端末の tty 名を取得する
term_list() リスト 端末バッファのリストを取得する
term_scrape({buf}, {row}) リスト 端末スクリーンの行を取得する
term_sendkeys({buf}, {keys}) なし キー入力を端末に送信する
term_setansicolors({buf}, {colors})
なし GUI カラーモードでの ANSI パレットを設
定する
term_setapi({buf}, {expr}) なし terminal-api の関数名プリフィックス
を設定する
term_setkill({buf}, {how}) なし 端末のジョブを停止するためのシグナルを
設定する
term_setrestore({buf}, {command}) なし 端末を復元するためのコマンドを設定する
term_setsize({buf}, {rows}, {cols})
なし 端末のサイズを設定する
term_start({cmd} [, {options}]) 数値 端末ウィンドウを開きジョブを実行する
term_wait({buf} [, {time}]) 数値 スクリーンが更新されるのを待つ
terminalprops() 辞書 端末のプロパティ
test_alloc_fail({id}, {countdown}, {repeat})
なし メモリの確保を失敗にさせる
test_autochdir() なし 起動時に 'autochdir' を有効にする
test_feedinput({string}) なし キー入力を入力バッファに追加する
test_garbagecollect_now() なし テスト用に直ちにメモリを解放する
test_garbagecollect_soon() なし テスト用にすぐにメモリを解放する
test_getvalue({string}) 任意 内部変数の値を取得する
test_gui_drop_files({list}, {row}, {col}, {mods})
なし ファイルのリストをウィンドウにドロップ
する
test_gui_mouse_event({button}, {row}, {col}, {repeated}, {mods})
なし マウスイベントを入力バッファへ追加する
test_ignore_error({expr}) なし 特定のエラーを無視する
test_null_blob() Blob テスト用のnull値
test_null_channel() チャネル テスト用のnull値
test_null_dict() 辞書 テスト用のnull値
test_null_function() Funcref テスト用のnull値
test_null_job() ジョブ テスト用のnull値
test_null_list() リスト テスト用のnull値
test_null_partial() Funcref テスト用のnull値
test_null_string() 文字列 テスト用のnull値
test_option_not_set({name}) なし オプション設定フラグをリセットする
test_override({expr}, {val}) なし Vimの内部処理を置き換えてテストする
test_refcount({expr}) 数値 {expr}の参照カウントを取得
test_scrollbar({which}, {value}, {dragging})
なし GUIのスクロールのテスト用
test_setmouse({row}, {col}) なし テスト用にマウス位置を設定する
test_settime({expr}) なし テスト用に現在の時刻を設定する
test_srand_seed([seed]) なし srand() のテスト用に種を設定する
test_unknown() 任意 テスト用のunknown値
test_void() 任意 テスト用のvoid値
timer_info([{id}]) リスト タイマーに関する情報
timer_pause({id}, {pause}) なし タイマーの一時停止または一時停止解除
timer_start({time}, {callback} [, {options}])
数値 タイマーを作成する
timer_stop({timer}) なし タイマーを停止する
timer_stopall() なし すべてのタイマーを停止する
tolower({expr}) 文字列 文字列{expr}を小文字にする
toupper({expr}) 文字列 文字列{expr}を大文字にする
tr({src}, {fromstr}, {tostr}) 文字列 {src}中に現れる文字{fromstr}を{tostr}
に変換する
trim({text} [, {mask} [, {dir}]])
文字列 {text} から {mask} 内の文字を切り取る
trunc({expr}) 浮動小数点数 浮動小数点数{expr}を切り詰める
type({expr}) 数値 変数{expr}の型
typename({expr}) 文字列 {expr}の型を表す
undofile({name}) 文字列 {name}に対するアンドゥファイルの名前
undotree() リスト アンドゥファイルツリー
uniq({list} [, {func} [, {dict}]])
リスト リストから隣接した重複を削除
values({dict}) リスト {dict}の値のリスト
virtcol({expr}) 数値 カーソルのスクリーンカラム位置
visualmode([expr]) 文字列 最後に使われたビジュアルモード
wildmenumode() 数値 'wildmenu' モードが有効かどうか
win_execute({id}, {command} [, {silent}])
文字列 ウィンドウ{id}で{command}を実行する
win_findbuf({bufnr}) リスト {bufnr}を含むウィンドウを見つける
win_getid([{win} [, {tab}]]) 数値 {tab}の{win}のウィンドウIDを取得
win_gettype([{nr}]) 文字列 ウィンドウ {nr} の型
win_gotoid({expr}) 数値 ID {expr}のウィンドウに行く
win_id2tabwin({expr}) リスト ウィンドウIDからタブとウィンドウnr取得
win_id2win({expr}) 数値 ウィンドウIDからウィンドウnr取得
win_screenpos({nr}) リスト ウィンドウ {nr} のスクリーン位置を取得
する
win_splitmove({nr}, {target} [, {options}])
数値 ウィンドウ {nr} を {target} の分割へ移
動
winbufnr({nr}) 数値 ウィンドウ{nr}のバッファ番号
wincol() 数値 カーソル位置のウィンドウ桁
winheight({nr}) 数値 ウィンドウ{nr}の高さ
windowsversion() 文字列 MS-Windows OS のバージョン
winlayout([{tabnr}]) リスト タブ {tabnr} 内のウィンドウの配置
winline() 数値 カーソル位置のウィンドウ行
winnr([{expr}]) 数値 現在のウィンドウの番号
winrestcmd() 文字列 ウィンドウサイズを復元するコマンド
winrestview({dict}) なし 現在のウィンドウのビューを復元
winsaveview() 辞書 現在のウィンドウのビューを保存
winwidth({nr}) 数値 ウィンドウ{nr}の幅を取得
wordcount() 辞書 バイト/文字/単語の統計情報を取得
writefile({object}, {fname} [, {flags}])
数値 行の Blob または list をファイルに
書き込む
xor({expr}, {expr}) 数値 ビット排他的論理和
abs({expr}) abs()
{expr} の絶対値を返す。{expr} の値が浮動小数点数である場合は浮
動小数点数を返す。{expr} がNumberに変換可能な場合は数値が戻
り値になる。それ以外の場合はエラーメッセージを表示し、-1
を返す。
例:
echo abs(1.456)
1.456 echo abs(-5.456)
5.456 echo abs(-4)
4method としても使用できる:
Compute()->abs()
{+float 機能を有効にしてコンパイルしたときのみ有効}
acos({expr}) acos()
{expr} の逆余弦 (アークコサイン) をラジアンで返す。
値は [0, pi] の範囲の浮動小数点数 (Float)。
{expr} は [-1, 1] の範囲の浮動小数点数 (Float) か数値
(Number) でなければならない。
例:
:echo acos(0)
1.570796 :echo acos(-0.5)
2.094395method としても使用できる:
Compute()->acos()
{+float 機能を有効にしてコンパイルしたときのみ有効}
add({object}, {expr}) add()
List または Blob {object}の末尾に項目{expr}を追加する。結
果の List か Blob を返す。例:
:let alist = add([1, 2, 3], item)
:call add(mylist, "woodstock")
Note {expr}がリストのときは、1個の要素として追加される。リスト:call add(mylist, "woodstock")
を連結するにはextend()を使う。
{object}が Blob の場合、{expr}は数値でなければならない。
他の位置に要素を追加するにはinsert()を使う。
method としても使用できる:
mylist->add(val1)->add(val2)
and({expr}, {expr}) and()
二つの引数のビット論理積。引数は数値に変換される。リスト、辞
書、浮動小数点数を指定するとエラーになる。
例:
:let flag = and(bits, 0x80)
append({lnum}, {text}) append()
{text}がリストListのときは、各要素をカレントバッファの{lnum}
行目以降にテキストとして追加する。
リストでないときは、{text}をテキストとしてカレントバッファの
{lnum}行目以降にテキストとして追加する。
要素としてどの型でも受け入れて文字列に変換される。
{lnum}は0でもよく、その場合は1行目の前に行を挿入する。
{lnum}はgetline()と同様に扱われる。
失敗した場合は1を返す({lnum}が不正な範囲であるか、メモリ不足)。
成功なら0を返す。例:
:let failed = append(line('$'), "# THE END")
:let failed = append(0, ["Chapter 1", "the beginning"])
:let failed = append(0, ["Chapter 1", "the beginning"])
リストの後に method としても使用でき、ベースは第2引数として
渡される:
mylist->append(lnum)
appendbufline({expr}, {lnum}, {text}) appendbufline()
append() と同様、ただしバッファ {expr} にテキストを追加する。
この関数は、ロードされたバッファに対してのみ機能する。必要であ
れば、最初に bufload() を呼び出すこと。
{expr} の使い方については bufname() を参照。
{lnum} は append() と同様に扱われる。Note: line() の使用
は、追加対象のバッファではなくカレントバッファに適用される。
バッファの最後に追加するには "$" を使用する。
成功時には 0 が返り、失敗時には 1 が返る。
{expr} が有効なバッファでない、もしくは {lnum} が有効でない場
合、エラーメッセージが与えられる。例:
:let failed = appendbufline(13, 0, "# THE START")
リストの後に method としても使用でき、ベースは第2引数として
渡される:
mylist->appendbufline(buf, lnum)
*argc()*
argc([{winid}])引数リスト内の、ファイルの数を返す。arglistを参照。
{winid} が指定されていない場合は、カレントウィンドウの引数リス
トが使われる。
{winid} が -1 の場合、グローバル引数リストが使われる。
もしくは、{winid} は、引数リストが使用されるウィンドウを指定す
る: ウィンドウ番号またはウィンドウID。引数{winid} が無効な場合
は -1 を返す。
argidx()
argidx() 引数リスト内の現在のインデックスを返す。最初のファイルは0とな
る。argc() - 1が最後のファイルとなる。arglistを参照。
arglistid()
arglistid([{winnr} [, {tabnr}]])
引数リストの ID を返す。値は引数リストを区別するための数値であ
る。ゼロはグローバル引数リストを意味する。arglist 参照。
引数が無効な場合は -1 を返す。
引数を指定しなかった場合はカレントウィンドウが使われる。
{winnr} を指定した場合はカレントタブページ内のウィンドウが使わ
れる。
{winnr} と {tabnr} を指定した場合は指定したタブページ内のウィ
ンドウが使われる。
{winnr} にはウィンドウ番号またはwindow-IDが使える。
argv()
argv([{nr} [, {winid}]])
結果は引数リスト内の、{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} が指定されなかった場合、または、-1 の場合、引数リス:while i < argc()
: let f = escape(fnameescape(argv(i)), '.')
: exe 'amenu Arg.' . f . ' :e ' . f . '<CR>'
: let i = i + 1
:endwhile
ト arglist 全体を返す。
引数{winid} はウィンドウIDを指定する。
Vimのコマンドライン引数については、v:argv を参照。
asin({expr}) asin()
{expr} の逆正弦 (アークサイン) をラジアンで返す。
値は [-pi/2, pi/2] の範囲の浮動小数点数 (Float)。
{expr} は [-1, 1] の範囲の浮動小数点数 (Float) か数値
(Number) でなければならない。
例:
:echo asin(0.8)
0.927295 :echo asin(-0.5)
-0.523599method としても使用できる:
Compute()->asin()
{+float 機能つきでコンパイルされたときのみ有効}
assert_ 関数群はここに文書化されている: assert-functions-details
atan({expr}) atan()
{expr} の逆正接(アークタンジェント)の主値を浮動小数点数
Float で返す。主値はラジアンで[-pi/2, +pi/2]の範囲内にある。
{expr} は Float か Number に評価されなければならない。
例:
:echo atan(100)
1.560797 :echo atan(-4.01)
-1.326405method としても使用できる:
Compute()->atan()
{+float 機能つきでコンパイルされたときのみ有効}
atan2({expr1}, {expr2}) atan2()
{expr1} / {expr2} の逆正接 (アークタンジェント) をラジアンで返
す。値は [-pi, pi] の範囲の浮動小数点数 (Float)。
{expr1} と {expr2} は浮動小数点数 (Float) か数値 (Number)
でなければならない。
例:
:echo atan2(-1, 1)
-0.785398 :echo atan2(1, -1)
2.356194method としても使用できる:
Compute()->atan(1)
{+float 機能を有効にしてコンパイルしたときのみ有効}
balloon_gettext() balloon_gettext()
バルーン内の現在のテキストを返す。文字列に対してのみ使用され、
リストには使用されない。
balloon_show({expr}) balloon_show()
{expr} をバルーン内に表示する。GUI では {expr} は文字列として
扱われる。端末では {expr} をバルーンの行を含むリストとしてもよ
い。{expr} がリストでない場合、balloon_split() で分割される。
{expr} が空文字列の場合、既存のバルーンは削除される。
例:
func GetBalloonContent()
" ... 内容の取得を開始
return ''
endfunc
set balloonexpr=GetBalloonContent()
" ... 内容の取得を開始
return ''
endfunc
set balloonexpr=GetBalloonContent()
func BalloonCallback(result)
call balloon_show(a:result)
endfunc
method としても使用できる:call balloon_show(a:result)
endfunc
GetText()->balloon_show()
想定される使用方法は、バルーンの内容の取得が 'balloonexpr' か
ら開始されることである。そこから非同期メソッドを呼び出し、コー
ルバックから balloon_show() を呼び出す。'balloonexpr' 自身は
空文字列かプレースホルダーを返すことができる。
バルーンを表示できないときは何も起こらず、エラーメッセージも表
示されない。
{Vimが +balloon_eval もしくは +balloon_eval_term 機能付き
でコンパイルされたときのみ有効}
balloon_split({msg}) balloon_split()
{msg} をバルーン内で表示される行に分割する。カレントウィンドウ
サイズ用に分割され、デバッガ出力を表示するために最適化される。
分割された行の List を返す。
method としても使用できる:
GetText()->balloon_split()->balloon_show()
{+balloon_eval_term 機能付きでコンパイルされたときのみ有効}
browse()
browse({save}, {title}, {initdir}, {default})
ファイル選択ダイアログを起動。"has("browse")" がTRUEを返すと
き (幾つかのGUIバージョンに限定)だけ利用可能。
入力フィールドの意味は:
{save} TRUEならば書込み用ファイルの選択
{title} ダイアログのタイトル
{initdir} ダイアログの始まるディレクトリ
{default} ファイル名の省略値
ダイアログがキャンセルされるか、何かエラーがあるか、もしくはブ
ラウジングが不可能ならば、空文字列が戻ってくる。
browsedir()
browsedir({title}, {initdir})
ディレクトリ選択ダイアログを起動。"has("browse")" がTRUEを返
すとき(幾つかのGUIバージョンに限定)だけ利用可能。
ディレクトリ選択ダイアログがないシステムにおいてはファイル選択
ダイアログが使われる。その場合は、指定したいディレクトリの中の
ファイルを選択すること。
入力フィールドの意味は:
{title} ダイアログのタイトル
{initdir} ダイアログの始まるディレクトリ
ダイアログがキャンセルされるか、何かエラーがあるか、もしくはブ
ラウジングが不可能ならば、空文字列が戻ってくる。
bufadd({name}) bufadd()
バッファリストに {name} という名前でバッファを追加する。
もし、ファイル {name} 用のバッファが既に存在した場合、そのバッ
ファの番号を返す。そうでなければ、新しく作られたバッファの番号
を返す。{name} が空の文字列だったときは新しいバッファが常に作
成される。
バッファには 'buflisted' が設定されず、まだロードされない。
バッファにテキストを追加するにはこれを使用する:
let bufnr = bufadd('someName')
call bufload(bufnr)
call setbufline(bufnr, 1, ['some', 'text'])
method としても使用できる:call bufload(bufnr)
call setbufline(bufnr, 1, ['some', 'text'])
let bufnr = 'somename'->bufadd()
bufexists({expr}) bufexists()
結果は数値で、{expr}と呼ばれるバッファが存在すればTRUEとな
る。
{expr}が数値の場合、バッファ番号とみなされる。数値の 0 はカレ
ントウィンドウの代替バッファである。
{expr}が文字列の場合、バッファ名に正確にマッチしなければな
らない。名前として以下のものが許される:
- カレントディレクトリからの相対パス。
- フルパス。
- 'buftype' が "nofile" であるバッファの名前
- URL名。
バッファリストにないバッファも検索される。
Note :buffersの出力で、ヘルプファイルは短い名前でリストされ
ているが、bufexists()は長い名前でないと見つけることができない。
ある名前を bufexists() に与えて非零になったとしても、その名前
をコマンド :buffer に与える際には expand() を使って展開し
なければならない場合がある。特に MS-Windows の "c:\DOCUME~1"
という 8.3 名形式において。
代替ファイル名が存在するかを判定するには "bufexists(0)" を使う。
method としても使用できる:
let exists = 'somename'->bufexists()
buffer_exists()
以前の名前: buffer_exists().
buflisted({expr}) buflisted()
戻り値は数値で、{expr}と呼ばれるバッファが存在しリストされてい
る ('buflisted' オプションがオンになっている) ならば結果は
TRUEとなる。引数{expr}はbufexists()と同じように扱われる。
method としても使用できる:
let listed = 'somename'->buflisted()
bufload({expr}) bufload()
バッファ{expr}がロードされていることを保証する。バッファの名前
が既存のファイルを参照しているときは、そのファイルが読み込まれ
る。そうでなければバッファは空になる。もし既にバッファが読み込
まれていれば、変更はない。
バッファのファイルに対して既存のスワップファイルがある場合、ダ
イアログなしで、バッファはロードされる。
引数{expr}はbufexists()と同じように扱われる。
method としても使用できる:
eval 'somename'->bufload()
bufloaded({expr}) bufloaded()
戻り値は数値で、{expr}と呼ばれるバッファが存在しロード済み(
ウィンドウに表示されているか、隠されているかは問わない)ならば
結果はTRUEとなる。引数{expr}はbufexists()と同じように扱わ
れる。
method としても使用できる:
let loaded = 'somename'->bufloaded()
bufname([{expr}]) bufname()
戻り値はバッファの名前。バッファ名はコマンド :ls で表示され
るものとほとんど同じだが、例えば "[No Name]" などの特殊名は使
用しない。
{expr}が省略された場合は、カレントバッファが使われる。
{expr}が数値ならば、その番号のバッファ名が返される。0は現在の
ウィンドウの代替バッファを意味する。{expr}が文字列ならば、バッ
ファ名に対してファイル名マッチング file-pattern を行うパター
ンとなる。このマッチングは常に、'magic' をセットし 'cpoptions'
を空にした状態で行われる。複数マッチしてしまった場合には空文字
列が返される。
"" や "%" は現在のバッファを意味し、"#" は代替バッファを意味す
る。
完全マッチのものが優先され、完全マッチがなければ、バッファ名の
先頭でのマッチ、末尾でのマッチ、中間でのマッチが探される。完全
マッチのみを探すには、パターン先頭に "^" を、末尾に "$" をつけ
る。
まずバッファリストにあるバッファが探される。そこで1個だけマッ
チが見つかればそれを返す。次にバッファリストにないものが探され
る。
{expr}が文字列のときに、それをバッファ番号として使いたいなら
ば、0を足すことによって強制的に数値にすることができる:
echo bufname("3" + 0)
method としても使用できる: echo bufnr->bufname()
バッファが存在しないか名前を持っていない場合には、空文字列が返
される。
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()bufname(3) name of buffer 3
bufname("%") name of current buffer
bufname("file2") name of buffer where "file2" matches.
以前の名前: buffer_name().
bufnr()
bufnr([{expr} [, {create}]])
結果はバッファの番号。バッファ番号はコマンド :ls で表示され
るものと同様。{expr}の使い方は前述の bufname() を参照。
バッファが存在しない場合-1が返される。ただし、{create}が与えら
れて真であるときは、バッファリストに載せない新しいバッファを作
成し、その番号を返す。例:
let newbuf = bufnr('Scratch001', 1)
空の名前を使用すると、カレントバッファが使用される。空の名前で新しいバッファを作成するには、bufadd() を使用する。
bufnr("$")は最後のバッファを意味する:
:let last_buffer = bufnr("$")
結果は存在しているバッファのうちで、もっとも大きなバッファ番号となる。Note そのバッファ番号より小さいバッファ番号を持つ(ハズ
の)バッファが、必ずしも全て存在するとは限らない。なぜなら
":bwipeout" がバッファを消すことができるからだ。バッファが存在
するかテストするにはbufexists()を使う。
method としても使用できる:
echo bufref->bufnr()
以前の名前: buffer_number(). buffer_number()
last_buffer_nr()
bufnr("$")の以前の名前: last_buffer_nr().
bufwinid({expr}) bufwinid()
その結果は数値で、バッファ{expr}に関連付けられた最初のウィンド
ウのwindow-ID。{expr}の使い方は前述のbufname()を参照。バッ
ファ{expr}が存在しないか、ウィンドウが無い場合は、-1が返され
る。例:
echo "A window containing buffer 1 is " . (bufwinid(1))
現在のタブページのみを処理する。
method としても使用できる:
FindBuffer()->bufwinid()
bufwinnr({expr}) bufwinnr()
結果は数値で、バッファ{expr}に関連付けられた最初のウィンドウの
番号。{expr}の使い方は前述のbufname()を参照。バッファ{expr}
が存在しないか、ウィンドウが無い場合には-1を返す。例:
echo "A window containing buffer 1 is " . (bufwinnr(1))
この番号はCTRL-W_wや ":wincmd w" :wincmdで使える。
method としても使用できる:
FindBuffer()->bufwinnr()
byte2line({byte}) byte2line()
カレントバッファの先頭から{byte}番目の文字が、何行目に含まれる
かを返す。これにはカレントバッファの 'fileformat' に依存した、
改行文字も含まれる。先頭の文字にはバイトカウント1が与えられる。
line2byte()とgoと:gotoも参照。
method としても使用できる:
GetOffset()->byte2line()
{+byte_offset 機能付きでコンパイルされたときのみ有効}
byteidx({expr}, {nr}) byteidx()
文字列{expr}の{nr}番目の文字のバイトインデックスを返す。最初の
文字の{nr}は0であり、そして戻り値は0となる。
マルチバイト文字がない時は{nr}に等しい値を返す。
合成文字はまとめて計算される。合成文字のバイト数はそれが合成さ
れているベース文字のバイト数に合算される。合成文字を別々に数え
るには byteidxcomp() を参照。
例 :
echo matchstr(str, ".", byteidx(str, 3))
は4文字目を表示する。次も同じことをする: let s = strpart(str, byteidx(str, 3))
echo strpart(s, 0, byteidx(s, 1))
strgetchar() と strcharpart() も参照。echo strpart(s, 0, byteidx(s, 1))
{expr}が{nr}文字以下の場合は-1を返す。
{expr}がちょうど{nr}文字の場合は文字列の長さ(バイト単位)を返す。
method としても使用できる:
GetName()->byteidx(idx)
byteidxcomp({expr}, {nr}) byteidxcomp()
byteidx() と同じだが、合成文字は個別にカウントされる。例:
let s = 'e' . nr2char(0x301)
echo byteidx(s, 1)
echo byteidxcomp(s, 1)
echo byteidxcomp(s, 2)
1 番目と 3 番目は 3 が出力される ('e' の長さと合成文字の長さをecho byteidx(s, 1)
echo byteidxcomp(s, 1)
echo byteidxcomp(s, 2)
足すと 3 バイト)。2 番目は 1 が出力される ('e' は 1 バイト)。
'encoding' に Unicode が設定されているときのみ byteidx() と違っ
た動作になる。
method としても使用できる:
GetName()->byteidxcomp(idx)
call({func}, {arglist} [, {dict}]) call() E699
リストList{arglist}の要素を引数として関数{func}を呼ぶ。
{func}はFuncrefでも関数の名前でもよい。
a:firstlineとa:lastlineにはカレント行が代入される。
呼び出した関数の戻り値を返す。
{dict}は "dict" 属性つきの関数用で、これがローカル変数 "self"
に代入される。Dictionary-functionを参照。
method としても使用できる:
GetFunc()->call([arg, arg], dict)
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.0method としても使用できる:
Compute()->ceil()
{+float 機能つきでコンパイルされたときのみ有効}
ch_ 関数群はここに文書化されている: channel-functions-details
changenr() changenr()
最も最近の変更の番号を返す。:undolistで表示される番号と同じ
であり、:undoコマンドの引数として使うことができる。
変更を行った直後ではその変更の番号となる。redoを行った直後は
redoされた変更の番号となる。undoを行った直後はundoされた変更よ
り1小さい番号になる。
char2nr({expr} [, {utf8}]) char2nr()
{expr}の最初の文字のASCIIコードを返す。例:
char2nr(" ") returns 32
char2nr("ABC") returns 65
{utf8} を省略、またはゼロを指定すると、現在の 'encoding' が適char2nr("ABC") returns 65
用される。"utf-8" の場合の例:
char2nr("á") returns 225
char2nr("á"[0]) returns 195
{utf8} に真を指定すると、常に utf-8 文字として扱われる。char2nr("á"[0]) returns 195
合成文字は個別の文字として扱われる。
nr2char() はこの逆を行う。
文字列を文字の番号のリストに変換するには:
let str = "ABC"
let list = map(split(str, '\zs'), {_, val -> char2nr(val)})
結果: [65, 66, 67]let list = map(split(str, '\zs'), {_, val -> char2nr(val)})
method としても使用できる:
GetChar()->char2nr()
charclass({string}) charclass()
{string} 内の最初の文字の文字クラスを返す。
文字クラスは次のいずれか:
0 空白
1 区切り文字
2 単語文字
3 絵文字
その他 Unicode 固有のクラス
クラスはパターンと単語単位の移動で使われる。
charcol()
charcol({expr}) col() と同様だが {expr} で返す桁位置がバイトインデックスでは
なく文字インデックスになる。
例:
5行目のテキスト "여보세요" の '세' にカーソルがある状態:
charcol('.') returns 3
col('.') returns 7
col('.') returns 7
|method| としても使用できる: >
GetPos()->col()
GetPos()->col()
charidx()
charidx({string}, {idx} [, {countcc}])
{string} 内の {idx} バイト目の文字インデックスを返す。最初の文
字のインデックスは0。
マルチバイト文字がない時は {idx} に等しい値を返す。
{countcc} がないもしくは FALSE の場合、合成文字は分割して文
字としてカウントせず、先行する基底文字に合成文字のバイト長が足
される。
{countcc} が TRUE の場合、合成文字は分割した文字としてカウン
トされる。
引数が不正であるか {idx} が {string} の最後のバイトより大きい
場合-1が返る。最初の引数が文字列でない、2番目の引数が数値でな
い、もしくは3番目の引数ありで0でも1でもない場合はエラーとなる。
文字インデックスからバイトインデックスを得るには byteidx()
と byteidxcomp() を参照。
例:
echo charidx('áb́ć', 3) returns 1
echo charidx('áb́ć', 6, 1) returns 4
echo charidx('áb́ć', 16) returns -1
echo charidx('áb́ć', 6, 1) returns 4
echo charidx('áb́ć', 16) returns -1
method としても使用できる:
GetName()->charidx(idx)
chdir({dir}) chdir()
{dir}は文字列でなければならない。
現在の作業ディレクトリを {dir} に変更する。ディレクトリの変更
範囲は、カレントウィンドウのディレクトリによって異なる:
- カレントウィンドウにウィンドウローカルディレクトリ
(:lcd)がある場合は、ウィンドウローカルディレクトリ
を変更する。
- それ以外の場合、カレントタブページにローカルディレク
トリ(:tcd)がある場合は、タブページのローカルディレ
クトリを変更する。
- それ以外の場合、グローバルディレクトリを変更する。
成功した場合は、前の作業ディレクトリを返す。ディレクトリを復元
するには、これを別の chdir() に渡すこと。
失敗した場合は、空の文字列を返す。
例:
let save_dir = chdir(newdir)
if save_dir != ""
" ... いくつかの作業をおこなう
call chdir(save_dir)
endif
if save_dir != ""
" ... いくつかの作業をおこなう
call chdir(save_dir)
endif
method としても使用できる:
GetDir()->chdir()
cindent({lnum}) cindent()
'cindent' で使われるのと同じC言語用のインデント規則に従った場
合の{lnum}行目のインデント量を返す。
インデント量はスペースで数えられ、'tabstop' の値は関係ない。
{lnum}はgetline()の場合と同様に扱われる。
{lnum}が無効な値のときや+cindent機能なしでコンパイルされてい
るときは-1を返す。
C-indentingを参照。
method としても使用できる:
GetLnum()->cindent()
clearmatches([{win}]) clearmatches()
matchadd() と コマンド :match によりカレントウィンドウに定
義されたマッチをすべて消去する。
{win} が指定されれば、カレントウィンドウではなく指定されたウィ
ンドウあるいはウィンドウID を対象にする。
method としても使用できる:
GetWin()->clearmatches()
col()
col({expr}) 戻り値は数値で、{expr}で与えられる位置の桁番号(バイトインデッ
クス)。有効な位置は:
. 現在の位置
$ カレント行の末尾(カレント行のバイト数+1を返す)
'x マークxの位置(マークが設定されていない場合0)
v ビジュアルモードでは: ビジュアル選択領域の開始行
(カーソルがその端)。ビジュアルモード以外ではカーソ
ル位置を返す。すぐに更新される点が '< と違う。
さらに {expr} は [lnum, col] という行番号と桁番号のリストで
あってもよい。col に "$" を指定して、ある行の最後の桁を取得す
るのにとても便利である。"lnum" か "col" が範囲外である場合は
0 を返す。
行番号を取得するにはline()を使う。行番号と桁番号両方を取得す
るにはgetpos()を使う。
画面上の桁番号を取得するにはvirtcol()を使う。文字の位置を取
得するには charcol() を使う。
Note 現在のファイルのマークしか使えないことに注意。
例:
col(".") カーソルの桁
col("$") カレント行の長さ+1
col("'t") マークtの桁
col("'" . markname) マークmarknameの桁
先頭の桁は1になる。戻り値0はエラーを意味する。col("$") カレント行の長さ+1
col("'t") マークtの桁
col("'" . markname) マークmarknameの桁
大文字のマークは他のバッファを指しているかもしれない。
'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>
\<C-O>:set ve=all<CR>
\<C-O>:echo col(".") . "\n" <Bar>
\let &ve = save_ve<CR>
method としても使用できる:
GetPos()->col()
complete({startcol}, {matches}) complete() E785
挿入モード補完の候補を設定する。
挿入モードでのみ使用できる。CTRL-R = (i_CTRL-R を参照)と組み
合わせてマッピングを作る必要がある。CTRL-Oの後や、<expr>マッピ
ングの中では正しく動作しない。
{startcol}は補完すべき単語の開始位置を示す、行内のバイトオフセッ
トである。その位置からカーソルまでのテキストが補完すべき単語と
なる。
{matches}はリストListでなければならない。リストの各要素が1つ
の候補となる。この要素として許される値については
complete-itemsを参照。
Note この関数を呼んだ後は補完を停止させるようなテキストの挿入
をしないように注意しなければならない。
この関数で設定した候補は普通の挿入モード補完と同じ様にCTRL-Nと
CTRL-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がfunc! ListMonths()
call complete(col('.'), ['January', 'February', 'March',
\ 'April', 'May', 'June', 'July', 'August', 'September',
\ 'October', 'November', 'December'])
return ''
endfunc
挿入されてしまわないように空文字列を返していることに注意。
method としても使用でき、ベースは第2引数として渡される:
GetMatches()->complete(col('.'))
complete_add({expr}) complete_add()
候補のリストに{expr}を追加する。'completefunc' で指定された関
数の中でのみ使われる。
失敗したときは0を返す(空文字列かメモリ不足)。候補が追加された
ときは1を返し、その候補が既にリストに存在するときは2を返す。
{expr}の説明についてはcomplete-functionsを参照。'omnifunc'
が返すリストと同じである。
method としても使用できる:
GetMoreMatches()->complete_add()
complete_check() complete_check()
補完候補を探している間にキーがタイプされたかどうか確認する。補
完の検索に時間がかかる場合に使われる。候補の検索を中断しようと
しているときはTRUEを返す。そうでないときは0を返す。
'completefunc' で指定された関数の中でのみ使われる。
complete_info()
complete_info([{what}])
挿入モードの補完に関する情報を辞書 Dictionary で返す。
ins-completion を参照。
要素は以下の通り:
mode 現在の補完モード名の文字列。
値は complete_info_mode を参照。
pum_visible ポップアップメニューが表示されているなら TRUE
pumvisible() を参照。
items 補完マッチのリスト。各要素は "word", "abbr",
"menu", "kind", "info", "user_data" を含む辞書。
complete-items を参照。
selected 選択された補完候補のインデックス。最初のイン
デックスが 0。どの補完候補も選択されていなけれ
ば -1 (入力したテキストのみ表示、もしくは <Up>
や <Down> キーを利用した最後の補完後に選択しな
かった場合)。
inserted 入力された文字列。[現時点では未実装]
complete_info_mode
mode の値は:
"" 補完モードでない
"keyword" キーワード補完 i_CTRL-X_CTRL-N
"ctrl_x" CTRL-X のみが入力された i_CTRL-X
"whole_line" 行全体補完 i_CTRL-X_CTRL-L
"files" ファイル名補完 i_CTRL-X_CTRL-F
"tags" タグ補完 i_CTRL-X_CTRL-]
"path_defines" 定義補完 i_CTRL-X_CTRL-D
"path_patterns" インクルード補完 i_CTRL-X_CTRL-I
"dictionary" 辞書補完 i_CTRL-X_CTRL-K
"thesaurus" 同義語補完 i_CTRL-X_CTRL-T
"cmdline" Vim コマンドライン補完 i_CTRL-X_CTRL-V
"function" ユーザー定義補完 i_CTRL-X_CTRL-U
"omni" オムニ補完 i_CTRL-X_CTRL-O
"spell" スペル補完 i_CTRL-X_s
"eval" complete() 補完
"unknown" その他の内部モード
オプショナル引数としてリスト {what} が与えられると、 {what} に
ある項目のみが返る。{what} 内のサポートされていない項目は無視
される。
ポップアップメニューの位置とサイズを取得するには、
pum_getpos() を参照。CompleteChanged イベント中に v:event
でも利用可能である。
例:
" 全ての項目を取得
call complete_info()
" 'mode' のみを取得
call complete_info(['mode'])
" 'mode' と 'pum_visible' のみを取得
call complete_info(['mode', 'pum_visible'])
call complete_info()
" 'mode' のみを取得
call complete_info(['mode'])
" 'mode' と 'pum_visible' のみを取得
call complete_info(['mode', 'pum_visible'])
method としても使用できる:
GetItems()->complete_info()
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}を省略した場合、1が使用される。
省略可能な引数{type}はダイアログの種類を指定する。これは GTK,
Mac, Motif, 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のダイアログではボタンが使用される。ボタンの配置は:if choice == 0
: echo "make up your mind!"
:elseif choice == 3
: echo "tasteful"
:else
: echo "I prefer bananas myself."
:endif
'guioptions' の 'v' フラグに依存する。もしも 'v' フラグが含ま
れているのなら、ボタンは常に垂直に配置される。そうでなければ水
平に配置しようと試みられる。水平配置がうまくマッチしない場合
は、垂直配置が使われる。幾つかのシステムでは常に水平配置が使わ
れる。
method としても使用できる:
BuildMessage()->confirm("&Yes\n&No")
copy()
copy({expr}) {expr}のコピーを作る。数値と文字列の場合は、{expr}そのものとコ
ピーの間に違いはない。
{expr}がリストListの場合は浅いコピーを作る。つまり元のリスト
を変更してもコピーは変更されず、逆も同じである。しかし要素は共
通で、片方の要素に対し変更を加えると、もう一方の要素も変更され
る。
辞書はリストと同様な方法でコピーされる。
deepcopy()も参照。
method としても使用できる:
mylist->copy()
cos({expr}) cos()
{expr} の余弦(コサイン)をラジアンで浮動小数点数 Float で返す。
{expr} は Float または Number に評価されなければならない。
例:
:echo cos(100)
0.862319 :echo cos(-4.01)
-0.646043method としても使用できる:
Compute()->cos()
{+float 機能つきでコンパイルされたときのみ有効}
cosh({expr}) cosh()
{expr} の双曲線余弦 (ハイパボリックコサイン) を返す。
値は [1, inf] の範囲の浮動小数点数 (Float)。
{expr} は浮動小数点数 (Float) か 数値 (Number) でなければ
ならない。
例:
:echo cosh(0.5)
1.127626 :echo cosh(-0.5)
-1.127626method としても使用できる:
Compute()->cosh()
{+float 機能を有効にしてコンパイルしたときのみ有効}
count({comp}, {expr} [, {ic} [, {start}]]) count()
文字列String、リストListまたは辞書Dictionary {comp} の中
に値 {expr} が何回現れるかを返す。
{start} が指定されたときはそのインデックスの要素から検索を開始
する。{start} は {comp} がリストの場合のみ使用できる。
{ic} が指定され、TRUEの場合は大文字・小文字は区別されない。
{comp} が文字列の場合、オーバーラップしていない {expr} の回数
が返される。{expr} が空文字列の場合は 0 が返る。
method としても使用できる:
mylist->count(val)
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
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
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から始まる。
引数に {list} が 1 つだけ指定された場合は、それは要素が 2 個か
3 個、または 4 個の List として解釈される:
[{lnum}, {col}]
[{lnum}, {col}, {off}]
[{lnum}, {col}, {off}, {curswant}]
これは getpos() や getcurpos() の戻り値とほぼ同じである。
違いは最初の要素がないこと。
カーソルを文字数でカウントして位置させるには、
setcursorcharpos() を使う。
この関数を呼んでもジャンプリストは変更されない。
{lnum}はgetline()と同様に扱われる。
{lnum}がバッファの行数よりも大きい場合は、最後の行へ移動する。
{lnum}が0の場合はカレント行に留まる。
{col}がその行のバイト数より大きい場合は、その行の最後の文字へ
移動する。
{col}が0の場合は、カレント桁に留まる。
{curswant} が与えられた場合は、縦方向移動の優先的列番号として
使われる。指定がない場合は {col} が使われる。
'virtualedit' が有効のとき、{off}は文字の先頭からの画面上のオ
フセットを指定する。例えば、<Tab>の中の位置や最後の文字より後
などへも移動できる。
カーソルを移動できたときは 0 を、できなかったときは-1 を返す。
method としても使用できる:
GetCursorPos()->cursor()
debugbreak({pid}) debugbreak()
主にデバッグしているプログラムに割り込むために使用される。プロ
セス {pid} に対して SIGTRAP を発生させる。関係のないプロセスへ
の振る舞いは未定義である。terminal-debugger を参照。
{MS-Windows 上でのみ有効}
method としても使用できる:
GetPid()->debugbreak()
deepcopy({expr} [, {noref}]) deepcopy() E698
{expr}のコピーを作る。数値と文字列の場合は、{expr}そのものとコ
ピーの間に違いはない。
{expr}がリストListの場合は完全なコピーを作る。つまり元のリス
トを変更してもコピーは変更されず、逆も同じである。要素の1つが
リストまたは辞書であるときは、再帰的にコピーが作成される。
よってコピーの要素に変更を加えても元のリストの要素は変更を受け
ない。
辞書はリストと同様な方法でコピーされる。
{noref}が省略された、または0のとき、含まれているリストや辞書は
1度だけコピーされる。全ての参照はこのただ1つのコピーを指す。
{noref}が1の場合、リストや辞書は現れるたびに新しいコピーが作ら
れる。そのため循環参照があるとdeepcopy()は失敗する。
E724
ネストは100レベルまで可能である。それ以上参照を繰り返している
要素があると、{noref}が1の場合は失敗する。
copy()も参照。
method としても使用できる:
GetObject()->deepcopy()
delete({fname} [, {flags}]) delete()
{flags}を指定しないもしくは{flags}を空で指定した場合: ファイル
{fname}を削除する。
これは{fname}がシンボリックリンクの時でも動作する。
{flags}が "d" の場合: ディレクトリ{fname}を削除する。
これはディレクトリ{fname}が空でない場合は失敗する。
{flags}が "rf" の場合: ディレクトリ{fname}、その中に含むすべて
のものを再帰的に削除する。気をつけて!
Note: MS-Windowsでは、使用中のディレクトリを削除することはでき
ない。
シンボリックリンクは、それが示すものではなく、リンク自身が削除
される。
結果は数値であり、削除に成功すれば 0/false、削除に(部分的にで
も)失敗すれば -1/true である。
リスト List から項目を削除するには remove() を使う。
バッファから行を削除するには:deleteもしくはdeletebufline()
を使う。
method としても使用できる:
GetName()->delete()
deletebufline({expr}, {first} [, {last}]) deletebufline()
{first} から {last} (を含む) までの行をバッファ {expr} から削
除する。{last} が省略されている場合、{first} 行だけを削除する。
成功時には 0 が返され、失敗時には 1 が返される。
この関数は、ロードされたバッファに対してのみ機能する。必要であ
れば、最初に bufload() を呼び出すこと。
{expr} の使い方は前述の bufname() を参照。
{first} および {last} は getline() と同様に扱われる。Note:
line() の使用はカレントバッファを参照する。バッファ {expr}
内の最後の行を参照するには "$" を使用する。
method としても使用できる:
GetBuffer()->deletebufline(1)
did_filetype()
did_filetype() autocommandが実行されFileTypeイベントが一度でも起こっていれば、
TRUEが返る。スクリプトのFileTypeイベントが、複数回呼び出され
るのを回避するのに使える。 FileType
:setf FALLBACK が使用されている場合は FALSE を返す。
他のファイルへ移動すると、このカウンタはリセットされる。よって
実際は、カレントバッファに対してFileTypeイベントが発生したかど
うかを判定する。他のバッファを開く自動コマンドの中でこの関数を
使って 'filetype' を設定し、構文ファイルを読み込むために使え
る。
diff_filler({lnum}) diff_filler()
{lnum}行目より上にある削除行の数を返す。削除行とは、差分モード
で他方のウィンドウにテキストが挿入されていることを表す行のこと
である。削除行は表示はされているが、実際にはバッファに存在しな
い。
{lnum}はgetline()と同様に扱われる。つまり "." はカレント行と
なり、"'m" はマークmを表す。
カレントウィンドウが差分モードでないときは0を返す。
method としても使用できる:
GetLnum()->diff_filler()
diff_hlID({lnum}, {col}) diff_hlID()
差分モードで{lnum}行{col}桁(バイト単位)の位置のハイライトIDを
返す。カレント行に変更がないときは0を返す。
{lnum}はgetline()と同様に扱われる。つまり "." はカレント行と
なり、"'m" はマークmを表す。
先頭の桁の{col}は1となり、最初の行の{lnum}は1となる。
ハイライトIDはsynIDattr()を使って構文情報を得るために使える。
method としても使用できる:
GetLnum()->diff_hlID(col)
digraph_get({chars}) digraph_get() E1214
{chars} のダイグラフを返す。これは正確に2文字の文字列である必
要がある。もし {chars} が2文字ちょうどでない、もしくは {chars}
のダイグラフがないなら、エラーとなり空文字列を返す。
必要であれば文字はUnicodeから 'encoding' に変換される。変換が
利用可能である必要があり、失敗することがある。
digraph_getlist() も参照。
例:
" 組み込みのダイグラフの取得
:echo digraph_get('00') " '∞' が返る
:echo digraph_get('00') " '∞' が返る
" ユーザー定義のダイグラフの取得
:call digraph_set('aa', 'あ')
:echo digraph_get('aa') " 'あ' が返る
:call digraph_set('aa', 'あ')
:echo digraph_get('aa') " 'あ' が返る
method としても使用できる:
GetChars()->digraph_get()
この関数は +digraphs 機能付きでコンパイルされたときのみ動作
する。機能が無効の場合、この関数はエラーメッセージを表示する。
digraph_getlist([{listall}]) digraph_getlist()
ダイグラフのリストを返す。引数 {listall} が真で与えられたとき、
デフォルトのダイグラフを含む全ダイグラフを返す。それ以外はユー
ザー定義のダイグラフのみを返す。
必要であれば文字はUnicodeから 'encoding' に変換される。変換が
利用可能である必要があり、失敗することがある。
digraph_get() も参照。
例:
" ユーザー定義のダイグラフの取得
:echo digraph_getlist()
:echo digraph_getlist()
" デフォルトを含む全ダイグラフの取得
:echo digraph_getlist(1)
:echo digraph_getlist(1)
method としても使用できる:
GetNumber()->digraph_getlist()
この関数は +digraphs 機能付きでコンパイルされたときのみ動作
する。機能が無効の場合、この関数はエラーメッセージを表示する。
digraph_set({chars}, {digraph}) digraph_set() E1205
ダイグラフ {chars} をリストに追加する。{chars} は2文字の文字列
の必要がある。{digraph} はUTF-8でエンコードされた1文字の文字
列。合成文字は無視されないことに注意。この関数は :digraphs
と同様だがスペース始まりのダイグラフを登録するのに便利である。
この関数はダイグラフ digraph は登録されたなら v:true を返す。
もし失敗したなら、エラーメッセージとともに v:false を返す。
一度に複数のダイグラフを登録したいなら、digraph_setlist() が
使える。
例:
call digraph_set(' ', 'あ')
method としても使用できる:
GetString()->digraph_set('あ')
この関数は +digraphs 機能付きでコンパイルされたときのみ動作
する。機能が無効の場合、この関数はエラーメッセージを表示する。
digraph_setlist({digraphlist}) digraph_setlist()
digraph_set() と同じだが複数のダイグラフを一度に追加できる。
{digraphlist} はリストのリストで、各リストは digraph_set()
と同じ {chars} と {digraph} の2つの文字列を持つ。
例:
call digraph_setlist([['aa', 'あ'], ['ii', 'い']])
これは以下と似ている:
for [chars, digraph] in [['aa', 'あ'], ['ii', 'い']]
call digraph_set(chars, digraph)
endfor
しかし、この関数は最初のエラーでリターンし、それ以降のダイグラcall digraph_set(chars, digraph)
endfor
フは追加されない点が異なる。
method としても使用できる:
GetList()->digraph_setlist()
この関数は +digraphs 機能付きでコンパイルされたときのみ動作
する。機能が無効の場合、この関数はエラーメッセージを表示する。
echoraw({expr}) echoraw()
{expr}を表示不可能な文字を含み、そのまま出力する。これは端末
コードを出力するために使える。例えば、modifyOtherKeysを無効に
するためには:
call echoraw(&t_TE)
さらに再度有効にするためには: call echoraw(&t_TI)
この方法でターミナルを壊すことができるため、気を付けて取り扱うこと。
empty({expr}) empty()
{expr}が空なら1を、そうでなければ0を返す。
- リストListまたは辞書Dictionaryは要素を1個も持たないとき
空とみなされる。
- 文字列 String はその長さが0のとき空とみなされる。
- 数値と浮動小数点数は値が0のとき空とみなされる。
- v:false, v:none, v:null は空であり、v:true は空では
ない。
- ジョブ Job は開始に失敗したときは空である。
- チャネル Channel は閉じられていると空である。
- Blob はその長さが0のときは空である。
長いリストに対しては長さを0と比較するよりこちらの方がずっと高
速である。
method としても使用できる:
mylist->empty()
environ() environ()
すべての環境変数を辞書として返す。このように環境変数が存在する
かどうかを確認できる:
:echo has_key(environ(), 'HOME')
Note 変数名はキャメルケース(CamelCase)でも構わない。大文字と小文字を区別しないためにこれを使用すること:
:echo index(keys(environ()), 'HOME', 0, 1) != -1
escape({string}, {chars}) escape()
{string}内に現れる{chars}の文字をバックスラッシュでエスケープ
する。例:
:echo escape('c:\program files\vim', ' \')
結果: c:\\program\ files\\vim
shellescape() および fnameescape() も参照。method としても使用できる:
GetText()->escape(' \')
eval()
eval({string}) {string}を評価し、値を返す。string()の戻り値を元の値に戻すの
に非常に便利である。数値、浮動小数点数、文字列、Blob およびそ
れらの複合に対して動作する。実際に存在する関数への Funcref
に対しても動作する。
method としても使用できる:
argv->join()->eval()
eventhandler() eventhandler()
イベントハンドラの中では1を返す。つまり、ユーザーの文字入力を
待っている間に、ファイルをドラッグ&ドロップするなど割り込みさ
れたことを表す。このときは対話的なコマンドは使えない。イベント
ハンドラの中でないときは0を返す。
executable({expr}) executable()
{expr}という名前の実行可能ファイルが存在するかどうか判定する。
{expr}は引数を何もつけないプログラム名でなければならない。
executable()は$PATHと通常のプログラム検索ディレクトリを参照す
る。 PATHEXT
MS-Windowsでは ".exe"、".bat" などの拡張子は含めても含めなくて
もよい。省略された場合は$PATHEXTの拡張子を検索する。よって
"foo.exe" が存在しなければ "foo.exe.bat" が見つかることもあり
うる。$PATHEXTが存在しなければ ".com;.exe;.bat;.cmd" が使われ
る。$PATHEXTにドットだけを含めると拡張子なしの名前を検索するこ
とができる。'shell' がUnixシェルのように思われるときは、{expr}
の後に拡張子をつけない名前も検索される。
MS-Windowsではファイルが存在するかどうかだけを判定し、それが
ディレクトリでないことや、それが本当に実行可能であるかどうかは
判定されない。
MS-WindowsではVimと同じディレクトリにある実行ファイルは必ず発
見できる。Vimがこのディレクトリを$PATHに加えるためである。
win32-PATH。
戻り値は数値:
1 存在する
0 存在しない
-1 このシステム上では実装されていない
exepath() は、実行ファイルの絶対パスを取得するのに使用するこ
とができる。
method としても使用できる:
GetCommand()->executable()
execute({command} [, {silent}]) execute()
単一あるいは複数のExコマンドを実行して、出力を文字列として返
す。
{command} は文字列かリストを使える。リストの場合はそれらの行は
一行ずつ実行される。
以下と同等である:
redir => var
{command}
redir END
{command}
redir END
オプションの {silent} の引数は以下の値を取ることができる:
"" :silent を使わない
"silent" :silent を使う
"silent!" :silent!を使う
デフォルトは "silent" である。Note "silent!" は redir とは異
なり、エラーメッセージは削除されることに注意すること。もし外部
コマンドを使って画面がおかしくなる様であれば、代わりに
system()を使うことができる。
E930
{command} の中のどこかで:redirを使うことができない。
行のリストを得るために、出力にsplit()を使うことができる:
split(execute('args'), "\n")
現在のウィンドウとは別のウィンドウでコマンドを実行するには
win_execute() を使用すること。
再帰的に使用されると、再帰呼び出しの出力は、上位呼び出しの出力
に含まれない。
method としても使用できる:
GetCommand()->execute()
exepath({expr}) exepath()
{expr} が実行ファイルで、それが絶対パス、相対パス、または
$PATH の中に存在する場合は、そのフルパスを返す。
Note: {expr} が "./" で開始している場合はカレントディレクトリ
が使われる。Vim のパスを得る場合に問題になるかもしれない:
echo exepath(v:progpath)
{expr} が $PATH の中に見つからないか、それが実行ファイルではなかった場合は空文字列が返る。
method としても使用できる:
GetCommand()->exepath()
exists()
exists({expr}) 結果は数値で、変数{expr}が存在すればTRUEとなり、そうでなけれ
ば0となる。
Note: コンパイルされる :def 関数内のローカル変数と引数は
exists() からは見えない。
ある機能がサポートされているか判定するにはhas()を使う。
ファイルが存在するかを判定するにはfilereadable()を使う。
引数{expr}は文字列で次のうちいずれかである。
&option-name Vimオプション(存在するかだけを判定し、
本当に動作するかは判定しない)
+option-name 動作するVimオプション
$ENVNAME 環境変数(空文字列と比較することでも判
定できる)
*funcname 組み込み関数(functions参照)かユーザー
が定義した関数(user-functions参照)の
内、実装済みのもの。また Funcref であ
る変数に対しても動作する。
?funcname 実装されているかもしれない組み込み関数。
"funcname" が有効かチェックするのに利
用できる。
varname 内部変数(internal-variables)
curly-braces-names, Dictionaryの要
素、Listの要素などに対しても動作する。
コンパイルされる :def 関数内のローカ
ル変数には動作しない。
インデックスの評価で無効な式であるとエ
ラーメッセージが出る可能性があることに
注意。例:
:let l = [1, 2, 3]
:echo exists("l[5]")
0:echo exists("l[5]")
:echo exists("l[xx]")
E121: Undefined variable: xx0
:cmdname exコマンド: 組み込みコマンド、ユーザー
定義コマンド、コマンド修飾子:command。
戻り値:
1 コマンド名の先頭に一致
2 コマンド名に完全一致
3 複数のユーザー定義コマンドに一致
コマンドが定義されているかどうかを判定
するには、必ず戻り値が2であるかを確認
すること。
:2match :2matchのコマンド。
:3match :3matchのコマンド。
#event このイベントに対する自動コマンド定義
#event#pattern このイベントとパターンに対する自動コマ
ンド定義(パターンは文字そのままに解釈
され、自動コマンドのパターンと1文字ず
つ比較される)
#group 自動コマンドグループが存在するか
#group#event このグループとイベントに対して自動コマ
ンドが定義されているか
#group#event#pattern
このグループ、イベント、パターンに対す
る自動コマンド定義
##event このイベントに対する自動コマンドがサ
ポートされているか
例:
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("$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の値を渡し、それが存在するかどうか判定してしまう。
method としても使用できる:
Varname()->exists()
exp({expr}) exp()
{expr} の指数を返す。
値は [0, inf] の範囲の浮動小数点数 (Float)。
{expr} は浮動小数点数 (Float) か数値 (Number) でなければな
らない。
例:
:echo exp(2)
7.389056 :echo exp(-1)
0.367879method としても使用できる:
Compute()->exp()
{+float 機能を有効にしてコンパイルしたときのみ有効}
expand({expr} [, {nosuf} [, {list}]]) expand()
ワイルドカードと{expr}内の特殊なキーワードを展開する。
'wildignorecase' が適用される。
{list} が指定されその値がTRUEなら、結果はリストで返される。
そうでない場合は結果は文字列で返される。その場合、複数のマッチ
があるときはそれらは文字 <NL> で区切られる。[Note: バージョン
5.0 では空白文字が用いられ、スペースを含むファイル名について問
題を引き起こしていた]
展開が失敗した場合、結果は空文字列となる。{expr} が '%'、'#'、
'<' で始まらない限り、存在しないファイル名というのは、結果の文
字列には含まれない。下記を参照のこと。
{expr} が '%' か '#' か '<' で始まる場合には、展開は
cmdline-specialのように、変換子を受け付け、それらに関連付け
られた変換が施される。ここに簡単な概略を示す:
% 現在のファイル名
# 代替バッファのファイル名
#n n番の代替バッファのファイル名
<cfile> カーソルの下のファイル名
<afile> autocmdのファイル名
<abuf> autocmdのバッファ名
<amatch> autocmdのマッチした名称
<cexpr> カーソル下のC言語の式
<sfile> 取り込み(source)中のファイル名、関数名
<slnum> 取り込み(source)中の行番号または関数内
の行番号
<sflnum> スクリプトファイルの行番号。関数内でも
同様。
<SID> "<SNR>123_" ここで "123" は現在のスク
リプトのID <SID>
<stack> コールスタック
<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}は、コマンドラインのファイ
ル名と同じように展開される。{nosuf}引数にTRUEを指定しない限
り、'suffixes' と 'wildignore' が使用される。
存在しないファイルの名前も結果の文字列に含まれる。"**" を使う
とディレクトリツリーを検索できる。例えば、カレントディレクトリ
以下にある全ての "README" を見つけるには次のようにする:
:echo expand("**/README")
expand() はシェルの持っている変数や環境変数を展開できる。しか
し展開のためにシェルを起動するかもしれないので速度が遅くなるこ
とがある。expr-env-expand 参照。
展開された変数はファイル名のリストのように扱われる。環境変数を
展開できないときはそのままになる。よって、
":echo expand('$FOOBAR')" の結果は "$FOOBAR" となる。
存在するファイルを探すにはglob()を参照。外部コマンドの「生
の」実行結果を扱うにはsystem()を参照。
method としても使用できる:
Getpattern()->expand()
expandcmd({expr}) expandcmd()
:edit などのExコマンドに対しておこなわれているように、{expr}
の特殊な項目を展開する。これは {expr} の中のどこでも、
expand() のような特殊なキーワードと環境変数を展開する。
"~user" および "~/path" は冒頭でのみ展開される。展開された文字
列を返す。例:
:echo expandcmd('make %<.o')
method としても使用できる:
GetCommand()->expandcmd()
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} と同じリストである場合、コピーされる要素の:call extend(mylist, [2, 3], 1)
数はリストの元の長さと同じである。
例として {expr3} が 1 のとき、最初の要素の N 個の新しいコピー
が挿入される(ここで N はリストの元の長さ)。
リストに1個の要素を加えるにはadd()を使う。2つのリストを連結
して新しいリストを作るには演算子+を使う:
:let newlist = [1, 2, 3] + [4, 5]
両方とも辞書である場合:
{expr2}の全要素を{expr1}に加える。
{expr1}と{expr2}で共通のキーがある場合は、{expr3}によって動作
が決まる:
{expr3} = "keep" の場合: {expr1}の値そのままにする
{expr3} = "force" の場合: {expr2}の値で上書きする
{expr3} = "error" の場合: エラーメッセージを表示する E737
{expr3}が省略された場合は "force" と同じになる。
{expr2}が空でないならば{expr1}が変更される。必要ならば最初に
{expr1}のコピーを作ること。
{expr2}は変更されない。
{expr1} がロックされていて、かつ {expr2} が空でない場合は操作
は失敗する。
{expr1}を返す。
method としても使用できる:
mylist->extend(otherlist)
extendnew({expr1}, {expr2} [, {expr3}]) extendnew()
extend() と同様だが、{expr1} へ要素を追加する代わりに、新し
いリストまたは辞書が作成されて返される。{expr1} は変更されな
い。要素は引き続き {expr2} で変更できるが、そうしたくないなら
最初に deepcopy() を利用すること。
feedkeys({string} [, {mode}]) feedkeys()
{string}中の各文字を、あたかもマッピングまたはユーザーによって
タイプされたかのように、処理キューに入れる。
デフォルトではこれらの文字は先行入力バッファの末尾に付け足され
る。そのためマッピングを展開している途中であれば、これらの文字
はマッピングを展開した後に来ることになる。他の文字の前に挿入す
るには、'i' フラグを使用する。それらはマッピングからの任意の文
字の前の挿入の次に実行される。
この関数は、{string}中の文字が処理されるまでは待たない。
特殊なキーを{string}に含めるにはダブルクォートと "\..." 記法を
使う(expr-quoteを参照)。例えば、feedkeys("\<CR>")は<Enter>
キーの押下をシミュレートする。しかしfeedkeys('\<CR>')とすると、
この文字の通り5文字を挿入する。
役に立つかもしれない特別なコードは <Ignore> だ。それは何もせず
に文字の待機を終了する。 <Ignore>
{mode}は以下の文字フラグを含む文字列:
'm' キーをマップ展開する。これが既定である。{mode}が省略さ
れたときは、挿入されたキーはマップ展開の対象になる。
'n' キーをマップ展開しない。
't' キーをタイプされたかのように扱う。そうでない場合は
マッピングから展開されたかのように扱われる。これは
undoや折り畳みの展開などで違いが現れる。
'L' 低レベル入力。UnixまたはGUIを使用している場合にのみ機
能する。キーは端末から来ているかのように使われる。他の
フラグは使用されない。 E980
CTRL-C で割り込み時、かつ 't' が含まれていると内部
"got_int" フラグが設定される。
'i' 追加する代わりに文字を挿入する。(上記参照)
'x' 先行入力が空になるまでコマンドを実行する。
これは ":normal!" を使うのと似ている。
'x' なしで数回feedkeys()を呼んだ後、'x' ありで1回
({string}が空でも可能) feedkeys()を呼ぶことで先行入力
をすべて実行できる。Note Vimが挿入モードを終了したとき
は、スクリプト続行前の文字入力待ちによる立ち往生を避け
るために、<Esc>が入力されたかのように振る舞う。
Note コマンドの実行中に feedkeys() を再帰的に呼び出し
た場合、最後の呼び出しですべての先行入力が消費される。
'!' 'x' と一緒に使用すると挿入モードを終了しない。タイマー
が少し後で挿入モードを終了するように設定されているとき
にテストで使用できる。CursorHoldIのテストに便利である。
戻り値は常に0。
method としても使用できる:
GetInput()->feedkeys()
filereadable()
filereadable({file})
結果は数値で、{file}というファイルが存在し、読み込むことが可能
ならばTRUEとなる。ファイル{file}が存在しないかディレクトリ
だった場合には、結果はFALSEとなる。引数{file}は文字列として
使えればどのような表現でもよい。
ファイルが読み込み可能でなくてもよい場合にはglob()を使う。
{file} はそのまま使用されるため、最初にワイルドカードを展開す
ることを推奨する:
echo filereadable('~/.vimrc')
0
echo filereadable(expand('~/.vimrc'))
1
0
echo filereadable(expand('~/.vimrc'))
1
method としても使用できる:
GetName()->filereadable()
file_readable()以前の名前: file_readable().
filewritable({file}) filewritable()
結果は数値で、{file}というファイルが存在し、書き込むことが可能
ならば1となる。ファイル{file}が存在しないか書き込み不可能であ
る場合には、結果は0となる。{file}がディレクトリであり、書き込
み可能な場合、結果は2となる。
method としても使用できる:
GetName()->filewritable()
filter({expr1}, {expr2}) filter()
{expr1}はリストList、Blob、辞書Dictionaryでなければなら
ない。
{expr1}の各要素に対して{expr2}を評価し、その結果が0ならばリス
トまたは辞書からその要素を削除する。Blob であればそのバイト
を削除する。
{expr2}は文字列stringまたは関数参照Funcrefでなければならな
い。
{expr2}が文字列の場合、{expr2}の内部ではv:valが現在の要素の
値を保持している。辞書の場合はv:keyが現在の要素のキーを保持
しており、リストの場合はv:keyが現在の要素のインデックスを保
持している。Blob の場合は v:key が現在のバイトのインデック
スになる。
例:
call filter(mylist, 'v:val !~ "OLD"')
は要素 "OLD" を削除する。 call filter(mydict, 'v:key >= 8')
は8未満のキーを持つ要素を削除する。 call filter(var, 0)
は全要素を削除する。つまりリストまたは辞書をクリアする。Note {expr2}は式を表す文字列である。バックスラッシュを二重に
しなくても済むようにliteral-stringを使うとよいだろう。ただし
その場合はシングルクォートを二重にしなければならない。
{expr2}がFuncrefの場合は、2つの引数で呼び出される:
1. 現在の要素のキーまたはインデックス。
2. 現在の要素の値。
関数は、その要素を保持すべきときはTRUEを返さなければならな
い。リストの奇数版目の要素を保持する例:
func Odd(idx, val)
return a:idx % 2 == 1
endfunc
call filter(mylist, function('Odd'))
lambda を使えばより短く書ける:return a:idx % 2 == 1
endfunc
call filter(mylist, function('Odd'))
call filter(myList, {idx, val -> idx * val <= 42})
"val" を使わない場合は省略できる: call filter(myList, {idx -> idx % 2 == 1})
この操作はその場で(in-place)行われる。リストや辞書を変更したく
ない場合は最初にコピーを作ること:
:let l = filter(copy(mylist), 'v:val =~ "KEEP"')
{expr1}のリスト List、Blob、 または辞書 Dictionary をフ
ィルターした結果を返す。{expr2}を評価している最中にエラーが発
生した場合は、{expr1}内のそれ以降の要素の処理は行われない。
{expr2}が関数参照の場合、関数が "abort" フラグつきで定義されて
いない限り、関数内のエラーは無視される。
method としても使用できる:
mylist->filter(expr2)
finddir({name} [, {path} [, {count}]]) finddir()
{path}から{name}という名前のディレクトリを探す。ディレクトリを
上方・下方のどちらにも再帰的に検索できる。{path}の記法について
はfile-searchingを参照。
最初に見つかったディレクトリのパスを返す。そのディレクトリがカ
レントディレクトリの下にある場合は相対パスを返す。そうでなけれ
ば絶対パスを返す。
{path}が省略されたとき、または空のときはオプション 'path' の値
が使われる。
省略可能な引数{count}が指定されたときは、最初に見つかったディ
レクトリでなく、{count}番目に見つかったディレクトリを返す。
{count}が負の場合は、見つかったディレクトリ全てのリストList
を返す。これはexコマンド:findによく似ている。
{+file_in_path 機能付きでコンパイルされたときのみ利用可能}
method としても使用できる:
GetName()->finddir()
findfile({name} [, {path} [, {count}]]) findfile()
finddir()と同様だが、ディレクトリでなくファイルを検索する。
'suffixesadd' が適用される。
例:
:echo findfile("tags.vim", ".;")
この例は、カレントファイルがあるディレクトリから上方に"tags.vim" を見つけるまで再帰的に検索する。
method としても使用できる:
GetName()->findfile()
flatten({list} [, {maxdepth}]) flatten()
リスト {list} を {maxdepth} の深さまで平坦化する。{maxdepth}
が無い場合の結果は {maxdepth} が非常に巨大な数であるのように、
リスト List からネストを除去する。
{list} は変更が入るので、それを望まないなら flattennew() を
使うこと。
Vim9 script では flatten() は使用できないため、常に
flattennew() を使う必要がある。
E900
{maxdepth} はリストのネストをどれだけ深く変更するかを意味する。
{maxdepth} が0なら {list} は変更されない。
{maxdepth} は正の数でなければならない。
エラーがあったときは数値の0を返す。
例:
:echo flatten([1, [2, [3, 4]], 5])
[1, 2, 3, 4, 5] :echo flatten([1, [2, [3, 4]], 5], 1)
[1, 2, [3, 4], 5]flattennew({list} [, {maxdepth}]) flattennew()
flatten() と同様だが最初に {list} のコピーを作る。
float2nr({expr}) float2nr()
{expr} の小数点以下を切り捨てて Number に変換する。
{expr} は Float または Number に評価されなければならない。
{expr} の値が Number の範囲外の場合、結果は 0x7fffffff また
は -0x7fffffff になる(64ビット数値が有効化されている場合は
0x7fffffffffffffff または -0x7fffffffffffffff)。
NaN は -0x80000000 になる(64ビット数値が有効化されている場合は
-0x8000000000000000)。
例:
echo float2nr(3.95)
3 echo float2nr(-23.45)
-23 echo float2nr(1.0e100)
2147483647 (または 9223372036854775807) echo float2nr(-1.0e150)
-2147483647 (または -9223372036854775807) echo float2nr(1.0e-100)
0method としても使用できる:
Compute()->float2nr()
{+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.0method としても使用できる:
Compute()->floor()
{+float 機能つきでコンパイルされたときのみ有効}
fmod({expr1}, {expr2}) fmod()
{expr1} / {expr2} の余りを返す (割り算が表現できなくても)。
{expr2} が非ゼロなら {expr1} - i * {expr2} の結果を返す (i は
戻り値が {expr1} と同じ符号を持ちその絶対値が {expr2} よりも小
さくなるような値)。{expr2} がゼロならゼロが返る。戻り値の型は
浮動小数点数 (Float)。
{expr1} と {expr2} は浮動小数点数 (Float) か数値 (Number)
でなければならない。
例:
:echo fmod(12.33, 1.22)
0.13 :echo fmod(-12.33, 1.22)
-0.13method としても使用できる:
Compute()->fmod(1.22)
{+float 機能を有効にしてコンパイルしたときのみ有効}
fnameescape({string}) fnameescape()
コマンド引数のファイル名として使うために {string} をエスケープ
する。'%' や '|' など特別な意味を持つ全ての文字がバックスラッ
シュでエスケープされる。
特別な文字とは、ほとんどのシステムにおいて
" \t\n*?[{`$\\%#'\"|!<" である。ファイル名にバックスラッシュが
現れるシステムにおいては 'isfname' の値に依存する。
先頭の '+' と '>' もエスケープされる(:edit と :write の引
数では特別な意味を持つ)。{string} が "-" である場合もエスケー
プされる(:cd の引数では意味を持つ)。
例:
:let fname = '+some str%nge|name'
:exe "edit " . fnameescape(fname)
上記は次と同じ結果になる::exe "edit " . fnameescape(fname)
edit \+some\ str\%nge\|name
method としても使用できる:
GetName()->fnameescape()
fnamemodify({fname}, {mods}) fnamemodify()
ファイル名{fname}を{mods}にしたがって変更する。{mods}はコマン
ドラインで使われるのと同様な文字列である。詳細は
filename-modifiersを参照。
例:
:echo fnamemodify("main.c", ":p:h")
結果: /home/mool/vim/vim/src/
{mods} が空なら {fname} を返す。Note: {fname}の中の環境変数は展開されない。環境変数を展開させ
るにはexpand()を使うこと。
method としても使用できる:
GetName()->fnamemodify(':p:h')
foldclosed({lnum}) foldclosed()
結果は数値。{lnum}行目が閉じた折り畳みの中にあるなら、その折り
畳みを構成する最初の行の行番号を返す。{lnum}行目が閉じた折り畳
みに入っていないなら-1を返す。
{lnum} は getline() と同様に扱われる。例えば "." は現在の行、
"'m" は m でマークした行、など。
method としても使用できる:
GetLnum()->foldclosed()
foldclosedend({lnum}) foldclosedend()
結果は数値。{lnum}行目が閉じた折り畳みの中にあるなら、その折り
畳みを構成する最後の行の行番号を返す。{lnum}行目が閉じた折り畳
みに入っていないなら-1を返す。
{lnum} は getline() と同様に扱われる。例えば "." は現在の行、
"'m" は m でマークした行、など。
method としても使用できる:
GetLnum()->foldclosedend()
foldlevel({lnum}) foldlevel()
カレントバッファの{lnum}行目の折り畳みレベルを表す数値を返す。
折り畳みがネストしているときは一番下のレベルを返す。{lnum}行目
に折り畳みがまったくないときは0を返す。折り畳みが開いているか
閉じているかは関係ない。('foldexpr' の中で)折り畳みを更新して
いる最中に呼ぶと、まだ折り畳みを更新していなく、折り畳みレベル
が未知の行に対しては-1を返す。特別な場合として、普通は1行前の
レベルは取得できる。
{lnum} は getline() と同様に扱われる。例えば "." は現在の行、
"'m" は m でマークした行、など。
method としても使用できる:
GetLnum()->foldlevel()
foldtext()
foldtext() 閉じた折り畳みに表示する文字列を返す。これはオプション
'foldtext' のデフォルトの関数であり、'foldtext' を評価している
ときにだけ呼ぶようにすべきである。この関数は変数v:foldstart,
v:foldend, v:folddashesを使用する。
戻り値の文字列は次のようになる:
+-- 45 lines: abcdef
先導するダッシュ(-)の数は折り畳みレベルによって決まる。"45" はその折り畳みに含まれている行数である。"abcdef" はその折り畳み
の中の最初の空行でない行のテキストである。行頭の空白と、"//"
や "/*"、'foldmarker' と'commentstring' に設定されている文字列
は削除される。
実際に折り畳みテキストを表示するときには、行の残りは
'fillchars' で設定した折り畳み用の文字で埋められる。
{+folding機能付きでコンパイルされたときのみ利用可能}
foldtextresult({lnum}) foldtextresult()
{lnum}行目の閉じた折り畳みに表示される文字列を返す。'foldtext'
を適切なコンテキストの中で評価する。{lnum}行目に閉じた折り畳み
がないときは空文字列を返す。
{lnum}はgetline()のときと同様に扱われる。つまり "." はカレン
ト行、"'m" はマークmを表す。
折り畳まれたテキストをHTMLなどにエクスポートするときに有用。
{+folding機能付きでコンパイルされたときのみ利用可能}
method としても使用できる:
GetLnum()->foldtextresult()
foreground()
foreground() Vimのウィンドウを前面に移動する。この関数はクライアントからVim
サーバーへ送ると便利である。remote_send()
Win32では自分自身のウィンドウを前面に持ってくることが必ずしも
許可されていないので、動作しないかもしれない。そのときは代わり
にremote_foreground()を使うこと。
{Win32, Athena, Motif, GTKいずれかのGUI版とWin32コンソール版で
のみ利用できる}
fullcommand({name}) fullcommand()
短縮コマンド名から完全なコマンド名を取得する。コマンドの短縮名
については 20.2 を参照。
{name} は : から始まっても [range] を含んでよいが、それらは
スキップされ戻り値には含まない。
コマンドが存在しないか、曖昧になってしまう場合空文字列を返す
(ユーザー定義関数用)。
例えば fullcommand('s')、 fullcommand('sub')、
fullcommand(':%substitute') はすべて "substitute" を返す。
method としても使用できる:
GetName()->fullcommand()
funcref()
funcref({name} [, {arglist}] [, {dict}])
function()と同様である。ただし、返されたFuncrefは、関数を名
前ではなく参照で検索する。これは関数{name}が後で再定義されると
きに重要である。
function()とは違い、{name}はユーザー定義関数として存在してい
なければならない。また、autoload関数についても同様である。
{name}は組込み関数であってはならない。
method としても使用できる:
GetFuncname()->funcref([arg])
function() partial E700 E922 E923
function({name} [, {arglist}] [, {dict}])
関数{name}を参照するFuncrefの変数を返す。{name}はユーザー定義
関数でも組み込み関数でもよい。
ここで{name}は関数の参照、もしくは部分適用である。部分適用であ
るとき、それに格納されている辞書が使用され、{dict}引数が使用で
きない。例:
let FuncWithArg = function(dict.Func, [arg])
let Broken = function(dict.Func, [arg], dict)
let Broken = function(dict.Func, [arg], dict)
Funcrefが利用されるとき、その関数は{name}から見つけられる。こ
れは後で再定義された場合も同様である。常に同じ関数を見つけるた
めにはfuncref()を使うこと。
{arglist}もしくは{dict}が与えられると、関数の部分適用が作られ
る。すなわち引数のリスト及び/または辞書はFuncrefに格納され、
そのFuncrefが呼ばれるときに使用される。
格納された引数は他の引数よりも前に関数に渡される。しかし、メ
ソッドからの任意の引数の後になる。例えば:
func Callback(arg1, arg2, name)
...
let Partial = function('Callback', ['one', 'two'])
...
call Partial('name')
関数は次のように呼び出す:...
let Partial = function('Callback', ['one', 'two'])
...
call Partial('name')
call Callback('one', 'two', 'name')
method の場合:
func Callback(one, two, three)
...
let Partial = function('Callback', ['two'])
...
eval 'one'->Partial('three')
次のように関数を呼び出す:...
let Partial = function('Callback', ['two'])
...
eval 'one'->Partial('three')
call Callback('one', 'two', 'three')
function()はFuncrefにより多くの引数を加えるためにネストして呼
び出すことができる。余分な引数は、引数のリストに追加される。
例えば:
func Callback(arg1, arg2, name)
...
let Func = function('Callback', ['one'])
let Func2 = function(Func, ['two'])
...
call Func2('name')
これは次のように関数を呼び出す:...
let Func = function('Callback', ['one'])
let Func2 = function(Func, ['two'])
...
call Func2('name')
call Callback('one', 'two', 'name')
辞書は "dict" 関数を呼び出すときのみ有用である。この場合、
{dict}は "self" として渡される。例えば:
function Callback() dict
echo "called for " . self.name
endfunction
...
let context = {"name": "example"}
let Func = function('Callback', context)
...
call Func() " will echo: called for example
余分な引数がない場合、function()は必要ない。以下の二つは同等でecho "called for " . self.name
endfunction
...
let context = {"name": "example"}
let Func = function('Callback', context)
...
call Func() " will echo: called for example
ある:
let Func = function('Callback', context)
let Func = context.Callback
let Func = context.Callback
引数のリストと辞書を同時に使用することもできる:
function Callback(arg1, count) dict
...
let context = {"name": "example"}
let Func = function('Callback', ['one'], context)
...
call Func(500)
これは次のように関数を呼び出す:...
let context = {"name": "example"}
let Func = function('Callback', ['one'], context)
...
call Func(500)
call context.Callback('one', 500)
method としても使用できる:
GetFuncname()->function([arg])
garbagecollect([{atexit}]) garbagecollect()
循環参照を持ち、使われていないリストList、辞書
Dictionaries、チャネルChannels、ジョブJobs をクリーン
アップする。
これはメモリ不足に陥ったときや、'updatetime' 経過後ユーザーの
キー入力を待っているときに自動的に行われるので、この関数を呼ぶ
必要があることはほとんどない。循環参照を持たない要素は、使われ
なくなったとき必ず解放される。長時間実行されるスクリプトの中で
循環参照を持つ非常に大きなリストや辞書を削除したときに有用であ
る。
省略可能な引数 {atexit} に 1 を指定すると、Vim を終了するとき
にもガーベッジコレクションが行われる。これはメモリリークを発見
するのに役に立つ。
ガーベッジコレクションはすぐには実行されず、安全な場合のみ実行
される。これはユーザーが文字を入力するのを待っているときであ
る。ガーベッジコレクションを強制するには、すぐに
test_garbagecollect_now()を使用すること。
get({list}, {idx} [, {default}]) get()
リストList {list}から{idx}番目の要素を取得する。この要素を取
得できないときは{default}を返す。{default}が省略されたときは0
を返す。
method として使用したいなら:
mylist->get(idx)
get({blob}, {idx} [, {default}])Blob {blob}から{idx}番目のバイトを取得する。このバイトを取得
できないときは{default}を返す。{default}が省略されたときは -1
を返す。
method として使用したいなら:
myblob->get(idx)
get({dict}, {key} [, {default}])辞書Dictionary {dict}からキー{key}に関連づけられた値を取得す
る。この要素を取得できないときは{default}を返す。{default}が省
略されたときは0を返す。便利な例:
let val = get(g:, 'var_name', 'default')
g:var_nameの値が存在する場合はこれを取得し使用するが、存在しない場合は 'default' を返す。
method として使用したいなら:
mydict->get(key)
get({func}, {what})Funcref {func}から項目を取得する。{what}の可能な値は:
"name" 関数名
"func" 関数
"dict" 辞書
"args" 引数リスト
method として使用したいなら:
myfunc->get(what)
getbufinfo()
getbufinfo([{expr}])
getbufinfo([{dict}])
バッファの情報を辞書のリストとして取得する。
引数なしの場合、すべてのバッファに関する情報が返される。
引数が辞書 Dictionary の場合、指定された条件を満たすバッファ
のみが返される。{dict}には以下のキーを指定できる:
buflisted リストされたバッファのみを含む。
bufloaded ロードされたバッファのみを含む。
bufmodified 修正されたバッファのみを含む。
それ以外の場合、{expr}は情報を返す特定のバッファを指定する。
{expr}の使用については、上記のbufname()を参照。バッファが見
つかった場合、返されるListには1つの項目がある。それ以外の場合、
結果は空のリストになる。
返される各List項目は、次のエントリを持つ辞書である:
bufnr バッファ番号。
changed バッファが変更されている場合はTRUE。
changedtick バッファに加えられた変更の数。
hidden バッファが隠されている場合はTRUE。
lastused バッファが最後に使用されたときの
localtime() のような秒単位のタイムス
タンプ。
{+viminfo 機能付きでコンパイルされた
ときのみ有効}
listed バッファがリストされている場合はTRUE。
lnum バッファがカレントウィンドウに表示され
ていたときの現在行の行番号。
過去にバッファがカレントウィンドウに表
示されていた場合にのみ有効である。特定
のウィンドウの最後のカーソル位置の行番
号が必要な場合は line() を使うこと:
:echo line('.', {winid}))
linecount バッファ内の行数 (ロードされているとき
のみ有効)
loaded バッファがロードされている場合はTRUE。
name バッファ内のファイルへのフルパス。
signs バッファに設置された目印のリスト。
各リスト項目は、次のフィールドを含む辞
書である:
id 目印ID
lnum 行番号
name 目印名
variables バッファローカル変数の辞書への参照。
windows バッファを表示するwindow-IDのリスト
popups バッファを表示するpopupwindow-idのリ
スト
例:
for buf in getbufinfo()
echo buf.name
endfor
for buf in getbufinfo({'buflisted':1})
if buf.changed
....
endif
endfor
echo buf.name
endfor
for buf in getbufinfo({'buflisted':1})
if buf.changed
....
endif
endfor
バッファローカルオプションを取得するには:
getbufvar({bufnr}, '&option_name')
method としても使用できる:
GetBufnr()->getbufinfo()
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, "$")
method としても使用できる:
GetBufnr()->getbufline(lnum)
getbufvar({expr}, {varname} [, {def}]) getbufvar()
バッファ{expr}のオプションの値やバッファローカル変数{varname}
の値を返す。Note "b:" をつけない変数名を指定すること。
{varname} が空文字列の場合、全てのバッファローカル変数からなる
辞書 Dictionary を返す。
{varname} が "&" に等しいとき、すべてのバッファローカルオプショ
ンを持つ辞書 Dictionary を返す。
そうでなく、{varname} が "&" で始まるとき、バッファローカルオ
プションの値を返す。
グローバルオプション、バッファローカルオプションのどちらに対し
ても動作するが、グローバル変数、ウィンドウローカル変数、ウィン
ドウローカルオプションに対しては動作しない。
{expr}の指定の仕方についてはbufname()を参照。
バッファや変数が存在しないときは{def}または空文字列を返し、エ
ラーメッセージは表示されない。
例:
:let bufmodified = getbufvar(1, "&mod")
:echo "todo myvar = " . getbufvar("todo", "myvar")
:echo "todo myvar = " . getbufvar("todo", "myvar")
method としても使用できる:
GetBufnr()->getbufvar(varname)
getchangelist([{expr}]) getchangelist()
バッファ {expr} の changelist を返す。{expr} の使い方は前述
の bufname() を参照。バッファ {expr} が存在しない場合、空の
リストが返される。
返されるリストは 2 つのエントリを含む: 変更位置のリストと、リ
スト内の現在地。変更リスト内のそれぞれの項目は、以下の項目を含
む辞書になっている:
col 列番号
coladd 'virtualedit' 用の列のオフセット
lnum 行番号
バッファ {expr} がカレントバッファの場合、現在地はリスト内の位
置を指す。それ以外のバッファではリストの長さに設定される。
method としても使用できる:
GetBufnr()->getchangelist()
getchar([expr]) getchar()
ユーザーまたは入力ストリームから1文字を取得する。
[expr] が省略された場合、1文字を取得できるまで待つ。
[expr] が0の場合、1文字を取得できる時だけ取得する。取得できな
い時は0を返す。
[expr] が1の場合は、1文字を取得できるかを判定するだけである。
入力は消費されない。取得できないと判定された時は0を返
す。
常に文字列として取得したい場合は getcharstr() を使用する。
[expr] が省略されたときや [expr] が0のときは、文字全体または特
殊キーを返す。それが1文字なら戻り値は数値である。これを文字列
に戻すにはnr2char()を使う。それ以外の場合にはエンコードして文
字列にして返す。
特殊キーとは0x80(10進数で128)で始まるバイト列からなる文字列で
ある。これは文字列 "\<Key>" と同じ値である(例: "\<Left>")。戻
り値は文字列であり、修飾キー(shift, control, alt)は含まれない。
[expr] が0や Esc が入力された場合は、これがエスケープシーケン
スの始まりであるかどうかをVimが知るために待つ間、短い遅延があ
るだろう。
[expr] が1のときは最初のバイトだけを返す。1バイト文字の場合、
これはその文字そのものを表す数値である。これを文字列に変換する
にはnr2char()を使う。
修飾キーを取得するには getcharmod() を使う。
ユーザーがマウスをクリックしたときはマウスイベントを返す。クリッ
クした位置はv:mouse_col, v:mouse_lnum, v:mouse_winid,
v:mouse_winで得られる。getmousepos() も使える。マウスの移
動イベントは無視される。
以下の例は、普通にマウスがクリックされたときと同じようにカーソ
ルを移動させる。
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
if c == "\<LeftMouse>" && v:mouse_win > 0
exe v:mouse_win . "wincmd w"
exe v:mouse_lnum
exe "normal " . v:mouse_col . "|"
endif
bracketed pasteを使用しているときは最初の文字のみが返され、ペー
ストされた残りのテキストは切り捨てられる。
xterm-bracketed-paste.
この関数を呼んだときプロンプトは表示されない。文字入力を待って
いることをなんらかの方法でユーザーがわかるようにしなければなら
ないだろう。画面は再描画されない、例えばウィンドウのリサイズ。
ポップアップウィンドウを使っているなら popup-filter を使うと
よりよく動作する。
入力された文字に対してマッピングは適用されない。
キーコードは置換される。つまりユーザーが<Del>を押した場合、
「生の」文字シーケンスでなく<Del>キーに対応するコードが得られ
る。
例:
getchar() == "\<Del>"
getchar() == "\<S-Left>"
以下の例は大文字・小文字を区別しないように "f" を再定義する:getchar() == "\<S-Left>"
: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
:function FindChar()
: let c = nr2char(getchar())
: while col('.') < col('$') - 1
: normal l
: if getline('.')[col('.') - 1] ==? c
: break
: endif
: endwhile
:endfunction
あなたは<CursorHold>のような合成文字も取得するかもしれない。
多くの場合、あなたはこれを無視して別の文字を取得することにな
る:
:function GetKey()
: let c = getchar()
: while c == "\<CursorHold>"
: let c = getchar()
: endwhile
: return c
:endfunction
: let c = getchar()
: while c == "\<CursorHold>"
: let c = getchar()
: endwhile
: return c
:endfunction
getcharmod() getcharmod()
最後にgetchar()などで得た文字に対する修飾キーの状態を表す数値
を返す。以下の値の和となる:
2 shift
4 control
8 alt (meta)
16 meta (ALT と META が区別される場合)
32 マウスのダブルクリック
64 マウスのトリプルクリック
96 マウスのクアドラプルクリック (== 32 + 64)
128 command (Macintosh のみ)
文字自身に含まれていない修飾キーのみ取得できる。つまり、
Shift-aは修飾キーなしの "A" となる。
getcharpos()
getcharpos({expr})
{expr} の位置を得る。getpos() と同様だが返すリスト内の桁番号
はバイトインデックスの代わりに文字インデックスになっている。
getpos() が 2147483647 のような非常に大きな桁番号を返す場合、
getcharpos() は最後の文字の文字インデックスを返す。
例:
5行目のテキスト "여보세요" の '세' にカーソルがある状態:
getcharpos('.') returns [0, 5, 3, 0]
getpos('.') returns [0, 5, 7, 0]
getpos('.') returns [0, 5, 7, 0]
method としても使用できる:
GetMark()->getcharpos()
getcharsearch() getcharsearch()
現在の文字検索の情報である{dict}を返し、この辞書は下記のエント
リを持つ:
char 文字検索(t, f, T, F)で以前に使われた文
字。
もし文字検索が実行されていないなら空文字列。
forward 文字検索の方向。1は前方、0は後方。
until 文字検索の種類。1はtもしくはTの文字検索、0は
fもしくはFの文字検索。
下記の設定は前回の文字検索の方向にかかわらず、; で前方検索、
, で後方検索を常に行えるようになり便利である:
:nnoremap <expr> ; getcharsearch().forward ? ';' : ','
:nnoremap <expr> , getcharsearch().forward ? ',' : ';'
setcharsearch()も参照。:nnoremap <expr> , getcharsearch().forward ? ',' : ';'
getcharstr([expr]) getcharstr()
ユーザーまたは入力ストリームから1文字を文字列として取得する。
[expr] が省略された場合、1文字を取得できるまで待つ。
[expr] が0もしくは偽の場合、1文字を取得できる時だけ取得する。
取得できない時は空文字列を返す。
[expr] が1もしくは真の場合は、1文字を取得できるかを判定するだ
けである。入力は消費されない。取得できないと判定された
時は空文字列を返す。
結果の数値が文字列に変換される以外は getchar() と同様に動作
する。
getcmdline() getcmdline()
現在のコマンドラインの内容を取得する。コマンドラインを編集して
いるときのみ動作する。つまりc_CTRL-\_eまたはc_CTRL-R_=を使っ
ているときのみ有効。
例:
:cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
getcmdtype(), getcmdpos(), setcmdpos()も参照。パスワードを入力する時や inputsecret() を使う時は空文字列を
返す。
getcmdpos() getcmdpos()
コマンドラインにおけるカーソル位置をバイト単位で取得する。最初
の桁は1となる。コマンドラインを編集しているときのみ動作する。
つまりc_CTRL-\_eまたはc_CTRL-R_=または式マッピングを使って
いるときのみ有効。そうでないときは 0 を返す。
getcmdtype(), setcmdpos(), getcmdline()も参照。
getcmdtype() getcmdtype()
現在のコマンドラインの種類を返す。戻り値は次のいずれか:
: 通常のexコマンド
> デバッグモードコマンド debug-mode
/ 前方検索コマンド
? 後方検索コマンド
@ input() コマンド
- :insert または :append コマンド
= i_CTRL-R_=
コマンドラインを編集しているときのみ動作する。つまり
c_CTRL-\_eまたはc_CTRL-R_=または式マッピングを使っていると
きのみ有効。そうでないときは空文字列を返す。
getcmdpos(), setcmdpos(), getcmdline()も参照。
getcmdwintype() getcmdwintype()
現在のコマンドラインウィンドウ (command-line-window) の種類
を返す。戻り値の意味は getcmdtype() と同じ。コマンドライン
ウィンドウでなければ空文字列を返す。
getcompletion({pat}, {type} [, {filtered}]) getcompletion()
コマンドライン補完のマッチするリストを返す。{type}は何のための
ものかを指定する。次の補完タイプがサポートされている:
arglist 引数リスト内のファイル名
augroup 自動コマンドグループ
buffer バッファ名
behave :behaveサブオプション
color カラースキーム
command Exコマンド (および引数)
cmdline cmdline-completion の結果
compiler コンパイラ
cscope :cscopeのサブオプション
diff_buffer :diffget と :diffput の補完
dir ディレクトリ名
environment 環境変数名
event 自動コマンドのイベント
expression Vim式
file ファイルおよびディレクトリ名
file_in_path 'path'のファイルおよびディレクトリ名
filetype ファイルタイプ名 'filetype'
function 関数名
help ヘルプ項目
highlight ハイライトグループ
history :historyサブオプション
locale ロケール名 (locale -aの出力)
mapclear バッファ引数
mapping マッピング名
menu メニュー
messages :messagesサブオプション
option オプション
packadd 任意パッケージ pack-add 名
shellcmd シェルコマンド
sign :signサブオプション
syntax 構文ファイル名 'syntax'
syntime :syntimeサブオプション
tag タグ
tag_listfiles タグ、ファイル名
user ユーザー名
var ユーザー変数
{pat}が空文字列の場合、すべてのマッチが返される。それ以外の場
合、{pat}と一致する項目のみが返される。{pat}での特殊文字の使用
については、wildcardsを参照。
オプションの{filtered}フラグが1に設定されている場合、結果をフィ
ルタリングするために 'wildignore'が適用される。そうでなければ、
すべての一致が返される。'wildignorecase'オプションは常に適用さ
れる。
{type}が "cmdline" ならば cmdline-completion の結果が返され
る。
例えば、":call" コマンドの後で補完できる値は:
echo getcompletion('call ', 'cmdline')
一致するものがなければ、空のリストが返される。{type}の値が無効
だと、エラーが発生する。
method としても使用できる:
GetPattern()->getcompletion('color')
getcurpos()
getcurpos([{winid}])
カーソルの位置を返す。これは getpos('.') に似ているが、追加の
"curswant" 情報を含む:
[0, lnum, col, off, curswant]
"curswant" は縦方向移動の優先的列番号である。
getcursorcharpos() と getpos() も参照。
最初の "bufnum" は常に0である。カーソルのバイトでの位置は
'col' に返される。文字の位置を得るには getcursorcharpos() を
使う。
オプションの {winid} 引数はウィンドウを指定する。これはウィン
ドウ番号か window-ID である。最後のカーソル位置を返すが、こ
れはバッファがカレントウィンドウでない場合、現在の値は無効にな
りうる。
{winid} が無効の場合、値がゼロのリストを返す。
次のようにしてカーソル位置の保存と復元ができる:
let save_cursor = getcurpos()
MoveTheCursorAround
call setpos('.', save_cursor)
Note: これはウィンドウ内でのみ機能する。より多くの状態を復元すMoveTheCursorAround
call setpos('.', save_cursor)
る方法については winrestview() を参照。
method としても使用できる:
GetWinid()->getcurpos()
getcursorcharpos()
getcursorcharpos([{winid}])
getcurpos() と同様だが返すリスト内の桁番号はバイトインデック
スの代わりに文字インデックスになっている。
Example:
3行目のテキスト "여보세요" の '보' にカーソルがある状態:
getcursorcharpos() returns [0, 3, 2, 0, 3]
getcurpos() returns [0, 3, 4, 0, 3]
getcurpos() returns [0, 3, 4, 0, 3]
method としても使用できる:
GetWinid()->getcursorcharpos()
getcwd()
getcwd([{winnr} [, {tabnr}]])
結果は現在の作業ディレクトリ名の文字列である。
{winnr} が指定された場合、現在のタブページ内の {winnr} のウィ
ンドウのローカルカレントディレクトリを返す。{winnr} にはウィン
ドウ番号またはwindow-IDが使える。
{winnr} が -1 の場合、グローバル作業ディレクトリ名を返す。
haslocaldir() も参照。
{winnr}と{tabnr}が指定された場合、{tabnr}のタブページ内の
{winnr}のウィンドウのローカルカレントディレクトリを返す。
{winnr}が -1 の場合、タブページの作業ディレクトリを返す。
{winnr}が 0 の場合、カレントウィンドウを使用し、{tabnr}が 0 の
場合はカレントタブページを使用する。
引数なしの場合は、カレントウィンドウの作業ディレクトリを返す。
もし引数が不正の場合、空文字列を返す。
例:
" カレントウィンドウの作業ディレクトリを取得
:echo getcwd()
:echo getcwd(0)
:echo getcwd(0, 0)
" タブページ2のウィンドウ3の作業ディレクトリを取得
:echo getcwd(3, 2)
" グローバル作業ディレクトリを取得
:echo getcwd(-1)
" タブページ3の作業ディレクトリを取得
:echo getcwd(-1, 3)
" カレントタブページの作業ディレクトリを取得
:echo getcwd(-1, 0)
:echo getcwd()
:echo getcwd(0)
:echo getcwd(0, 0)
" タブページ2のウィンドウ3の作業ディレクトリを取得
:echo getcwd(3, 2)
" グローバル作業ディレクトリを取得
:echo getcwd(-1)
" タブページ3の作業ディレクトリを取得
:echo getcwd(-1, 3)
" カレントタブページの作業ディレクトリを取得
:echo getcwd(-1, 0)
method としても使用できる:
GetWinnr()->getcwd()
getenv({name}) getenv()
環境変数{name}の値を返す。
変数が存在しない場合は v:null が返される。これは、空の文字列
に設定された変数とは異なるが、一部のシステムは空の値を削除され
る変数として解釈する。expr-env も参照。
method としても使用できる:
GetVarname()->getenv()
getfontname([{name}]) getfontname()
引数なしで使われた場合には現在の通常のフォント名を返す。ハイラ
イトグループNormalに対して使われるものと同様hl-Normal。
引数が指定された場合には{name}が有効なフォント名であるか判定さ
れる。有効でないときは空文字列を返す。
有効なときは実際のフォント名を返す。またはGUIが実際の名前の取
得をサポートしていないときは{name}をそのまま返す。
GUIモードで実行しているときのみ動作する。よってvimrcやgvimrcの
中では使えない。GUIモードが起動した直後にこの関数を呼ぶには、
自動コマンドGUIEnterを使うこと。
Note GTKのGUIはどんなフォント名でも受け付けてしまうため、名前
が有効であるかのチェックは機能しない。
method としても使用できる:
mydict->has_key(key)
getfperm({fname}) getfperm()
{fname}で指定されたファイルの読み込み、書き込み、実行の許可属
性を示す文字列を返す。
{fname}が存在しない、またはそのディレクトリが読み込み不可能な
ときは空文字列を返す。
戻り値は "rwxrwxrwx" の形で、"rwx" フラグの各グループは順にファ
イルの所有者、ファイルが所属するグループ、その他のユーザーを表
す。許可属性が与えられていないフラグは "-" で置き換えられる。
例:
:echo getfperm("/etc/passwd")
:echo getfperm(expand("~/.vimrc"))
この例は、(セキュリティの観点から望ましい設定がされているなら:echo getfperm(expand("~/.vimrc"))
ば) "rw-r--r--" あるいは "rw-------" と表示する。
method としても使用できる:
GetFilename()->getfperm()
許可属性を設定するにはsetfperm()を使用する。
getfsize({fname}) getfsize()
結果は数値で、{fname}で指定されるファイルのサイズをバイト単位
で返す。
{fname}がディレクトリのときは0を返す。
ファイル{fname}が見つからないときは-1を返す。
{fname} のサイズが Number の範囲外の場合は -2 を返す。
method としても使用できる:
GetFilename()->getfsize()
getftime({fname}) getftime()
結果は{fname}で与えられたファイルの、最終更新時間を示す数値。
1970年1月1日からの経過時間(秒)で、strftime()に渡すことができる
だろう。localtime()とstrftime()も参照。
ファイル{fname}が見つからなかった場合には-1を返す。
method としても使用できる:
GetFilename()->getftime()
getftype({fname}) getftype()
{fname}で指定されたファイルの種別を示す文字列を返す。
{fname}が存在しないときは空文字列を返す。
ファイルの種別とそれらの結果の表を以下に示す:
通常ファイル "file"
ディレクトリ "dir"
シンボリックリンク "link"
ブロックデバイス "bdev"
キャラクタデバイス "cdev"
ソケット "socket"
FIFO "fifo"
それ以外 "other"
例:
getftype("/home")
Note "link" などの種別はそれをサポートしているシステムでのみ返される。"dir" と "file" しか返らないシステムもある。
MS-Windowsでは、ディレクトリへのシンボリックリンクは "link" の
代わりに "dir" を返す。
method としても使用できる:
GetFilename()->getftype()
getimstatus() getimstatus()
結果は数値で、IMEステータスがアクティブの場合は TRUE である。
'imstatusfunc' を参照。
getjumplist([{winnr} [, {tabnr}]]) getjumplist()
指定されたウィンドウの jumplist を返す。
引数なしの場合、カレントウィンドウを使用する。
{winnr} のみの場合、現在のタブページのこのウィンドウを使用す
る。{winnr} には window-ID も使用できる。
{winnr} と {tabnr} 両方の場合、指定されたタブページのウィンド
ウを使用する。
返されるリストは 2 つのエントリを含む: ジャンプ位置のリストと、
リスト内の最後に使われたジャンプ位置番号。ジャンプ位置リスト内
のそれぞれの項目は、以下の項目を含む辞書になっている:
bufnr バッファ番号
col 列番号
coladd 'virtualedit' 用の列のオフセット
filename 利用可能ならばファイル名
lnum 行番号
method としても使用できる:
GetWinnr()->getjumplist()
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)
:let end = search("^$") - 1
:let lines = getline(start, end)
method としても使用できる:
ComputeLnum()->getline()
他のバッファの行を取得するにはgetbufline()を参照。
getloclist({nr} [, {what}]) getloclist()
ウィンドウ{nr}のlocationリストの全項目からなるリスト List を
返す。{nr} にはウィンドウ番号または window-ID が使える。{nr}
に0を指定するとカレントウィンドウになる。
locationリストウィンドウに対して使用すると、そこに表示されてい
るlocationリストが返る。ウィンドウ番号{nr}が無効な場合は、空リ
ストが返る。それ以外は getqflist() と同じ。
オプションの{what}辞書引数が指定されている場合、{what}にリスト
されている項目を辞書として返す。{what}のサポートされている項目
については、getqflist()を参照。
getqflist() の{what}でサポートされている項目に加え、
getloclist() では次の項目もサポートされている:
filewinid ロケーションリストからファイルを表示す
るのに使われているウィンドウのID。この
フィールドはロケーションリストウィンド
ウから呼び出されたときのみ適用される。
詳細は location-list-file-window を
参照。
ウィンドウ {nr} にlocationリストがないなら、デフォルト値の辞書
Dictionary を返す。
ウィンドウが存在しない場合、空の辞書を返す。
例 (getqflist-examples もまた参照):
:echo getloclist(3, {'all': 0})
:echo getloclist(5, {'filewinid': 0})
:echo getloclist(5, {'filewinid': 0})
getmarklist([{expr}]) getmarklist()
{expr} 引数が無い場合は全グローバルマークについての情報のリス
トを返す。mark
オプショナル引数 {expr} が指定されている場合、{expr} で指定
されたバッファのローカルマークの値を返す。{expr} の使い方は
bufname() を参照。
戻り値のリストの各要素は以下の内容の辞書Dictになっている:
mark 接頭辞 "'" が付いたマークの名前
pos マークの位置のリストList:
[bufnum, lnum, col, off]
詳細は getpos() を参照。
file ファイル名
特定のマークについて取得した情報の詳細は getpos() を参照。
method としても使用できる:
GetBufnr()->getmarklist()
getmatches([{win}]) getmatches()
matchadd() と :match によりカレントウィンドウに定義された
全てのマッチの List を返す。setmatches() は getmatches()
で保存されたマッチのリストを復元できるので、getmatches() と
setmatches() は組み合わせて使うと便利である。
{win} が指定されたなら、カレントウィンドウの代わりに指定された
番号かウィンドウIDのウィンドウを使う。
例:
: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 clearmatches()
:echo getmatches()
:call setmatches(m)
:echo getmatches()
[{'group': 'MyGroup1', 'pattern': 'TODO',:echo getmatches()
'priority': 10, 'id': 1}, {'group': 'MyGroup2',
'pattern': 'FIXME', 'priority': 10, 'id': 2}]
:unlet m
getmousepos() getmousepos()
マウスの最新の位置を示す辞書 Dictionary を返す。マウスクリッ
クのマッピングやポップアップウィンドウのフィルターで使うことが
できる。辞書の要素は:
screenrow 画面行
screencol 画面桁
winid クリックされたウィンドウ ID
winrow "winid" 内の行
wincol "winid" 内の桁
line "winid" 内のテキスト行
column "winid" 内のテキスト桁
全ての数値は 1 ベースである。
ウィンドウの上ではない場合、例えばコマンドラインの中などでは
"screenrow" と "screencol" のみが有効で、残りは 0 になる。
ウィンドウの下のステータスラインやウィンドウの右の垂直セパレー
ターの場合、"line" と "column" は 0 になる。
位置がテキストより後の場合、"column" はテキストのバイト長+1に
なる。
マウスがポップアップウィンドウの上の場合、そのウィンドウが使わ
れる。
getchar() を使ったとき、Vim 変数 v:mouse_lnum,
v:mouse_col と v:mouse_winid もこれらの値を提供する。
getpid()
getpid() Vim のプロセス ID を数値で返す。Unix と MS-Windows では Vim が
終了するまでこれは一意な数値である。
getpos()
getpos({expr}) {expr}の位置を返す。{expr}として指定できる値については
line()を参照。カーソル位置を得るには getcurpos() を参照。
結果は次の4個の要素を持つリストList:
[bufnum, lnum, col, off]
"bufnum" は、'0 や 'A のようなマークが指定されたときは、その
マークのバッファ番号となる。それ以外では0となる。
"lnum" と "col" はバッファ中の位置。桁番号は1から始まる。
"off" の値は、'virtualedit' がオフのときは常に0で、オンのとき
はその文字の始点からの画面上の桁のオフセットである。つまり、
カーソルが<Tab>の中や、その行の最後の文字より後にあるとき意味
を持つ。
Note: ビジュアルモードの '< と '> について: ビジュアルモードが
"V" (行選択モード) のとき、'< の桁番号はゼロ、'> の桁番号は大
きな値になる。
桁番号は行内のバイト位置のリストとして返される。行内の文字での
位置を取得するなら、getcharpos() を使う。
桁番号は 2147483647 のような非常に大きな値になり得る。これは
"行末の後" を意味する。
この関数はマークの位置を保存し、復元するために使われる:
let save_a_mark = getpos("'a")
...
call setpos("'a", save_a_mark)
getcharpos() と getcurpos() そして setpos() も参照。...
call setpos("'a", save_a_mark)
method としても使用できる:
GetMark()->getpos()
getqflist([{what}]) getqflist()
現在の全quickfixエラーのリスト List を返す。リストの各要素は
辞書で、以下の要素を持つ:
bufnr ファイル名を持つバッファの番号。その名前を取得
するにはbufname()を使う。
module モジュール名
lnum バッファ中の行番号(最初の行は1)
end_lnum
項目が複数行のときの最後の行番号
col 桁番号(最初の桁は1)
end_col 項目が範囲を持つときの最後の桁番号
vcol TRUE: "col" は画面上の桁
FALSE: "col" はバイトインデックス
nr エラー番号
pattern エラーの位置を特定するために使う検索パターン
text エラーの説明
type エラーメッセージの種類。'E', '1' など。
valid TRUE: エラーメッセージが認識されている
エラーリストがまったくないか、空であるときは空リストを返す。
quickfixリストの項目が存在しないバッファ番号とともに返る場合は
"bufnr" を0にして返される。(Note: いくつかの関数はバッファ番号
0を代替バッファとして受け付けるので、明確に0チェックを行う必要
がある)。
役に立つ応用例: 複数のファイルから正規表現検索を行い、見つかっ
たものに対してなんらかの操作をする:
:vimgrep /theword/jg *.c
:for d in getqflist()
: echo bufname(d.bufnr) ':' d.lnum '=' d.text
:endfor
:for d in getqflist()
: echo bufname(d.bufnr) ':' d.lnum '=' d.text
:endfor
オプションの{what}辞書引数が指定されている場合は、{what}にリス
トされている項目のみを辞書として返す。{what}では、以下の文字列
項目がサポートされている:
changedtick リストに行われた変更の総数を取得
quickfix-changedtick
context quickfix-context を取得
efm "lines" をパースするときに使われるエラーフォー
マット。存在しない場合はオプション
'errorformat' の値が使用される。
id quickfix-IDに対応するquickfixリストの情報を
取得。0 は現在のリストもしくは "nr" で指定され
たリストのidを意味する
idx 'id' または 'nr' で指定されたquickfixリスト内
の情報を取得した最後のエントリのインデックス。
もし0なら、カレントのエントリが使われる。
quickfix-index を参照
items quickfixリストのエントリ
lines 'efm' を使用して行のリストをパースし、結果のエ
ントリを返す。List 型のみを受け付ける。現在
のquickfixリストは変更を受けない。
quickfix-parseを参照。
nr このquickfixリストの情報を取得。0 は現在の
quickfixリストを意味し、"$" は最後のquickfixリ
ストを意味する
qfbufnr quickfixウィンドウに表示されているバッファの番
号。quickfixバッファが存在しないなら 0 が返る。
quickfix-buffer を参照。
size quickfixリスト内のエントリの数
title リストタイトルを取得 quickfix-title
winid quickfixのwindow-IDを取得
all 上記のquickfixのすべてのプロパティ
{what} の文字列以外の項目は無視される。特定の項目の値を取得す
るには 0 を設定する。
"nr" が存在しない場合、現在のquickfixリストが使用される。"nr"
と 0 でない "id" が両方とも指定されていた場合、"id" で指定され
たリストが使用される。
quickfixスタック内のリストの数を取得するには、{what} 内で "nr"
に "$" を設定する。返される辞書内の "nr" の値がquickfixスタッ
クサイズである。
"lines" が指定された場合、"efm" を除くその他すべての項目は無視
される。返される辞書は、エントリのリストからなるエントリ
"items" を含む。
返される辞書には、次のエントリが含まれる:
changedtick リストに行われた変更の総数
quickfix-changedtick
context quickfixリストコンテキスト。quickfix-context
を参照。存在しない場合、"" に設定される。
id quickfixリストID quickfix-ID。存在しない場
合、0 に設定される。
idx リスト内のquickfixのエントリのインデックス。
存在しない場合、0 に設定される。
items quickfixリストのエントリ。存在しない場合、空リ
ストに設定される。
nr quickfixリスト番号。存在しない場合、0 に設定さ
れる。
qfbufnr quickfixウィンドウに表示されているバッファの番
号。存在しない場合、0 に設定される。
size quickfixリスト内のエントリの数。存在しない場
合、0 に設定される。
title quickfixリストのタイトルテキスト。存在しない場
合、"" に設定される。
winid quickfixのwindow-ID。存在しない場合、0 に設
定される。
例 (getqflist-examplesも参照):
:echo getqflist({'all': 1})
:echo getqflist({'nr': 2, 'title': 1})
:echo getqflist({'lines' : ["F1:10:L10"]})
:echo getqflist({'nr': 2, 'title': 1})
:echo getqflist({'lines' : ["F1:10:L10"]})
getreg([{regname} [, 1 [, {list}]]]) getreg()
レジスタ{regname}の中身を文字列にして返す。例:
:let cliptext = getreg('*')
{regname} がセットされていないときは、結果は空文字列となる。getreg('=')は最後に評価した式レジスタの値を返す。(マップの中で
使用する)。
getreg('=', 1)はその式そのものを返す。これを使ってsetreg()で
復元することができる。他のレジスタの場合は、この引数は無視され
るので、常に指定していても害はない。
{list} が指定され、その値がTRUEのときは、戻り値はリスト
(List) になる。リストの各要素はテキスト 1 行である。これはレ
ジスタの中に値ゼロのバイトが含まれる場合に使用する。{list} を
指定しなかった場合は NL 文字と値ゼロのバイトは両方とも NL 文字
として扱われる (NL-used-for-Nul 参照)。
指定したレジスタがセットされていないときは、空のリストが返され
る。
{regname}を指定しないときはv:registerが使われる。
Vim9-script では {regname} は1文字でなくてはならない。
method としても使用できる:
GetRegname()->getreg()
getreginfo([{regname}]) getreginfo()
レジスタ {regname} についての詳細情報として次の項目を持つ辞書
を返す:
regcontents レジスタ {regname} に格納されている行
の、getreg({regname}, 1, 1) と同様の
リスト。
regtype レジスタ {regname} の getregtype()
相当の種別。
isunnamed 真偽値フラグ、v:true は現在指している
レジスタが無名レジスタであることを示
す。
points_to 無名レジスタであれば、現在指しているレ
ジスタを示す単一文字 (quotequoteを参
照)。
例えば、行を dd で削除後、このフィー
ルドは "1" となりそのレジスタには削除
したテキストが入る。
{regname} が不正なレジスタ名もしくは未設定の場合、空の辞書が返
される。
{regname} が未指定の場合、v:register が使われる。
戻り値の辞書は setreg() に渡すことができる。
Vim9-script では {regname} は1文字でなくてはならない。
method としても使用できる:
GetRegname()->getreginfo()
getregtype([{regname}]) getregtype()
レジスタ{regname}の種類を表す文字列を返す。
戻り値は次のいずれかとなる:
"v" 文字単位characterwiseの場合
"V" 行単位linewiseの場合
"<CTRL-V>{width}" 矩形blockwise-visualの場合
"" 空、または未知のレジスタの場合
<CTRL-V>は値0x16の1文字である。
{regname}を指定しないときはv:registerが使われる。
Vim9-script では {regname} は1文字でなくてはならない。
method としても使用できる:
GetRegname()->getregtype()
gettabinfo([{tabnr}]) gettabinfo()
{tabnr}を指定しないと、すべてのタブページに関する情報がリスト
List として返される。各リスト項目は辞書 Dictionary である。
それ以外の場合、{tabnr} はタブページ番号を指定し、それに関する
情報が返される。タブページが存在しない場合、空のリストが返され
る。
各リストアイテムは、次のエントリを持つ辞書 Dictionary である:
tabnr タブページ番号。
variables タブページローカル変数の辞書への参照。
windows タブページのwindow-IDのリスト。
method としても使用できる:
GetTabnr()->gettabinfo()
gettabvar({tabnr}, {varname} [, {def}]) gettabvar()
タブページ {tabnr} のタブローカル変数 {varname} を取得する。
t:var
タブの番号は 1 から始まる。
{varname} が空のときは全タブローカル変数からなる辞書を返す。
Note: 指定する変数名は "t:" を除いた名前。
タブや変数が存在しないときは{def}または空文字列を返し、エラー
メッセージは表示されない。
method としても使用できる:
GetTabnr()->gettabvar(varname)
gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) gettabwinvar()
タブページ{tabnr}内のウィンドウ{winnr}のウィンドウローカル変数
{varname}の値を取得する。
{varname}が空のときは全ウィンドウローカル変数からなる辞書を返
す。
{varname}が "&" と等しい場合はすべてのウィンドウローカルオプ
ションの値を辞書 Dictionary に入れて返す。
{varname}が文字 "&" で始まるときはウィンドウローカルオプション
の値を取得する。
Note {varname}は "w:" をつけずに指定しなければならない。
タブページ番号は1から始まる。カレントタブページを指定するには
getwinvar()を指定する。
{winnr} にはウィンドウ番号またはwindow-IDが使える。
{winnr}が0のときはカレントウィンドウとなる。
グローバルオプション、バッファローカルオプション、ウィンドウ
ローカルオプションに対しても動作するが、グローバル変数やバッ
ファローカル変数に対しては動作しない。
ウィンドウやタブや変数が存在しないときは{def}または空文字列を
返し、エラーメッセージは表示されない。
例:
:let list_is_on = gettabwinvar(1, 2, '&list')
:echo "myvar = " . gettabwinvar(3, 1, 'myvar')
:echo "myvar = " . gettabwinvar(3, 1, 'myvar')
すべてのウィンドウローカル変数を取得するには:
gettabwinvar({tabnr}, {winnr}, '&')
method としても使用できる:
GetTabnr()->gettabwinvar(winnr, varname)
gettagstack([{winnr}]) gettagstack()
結果は辞書で、それはウィンドウ{winnr}のタグスタックである。
{winnr}にはウィンドウ番号または window-ID を指定できる。
{winnr}を指定しない時は、カレントウィンドウが使用される。
ウィンドウ{winnr}が存在しない場合、空の辞書が返される。
返される辞書には、次のエントリが含まれる:
curidx スタック内の現在のインデックス。スタッ
クの最上部にあるときは、(length + 1)
に設定される。スタックの最下部のイン
デックスは1である。
items スタック内の項目のリスト。各項目は、以
下で説明するエントリを含む辞書である。
length スタック内の項目数
スタック内の各項目は、次のエントリを持つ辞書である:
bufnr 現在のジャンプのバッファ番号
from タグジャンプの前のカーソル位置。返され
るリストの形式は getpos() を参照。
matchnr 現在の一致するタグ番号。名前に一致する
複数のタグが見つかった場合に使用され
る。
tagname タグの名前
タグスタックについての詳細は、tagstack を参照。
method としても使用できる:
GetWinnr()->gettagstack()
gettext({text}) gettext()
可能であれば {text} を翻訳する。
これは主に配布する Vim script で使う。
メッセージの翻訳を生成するときに {text} が xgettext によって抽
出され、翻訳者が .po ファイルで翻訳済みメッセージを追加でき
Vim は gettext() が呼ばれた時に翻訳を検索する。
{text} はダブルクォートの文字列が望しい、なぜなら xgettext は
シングルクォートの文字列でのエスケープを理解しないため。
getwininfo([{winid}]) getwininfo()
ウィンドウに関する情報を、辞書のリスト List として返す。
{winid}が与えられた場合、そのIDを持つウィンドウに関する情報が
リスト List として1項目にして返される。ウィンドウが存在しな
い場合、結果は空のリストになる。
{winid}がなければすべてのタブページのすべてのウィンドウに関す
る情報が返される。
リストの各項目は次のエントリを持つ辞書 Dictionary である:
botline 最下の完全に表示されたバッファ行
bufnr ウィンドウ内のバッファ番号
height ウィンドウの高さ (winbarを除く)
loclist locationリストを表示してる場合は1
{Vimが+quickfix機能付きでコンパイル
されたときのみ有効}
quickfix quickfixまたはlocationリストウィンドウ
の場合は1