Vim documentation: eval
main help file
*eval.txt* For Vim バージョン 7.3. Last change: 2010 Aug 15
VIMリファレンスマニュアル by Bram Moolenaar
Vimスクリプト *expression* *expr* *E15* *eval*
Vimスクリプトの利用についてはユーザマニュアルの41章|usr_41.txt|でも解説されて
いる。
注意:Vimスクリプトはコンパイル時に無効化できる。もしそうなっているとこのドキュ
メントに書かれている事は有効ではない。|+eval|と|no-eval-feature|を参照。
1. 変数 |variables|
1.1 変数の型
1.2 関数への参照 |Funcref|
1.3 リスト |Lists|
1.4 辞書 |Dictionaries|
1.5 変数について補足 |more-variables|
2. 式の文法 |expression-syntax|
3. 内部変数 |internal-variables|
4. 組み込み関数 |functions|
5. 関数定義 |user-functions|
6. 波括弧{}変数 |curly-braces-names|
7. コマンド |expression-commands|
8. 例外処理 |exception-handling|
9. 例 |eval-examples|
10. +eval機能が無効 |no-eval-feature|
11. サンドボックス |eval-sandbox|
12. テキストロック |textlock|
{Vi にはこれらのコマンドは存在しない}
==============================================================================
1. 変数 *variables*
1.1 変数の型
*E712*
変数には6種類の型がある:
数値 32ビット符合有整数 |expr-number| *Number*
例: -123 0x10 0177
浮動小数点数 浮動小数点数 |floating-point-format| *Float*
{|+float| 機能つきでコンパイルされたときのみ}
例: 123.456 1.15e-6 -1.1e3
文字列 終端がNUL文字である8ビットの符号無し文字(バイト)
|expr-string| 例: "ab\txx\"--" 'x-z''a,c'
Funcref 関数への参照 |Funcref|.
例: function("strlen")
リスト 要素の順序つきの列 |List|.
例: [1, 2, ['a', 'b']]
辞書 順序を持たない連想配列: 各要素はキーと値を持つ。|Dictionary|
例: {'blue': "#0000ff", 'red': "#ff0000"}
数値と文字列は文脈に応じて相互に変換される。
数値から文字列への変換は数字のASCII表現によって行なわれる。例:
文字列から数値への変換は最初の数字を用いて数値に変換する。16進表記"0xf9"や8進
表記"017"も認識される。文字列が数字で始まらない場合結果は0となる。例:
文字列を強制的に数値に変換するには0を足す:
64
先頭の0によって8進数とみなされるのを防いだり、異なる基数を使うには|str2nr()|を
使う。
ブール(真理値)演算には数値が使われる。0は偽を意味し、非0は真を表す。
Note 次のコマンドをみると
"foo"は0に変換され、それは偽を意味する。文字列が空ではないか調べるためには
strlen()を使用して次のようにする。
*E745* *E728* *E703* *E729* *E730* *E731*
リスト、辞書、Funcrefは自動的に変換されない。
*E805* *E806* *E808*
数値と浮動小数点数をまぜると浮動小数点数になる。それ以外には浮動小数点数への自
動的な変換は存在しない。文字列から浮動小数点数へは str2float () を使い、浮動小
数点数から文字列へは printf()を、浮動小数点数から数値へは float2nr() を使う。
*E706* *sticky-type-checking*
変数の型を変えようとするとエラーになる。このエラーを避けるには、まず|:unlet|す
る必要がある。しかし文字列と数値は同値であると見なされる。同じく、浮動小数点数
と数値も同値であるとみなされる。例:
1.2 関数への参照
*Funcref* *E695* *E718*
関数|function()|は関数への参照を返す。関数への参照は、式の中で関数名が要求され
る場所で使うと参照先の関数を呼び出す。例:
*E704* *E705* *E707*
関数参照の変数名は、大文字、"s:"、"w:"、"t:"、"b:"のいずれかで始めなければなら
ない。関数参照と参照先の関数の名前を同じにすることはできない。
関数を定義して、それへの参照を直接辞書に入れるための特別な形式がある。例:
この辞書のキーは小文字で始めなければならない。実際の関数名はここでは使われない。
|numbered-function|も参照。
|:call|コマンドでも関数参照を使うことができる:
参照先の関数名は|string()|で得られる。
関数参照を呼び出すには|call()|を使い、引数にはリスト型の変数を使う:
1.3 リスト
*List* *Lists* *E686*
リストとは順序を保つ要素の列である。要素はどんな型でもよい。要素へはインデック
ス番号を使ってアクセスする。列の任意の位置に要素を追加したり削除することができ
る。
リストの作成
*E696* *E697*
リストを作るには、[]の中にコンマで区切って要素を書く。
例:
要素はどんな式でもよい。要素としてリストを指定すると、リストのリストができる:
最後の要素の後に余分なコンマがあると無視される。
リストのインデックス
*list-index* *E684*
リストの要素にアクセスするには、リスト名の後に[]を書き、その中にインデックスを
書く。インデックスは0基点(つまり最初の要素のインデックスは0)である。
取得した要素がリストならば、さらに続けてインデックスを書くことができる:
負のインデックスを指定すると、リストの末尾から数えられる。インデックス-1は最後
の要素を示し、-2は最後から2番目を指す
無効なインデックスによるエラーを回避するには関数|get()|を使う。するとインデッ
クスが無効な場合は、0かまたは自分で指定した既定値が返る:
リストの連結
2つのリストを連結するには演算子"+"を使う:
1個の要素を先頭または末尾に付け加えるには、[]で囲んでリストにして連結する。リ
ストの特定の要素を変更するには後述の|list-modification|を参照。
部分リスト
リストの一部分を取り出すには、[]の中に始点と終点のインデックスを書き、コロンで
区切る:
始点のインデックスを省略すると0となる。終点のインデックスを省略すると-1となる
終点のインデックスが始点のインデックスよりも前になってしまった場合は空リストと
なる。エラーメッセージは表示されない。
終点のインデックスがリストの長さより大きい場合は、長さ-1を指定したときと同じに
なる:
NOTE: mylist[s:e]と書くと変数"s:e"をインデックスとして使ったと解釈される。":"
の前に1文字の変数を使うときは十分注意すること。必要ならこのようにスペースを入
れるとよい: mylist[s : e].
リストの同一性
*list-identity*
変数"aa"がリストであり、それを別の変数"bb"に代入したとすると、両方とも同じ変数
を参照するようになる。よってリスト"aa"を変更すると"bb"も変更される:
[1, 2, 3, 4]
リストのコピーを作るには関数|copy()|を使う。前述の通り[:]を使ってもできる。こ
れは浅いコピーである。つまりリストの要素であるリストに変更を加えると、コピーさ
れたリスト内の同じ要素も変更される:
[[1, aaa], 2, 3, 4]
[[1, aaa], 2, 3]
完全に独立したコピーを作るには|deepcopy()|を使う。これは再帰的にリストの要素の
コピーを作る。ただし深さは100レベルまでである。
2つの変数が同じリストを指しているかは演算子"is"で判定できる。"isnot"はその逆で
ある。一方、"=="は2つのリストが同じ値を持っているかを判定する。
0
1
Note リストの比較について注意: 2つのリストは、同じ長さを持ち、全要素が"=="の意
味で等しいとき、等しいとみなされる。ただ、1つ例外がある: 数値と文字列を比較す
るとそれらは異なるとみなされる。変数に対して"=="で比較したときに行われるような
自動的な型変換は行われない。例:
1
0
つまり、リストの比較は数値や文字列の比較よりも厳格である。単純な値もリストに入
れることによりこの方法で比較することができる:
1
0
リストのアンパック
リストの要素を個々の変数としてアンパックするには、[]の中に変数を書く:
変数の個数とリストの要素数が一致しないときはエラーになる。リストにある余分な要
素をまとめて受け取るには、";"と受け取る変数名を書いておく:
上の例は次とほぼ同じである:
要素が 2 つしかないときでもエラーにはならない。"rest"は空リストになる。
リストの変更
*list-modification*
リストの中の特定の要素を変更するには次のように|:let|を使う:
始点と終点を指定してリストの一部分を変更することができる。代入する値は、少なく
とも削除する範囲の要素数と同じ数だけ必要である:
リストに要素を追加したり削除するには関数を使う。いくつか例を示す:
要素の順番を変更する:
for ループ
|:for|ループは、1つの変数に対してリストの各要素を順番に代入し、コマンドを実行
していく。例:
上の例は次と同じ:
Note リストの全要素が同じ型でなければならない。そうでないとエラー|E706|にな
る。ループの最後でループ変数を|:unlet|すれば、異なる型でも扱える。
やりたいことがリストの各要素を変更するだけなら、forループを使うより関数|map()|
を使った方がよりシンプルになる。
|:let|コマンドと同じように、|:for|は変数のリストをループ変数にすることができる。
この場合、引数はリストのリストでなければならない。
これはリストの各要素に対して|:let|コマンドを実行するかのように実行される。また
この場合も引数の型は全て同じでないとエラーになる。
引数の残りを1個のリスト変数に代入することもできる:
リスト操作関数
*E714*
以下はリスト操作に使える関数である:
機能を組み合わせると、処理を単純に記述できることを覚えておくとよい。例えば、リ
スト中の全ての数値の和を求める例:
1.4 辞書
*Dictionaries* *Dictionary*
辞書とは連想配列である。各要素はキーと値を持つ。要素はキーによって特定できる。
要素は特に順序を持たずに保持される。
辞書の作成
*E720* *E721* *E722* *E723*
辞書を作るには、{}の中にコンマで区切って要素を書く。各要素のキーと値はコロンで
区切る。それぞれのキーは1度しか現れてはならない。例:
*E713* *E716* *E717*
キーは必ず文字列である。数値を使うこともできるが、自動的に文字列に変換される。
よって文字列'4'のキーと数値4のキーは同一の要素を参照する。
entry. Note 文字列'04'と数値04は異なることに注意。なぜなら数値04は文字列'4'に
変換されるからである。
値はどんな式でもよい。辞書を値にすると、ネストした辞書ができる:
最後の要素の後に余分なコンマがあると無視される。
要素にアクセスする
通常、要素にアクセスするには[]の中にキーを書く:
また、この書き方で既存の辞書に要素を追加できる。この点はリストと異なる。
キー名がアルファベット、数字、アンダースコアだけからなる場合は、以下の形式が使
える|expr-entry|:
要素はリストや辞書を含むどんな型でもよいため、インデックス参照とキー参照を続け
て書くことができる:
辞書からリストへの変換
辞書の全要素に対してループを行いたい場合がある。そのためには辞書をリストに変換
し、そのリストに対して|:for|ループを行う。
多くの場合はキーに対してループを行う。これには関数|keys()|を使う:
このキーのリストはソートされていない。ソートさせるには関数|sort()|を使う:
値に対してループを行うには関数|values()|を使う:
キーと値両方を得るには関数|items()|を使う。この関数は、キーと値の2個の要素から
なるリストのリストを返す:
辞書の同一性
*dict-identity*
辞書のコピーを作るにはリストと同様に|copy()|と|deepcopy()|を使う必要がある。そ
うでなく代入を行うと同一の辞書を参照するようになる:
2つの辞書は、全てのキー・値のペアが等しいとき等しいとみなされる。より詳しくは
|list-identity|を参照。
辞書の変更
*dict-modification*
辞書の要素を変更したり、新しい要素を追加するには|:let|を使う:
辞書から要素を取り除くには|remove()|か|:unlet|を使う。以下のように辞書からキー
"aaa"を取り除くには3つの方法がある:
2つの辞書を併合させるには|extend()|を使う:
上のコマンドはbdictの全ての要素をadictに追加する。キーが重複した要素はbdictの
要素により上書きされる。この動作は3番目の引数により変更できる。
Note 辞書の要素間に順序は定まっていない。そのため":echo adict"としたとき、もと
もとadictにあった要素が先に、bdictから追加された要素が後に表示されると考えては
ならない。
辞書から条件を指定して要素を取り除くには|filter()|が使える:
このコマンドは"dict"から'x'にマッチしない要素を全て取り除く。
関数を辞書に入れる
*Dictionary-function* *self* *E725*
関数が"dict"属性つきで定義されると、特殊な方法で呼び出すことができる。例:
これはオブジェクト指向プログラミングのメソッドに似ている。この辞書の要素は
|Funcref|である。暗黙に定義されるローカル変数"self"は、この関数を呼び出した辞
書を参照している。
"dict"属性をつけないでFuncrefを辞書に入れることもできる。しかしその場合、変数
"self"は定義されない。
*numbered-function* *anonymous-function*
関数に名前をつける必要をなくすために、関数を定義して直接辞書に代入することがで
きる:
こうすると関数に番号がふられ、dict.lenがこの関数を参照する|Funcref|となる。こ
の関数は|Funcref|を通してのみ呼び出せる。参照している|Funcref|がなくなると、こ
の関数は自動的に削除される。
番号付き関数には "dict" 属性を付ける必要はありません。
番号付き関数でエラーが発生したときは、あるトリックを使うことで発生源を確認でき
ます。例えば 42 という関数なら次のようにします:
辞書操作関数
*E715*
以下は辞書操作に使える関数である:
1.5 変数について補足
*more-variables*
変数や式の結果の型を知りたいのならば、関数|type()|を使う。
オプション'viminfo'にフラグ'!'が含まれるならば、大文字で始まり小文字を含まない
名前のグローバル変数は、viminfoファイル|viminfo-file|に格納される。
オプション'sessionoptions'が"global"を含むなら、大文字で始まり少なくとも一文字
以上の小文字を含む名前のグローバル変数は、sessionファイル|session-file|に格納
される。
変数名 何処に保存されるか
my_var_6 されない
My_Var_6 sessionファイル
MY_VAR_6 viminfoファイル
波括弧を使って変数名を構成できる。詳細は|curly-braces-names|を参照。
==============================================================================
2. 式の文法 *expression-syntax*
式文法一覧、優先順位の低いものから高い順に:
|expr1| expr2 ? expr1 : expr1 if-then-else 条件式
|expr2| expr3 || expr3 .. 論理和
|expr3| expr4 && expr4 .. 論理積
|expr4| expr5 == expr5 等しい
expr5 != expr5 等しくない
expr5 > expr5 より大きい
expr5 >= expr5 大きいか等しい
expr5 < expr5 より小さい
expr5 <= expr5 小さいか等しい
expr5 =~ expr5 正規表現にマッチする
expr5 !~ expr5 正規表現にマッチしない
expr5 ==? expr5 文字列として等しい(大文字/小文字区別無し)
expr5 ==# expr5 文字列として等しい(大文字/小文字区別有り)
etc. 上記の各式は大小文字の区別を、?を付加すると行
わず、#を付加すると行う
expr5 is expr5 同一の |List| のインスタンス
expr5 isnot expr5 異なる |List| のインスタンス
|expr5| expr6 + expr6 .. 足し算またはリストの連結
expr6 - expr6 .. 引き算
expr6 . expr6 .. 文字列の連結
|expr6| expr7 * expr7 .. 掛け算
expr7 / expr7 .. 割り算
expr7 % expr7 .. 剰余(割った余り)
|expr7| ! expr7 論理否定
- expr7 単項のマイナス(訳注:-1等)
+ expr7 単項のプラス
|expr8| expr8[expr1] 文字列のバイト、またはリストの要素
expr8[expr1 : expr1] 文字列の部分文字列、またはリストの部分リスト
expr8.name 辞書 |Dictionary| の要素
expr8(expr1, ...) |Funcref| 変数による関数呼び出し
|expr9| number 数定数
"string" 文字列定数。バックスラッシュは特別な意味を持つ
'string' リテラル文字列定数。'を含めるには2重にする
[expr1, ...] リスト |List|
{expr1: expr1, ...} 辞書 |Dictionary|
&option オプション変数
(expr1) 式の入れ子
variable 内部変数
va{ria}ble 波括弧付きの内部変数
$VAR 環境変数
@r レジスタ'r'の値
function(expr1, ...) 関数呼出し
func{ti}on(expr1, ...) 波括弧付きの内部変数
".." はその演算が、その後に他の演算を続ける事が出来ることを示している。
例:
一つのレベルにある全ての式は左から右に解釈される。
expr1 *expr1* *E109*
-----
expr2 ? expr1 : expr1
'?'より前の式は数値として評価される。その結果が非0であった場合、'?'と':'に挟ま
れた式の値がこの式全体の値となり、逆に0であった場合は':'以降の式の値が全体の値
となる。
例:
始めの式が"expr2"であるから、そこに別の?:を含むことはできない。残り二つの式に
ついては以下のように再帰的な?:の利用が許される。
例:
読み易くするために、行継続|line-continuation|を利用することが推奨される:
':'の前には必ずスペースを入れること。そうでないと"a:1"のような変数の使用と間違
えてしまう可能性がある。
expr2 and expr3 *expr2* *expr3*
---------------
*expr-barbar* *expr-&&*
演算子"||"と"&&"は左右に一つずつ引数を取る。引数は数値に変換される。結果は:
入力 出力
n1 n2 n1 || n2 n1 && n2
零 零 零 零
零 非零 非零 零
非零 零 非零 零
非零 非零 非零 非零
演算子は続けて書く事ができる。例:
Note "&&"は"||"よりも高い優先順位を持っている。これは次の事を意味する:
結果が確定した時点で残りの式は省略され、解釈されない。これはC言語で行なわれる
ことに似ている。例:
これはaが非零で戻り値は絶対に非零であるから、変数bが宣言されていなくても有効で
ある。次のも同様に:
これもbが宣言されているいないに関わらず有効である。後半の項はbが定義されている
時にだけ評価される。
expr4 *expr4*
-----
expr5 {cmp} expr5
2つの式expr5を比較し、結果が偽なら0を、真なら1を返す。
*expr-==* *expr-!=* *expr->* *expr->=*
*expr-<* *expr-<=* *expr-=~* *expr-!~*
*expr-==#* *expr-!=#* *expr->#* *expr->=#*
*expr-<#* *expr-<=#* *expr-=~#* *expr-!~#*
*expr-==?* *expr-!=?* *expr->?* *expr->=?*
*expr-<?* *expr-<=?* *expr-=~?* *expr-!~?*
*expr-is*
'ignorecase'次第 大小文字考慮 大小文字無視
等しい == ==# ==?
等しくない != !=# !=?
より大きい > ># >?
より大きいか等しい >= >=# >=?
より小さい < <# <?
より小さいか等しい <= <=# <=?
正規表現マッチ =~ =~# =~?
正規表現非マッチ !~ !~# !~?
同一のインスタンス is
異なるインスタンス isnot
例:
"abc" ==# "Abc" 0と評価される
"abc" ==? "Abc" 1と評価される
"abc" == "Abc" 'ignorecase'が設定されていれば1と、でなければ0と評価
*E691* *E692*
リスト|List|はリストとだけ比較可能で、==系、!=系、is、isnotのみ利用できる。
これらはそれぞれのリストの値を再帰的に比較する。大文字小文字無視にすると要素を
比較するときに大文字小文字を無視する。
*E735* *E736*
辞書|Dictionary|は辞書とだけ比較可能で、==系、!=系、is、isnotのみ利用できる。
これらは辞書のキー/値を再帰的に比較する。大文字小文字無視にすると要素を
比較するときに大文字小文字を無視する。
*E693* *E694*
|Funcref|は|Funcref|とだけ比較可能で、"equal"と"not equal"のみ利用できる。大文
字小文字は常に区別される。
リスト|List|に対して"is"や"isnot"を使うと、それらの式が同じリストのインスタン
スを参照しているか判定される。リストのコピーと元のリストは異なると判定される。
リスト以外に対して"is"は"equal"と同じで、"isnot"は"not equal"と同じである。た
だし"is"、"isnot"は型が異なると値が等しくない点が"=="とは異なる。「4 == '4'」
は真で、「4 is '4'」は偽である。
文字列と数値を比較した場合、文字列が数値に変換され、数値として比較される。これ
は"0 == 'x'"が、'x'が数値としては0であることから、真となることを意味する。
文字列同士を比較した場合、strcmp()やstricmp()によって比較される。これは数値的
に(バイトの値で)比較されるのであって、必ずしも言語に基づく文字種の違いではな
い。
'#'を付けた演算子を使うか、省略形かつ'ignorecase'が設定されていない場合、比較
はstrcmp()で行なわれる。大文字・小文字は区別される。
'?'を付けた演算子を使うか、省略形かつ'ignorecase'が設定されている場合、比較は
stricmp()で行なわれる。大文字・小文字は区別されない。
'smartcase' は適用されない。
"=~"と"!~"演算子は右側の引数を正規表現のパターンとして、左側の引数に対してマッ
チを試みる。正規表現のパターンに関しては|pattern|を参照。このマッチは'magic'が
設定され'cpoptions'が空であるように振舞い、実際の'magic'や'cpoptions'に何が設
定されているには依存しない。これがスクリプトをポータブルにしてくれる。正規表現
中のバックスラッシュが重複してしまうのを避けるには、シングルクォーテーションの
文字列を使用する。詳細は|literal-string|を参照。
文字列は単一行として扱われるので、複数行のパターン(\nを含むもの)はマッチしな
い。しかしながらリテラルなヌル文字(NL)を、普通の文字として代用することはでき
る。例:
"foo\nbar" =~ "\n" 1として評価される
"foo\nbar" =~ "\\n" 0として評価される
expr5 and expr6 *expr5* *expr6*
---------------
expr6 + expr6 .. 足し算、またはリストの連結 *expr-+*
expr6 - expr6 .. 引き算 *expr--*
expr6 . expr6 .. 文字列の連結 *expr-.*
リストに対しては"+"のみ可能で、expr6は両方ともリストでなければならない。結果は
2つのリストを連結した新しいリスト。
expr7 * expr7 .. 掛け算 *expr-star*
expr7 / expr7 .. 割り算 *expr-/*
expr7 % expr7 .. 剰余(割った余り) *expr-%*
"."を除く全ての演算子は自動的に文字列を数値に変換する。
"+"と"."の違いに注意:
"123" + "456" = 579
"123" . "456" = "123456"
'.' は '+' と '-' と等しい優先順位を持つので、次の式は:
次のように解釈される:
これはエラーにならない。というのは、"190" は自動的に数値 190 に変換さ
れ、それと浮動小数点数 90.0 との和になる。しかし次の式は:
次のように解釈される:
'.' は '*' より優先順位が低いためである。これはエラーになる。というのは、浮動
小数点数と文字列を結合することになるからである。
数値をゼロで割った結果は、被除数によって次のようになる:
0 / 0 = -0x80000000 (浮動小数点数の NaN のようなもの)
>0 / 0 = 0x7fffffff (正の無限大のようなもの)
<0 / 0 = -0x7fffffff (負の無限大のようなもの)
(訳注: >0 は正の数、<0 は負の数の意味)
(Vim 7.2 以前では常に 0x7fffffff だった)
'/'の右辺(除数)が0の場合、結果は0x7ffffffになる。
'%'の右辺(法)が0の場合、結果は0になる。
これらは全て|Funcref|には適用できない。
. と % は浮動小数点数には適用できない。 *E804*
expr7 *expr7*
-----
! expr7 論理否定 *expr-!*
- expr7 単項マイナス *expr-unary--*
+ expr7 unary plus *expr-unary-+*
'!'演算子では非零は0に、0は1になる。
'-'では数値の符号が反転される。
'+"では変化はない。
文字列はまず数値に変換される。
これら2つは繰り返したり混ぜたりできる。例:
!-1 == 0
!!8 == 1
--9 == 9
expr8 *expr8*
-----
expr8[expr1] 文字列またはリストの要素 *expr-[]* *E111*
expr8が数値か文字列ならば、この値は文字列 expr8 の第 expr1 番目のバイトからな
る 1 バイトの文字列となる。expr8は文字列、expr1は数として扱われる。ただし
expr8 がマルチバイト文字列である場合、この値は単なるバイトコードであり、1文字
とはならないかもしれないことに注意。マルチバイト文字列に対する代替方法は
|byteidx()| を参照。
インデックスが0の場合、先頭のキャラクタが得られることに注意。これはC言語のよう
に働く。注意:カラム番号は1から始まる。例えばカーソルの下の文字を得るためには、
次のようにする必要がある:
文字列の長さよりも大きなインデックスが指定された場合、結果は空文字列になる。負
数のインデックスを指定すると、結果は常に空文字列になる(後方互換性のため)。
最後のバイトを得るには[-1:]を使うこと。
expr8がリスト|List|ならばインデックスexpr1の要素が返る。取りうるインデックスの
値については|list-index|を参照。インデックスが範囲を超えている場合はエラーとな
る。例:
一般的には、インデックスが正でリストの長さ以上または、負でリストの長さ×-1より
小さいときエラーとなる。
expr8[expr1a : expr1b] 部分文字列または部分リスト *expr-[:]*
expr8が数値か文字列ならば、expr1aバイトからexpr1bバイトまでの部分文字列となる
(両端を含む)。expr8は文字列として扱われ、expr1aとexpr1bは数値として扱われる。
Note マルチバイトのエンコーディングは認識しない。マルチバイト文字列のイン
デックスを計算する方法については |byteidx()| を参照。
expr1aが省略されたときは0となる。expr1bが省略されたときは文字列の長さ-1となる。
負数のインデックスを使うことによって文字列の末尾から取り出すことができる。-1は
最後の文字、-2は最後から2文字目…を表す。
インデックスがその文字の範囲外に出てしまったときは、その文字は省かれる。expr1b
がexpr1aより小さいときは空文字列となる。
例:
*sublist* *slice*
expr8がリストならば、インデックスexpr1aとexpr1bの間の要素からなる新しいリスト
となる。上で説明した文字列の場合と同様だが、インデックスが範囲を超えるとエラー
になる。例:
|Funcref|に対してexpr8[expr1]やexpr8[expr1a : expr1b]を使うとエラーになる。
expr8.name 辞書|Dictionary|の要素 *expr-entry*
expr8が辞書|Dictionary|のとき、ドットをつけるとその後に書かれた名前が辞書のキ
ーと見なされる。例: expr8[name]。
名前は変数名と同じようにアルファベットと数字だけから構成されなければならない
が、数字で始まってもよい。波括弧は使えない。
ドットの前後に空白があってはならない。
例:
Note ドットは文字列連結にも使われる。混乱を避けるために、文字列連結のドットの
周りには必ずスペースを入れること。
expr8(expr1, ...) |Funcref| 関数呼び出し
expr8が|Funcref|型の変数のとき、その参照する関数を呼び出す。
*expr9*
数
------
number 数定数 *expr-number*
10進数、16進数(0xか0Xで始まる)、もしくは8進数(0で始まる)の数定数。
*floating-point-format*
浮動小数点数は次の2つの形式で書ける:
[-+]{N}.{M}
[-+]{N}.{M}e[-+]{exp}
ここで {N} と {M} は数値である。{N} と{M} の両方とも省略してはなら
ず、数値のみを含めることができる。
[-+] は、省略可能なプラスまたはマイナス記号である。
{exp} は指数で、10 のベキ。
現在のロケールが何であれ、小数点にはドットのみを使える。コンマは使えない。
{|+float| 機能つきでコンパイルされたときのみ有効}
例:
123.456
+0.0001
55.0
-0.123
1.234e03
1.0E-6
-3.1416e+88
次のものは無効である:
3. empty {M}
1e40 missing .{M}
*float-pi* *float-e*
コピー&ペーストしておくのに便利な値:
A few useful values to copy&paste:
論理的根拠:
浮動小数点数が導入される前は、123.456 と書くと 123 と 456 の2つの数値と解釈
され、それらが文字列に変換されて結合されて "123456" という文字列になった。
これは無意味であり、Vim スクリプト内で意図的に使われているものが見つからな
かったので、浮動小数点数の普通の表記法を用いるため、この後方非互換性は許容され
た。
*floating-point-precision*
浮動小数点数の精度と範囲は、Vim とリンクしたライブラリの "double" の意味によ
る。実行時にこれを変更することはできない。
浮動小数点数 |Float| は printf("%g, f) とするのと同様に、小数点以下6桁まで表示
される。表示する桁数は |printf()| を使えば変えられる。例:
7.853981633974483e-01
文字列 *expr-string* *E114*
------
"string" 文字列定数 *expr-quote*
ダブルクォートが使われていることに注意。
文字列定数には以下の特殊文字が使用できる:
\... 3桁の8進数字 (例 "\316")
\.. 2桁の8進数字 (非数字が続かなければならない)
\. 1桁の8進数字 (非数字が続かなければならない)
\x.. 2桁の16進数字 (例 "\x1f")
\x. 1桁の16進数字 (16進数字でないものが続かなければならない)
\X.. \x..に同じ
\X. \x.に同じ
\u.... 文字を4桁の16進数で表現したもので、実際の値は現在の'encoding'の値に依
存する (例えば "\u02a4")
\U.... \u....に同じ
\b バックスペース <BS>
\e エスケープ <Esc>
\f フォームフィード <FF>
\n 改行 <NL>
\r 改行(キャリッジリターン) <CR>
\t タブ <Tab>
\\ 円記号(バックスラッシュ)
\" ダブルクォート
\<xxx> "xxx"という名の特殊キー。 例 "\<C-W>" は CTRL-W. これはマップで使うた
めのものです。utf-8 文字を得るためには <Char-xxxx> を使わずに、上述の
\uxxxx を使ってください。
Note "\xff"は値255の1バイトとなる。これはエンコーディングによっては無効な値か
もしれない。現在の'encoding'の値に応じた文字255を得るには"\u00ff"を使う。
Note "\000"と"\x00"は強制的に文字列の終端として扱われる。
リテラル文字列 *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 環境変数
環境変数の文字列。定義されていない環境変数を指定した場合、結果は空文字列。
*expr-env-expand*
Note $VARを直接使用した場合とexpand("$VAR")を使用した場合では、動作に違いがあ
ることに注意。直接使用した場合には、現在のVimのセッション中で既知の値に展開さ
れるだけである。expand()を使用した場合、まず最初にVimのセッション中で既知の値
に展開される。それが失敗した場合、変数の展開にシェルが使用されることになる。こ
れは遅くはなるが、シェルの知りうる総ての変数を展開することができる。例:
最初の一つは恐らく何も返ってこず、2つ目は$versionの値が返ってくるだろう(貴方の
シェルがサポートしていたとして)
内部変数 *expr-variable*
-----------------
variable 内部変数
以下の|internal-variables|を参照。
関数呼出 *expr-function* *E116* *E118* *E119* *E120*
-------------
function(expr1, ...) 関数呼出
以下の|functions|を参照。
==============================================================================
3. 内部変数 *internal-variables* *E121*
*E461*
内部変数の名前には文字と、数字とアンダーバー('_')を使うことができる。しかし数
字で始めることはできない。波括弧を使うこともできる。
詳細は|curly-braces-names|を参照。
内部変数は":let"コマンドで作成される|:let|。":unlet"コマンドで明示的に内部変数
を破棄することができる|:unlet|。内部変数に使われてない名前か、既に破棄された内
部変数を使うとエラーとなる。
変数には幾つもの名前空間が存在する。実際にどれが利用されるかは、どのような前置
子が使われたかで決まる:
(無し) 関数の中では関数ローカル、それ以外ではグローバル
|buffer-variable| b: 現在のバッファにローカル
|window-variable| w: 現在のウィンドウにローカル
|tabpage-variable| t: 現在のタブページにローカル
|global-variable| g: グローバル
|local-variable| l: 関数にローカル
|script-variable| s: |:source|されたVimスクリプトにローカル
|function-argument| a: 関数の引数(関数内のみ)
|vim-variable| v: グローバル、Vimがあらかじめ定義
これらのスコープそのものに辞書を通じてアクセスできる。例えば、全てのスクリプト
ローカル変数を削除するには次のようにする:
*buffer-variable* *b:var*
"b:"で始まる変数名は、カレントバッファに局所的な変数を意味する。このように一つ
一つのバッファ毎に、変数"b:foo"を別々に使用することができる。この種の変数は
バッファが掃除(wipe out)された時や、":bdelete"で削除された時に一緒に削除され
る。
1つのバッファローカル変数が定義済:
*b:changedtick-variable* *changetick*
b:changedtick 現在のバッファに対する総変更の回数。変更を行うたびに増加する。
これには一回のアンドゥ操作もカウントされる。この変数はバッファ
に変更が行われた際にだけアクションを起こしたい時に利用できる。
例:
*window-variable* *w:var*
"w:"で始まる変数名は、カレントウィンドウにローカルな変数を意味する。これはウィ
ンドウを閉じるときに破棄される。
*tabpage-variable* *t:var*
"t:"で始まる変数名は、カレントタブページにローカルな変数を意味する。これはタブ
ページを閉じるときに破棄される。{|+windows| 機能つきでコンパイルしたときのみ利
用可能}
*global-variable* *g:var*
関数の中からグローバル変数へアクセスするには、"g:"を付けた名前を使用する。これ
が省略された場合は関数ローカルな変数にアクセスする。ただし"g:"自体は、関数の外
でも使うことができる。
*local-variable* *l:var*
関数の中からそのローカル変数にアクセスするには何も前置しなければ良い。明示的に
"l:"を付けることも可能である。ただし"l:"をつけないと予約されている変数名と衝突
してしまうことがある。例: "count"とすると"v:count"を参照してしまう。"l:count"
とすればローカル変数countを参照できる。
*script-variable* *s:var*
Vimスクリプト内では"s:"で始まる変数名を使うことができる。これはスクリプトにつ
いてローカルであり、スクリプトの外部からはアクセスできない。
スクリプトローカル関数は次の中で使われる:
- そのスクリプトをsourceしている間に実行されるコマンド
- そのスクリプト内で定義される関数
- そのスクリプト内で定義されるオートコマンド
- そのスクリプト内で定義される関数やオートコマンドで定義される関数やオートコマ
ンド(再帰的)
- そのスクリプト内で定義されるユーザ定義コマンド
次の場面では使えない:
- そのスクリプトからsourceされる他のスクリプト
- マッピング
- メニュー
- など。
グローバル変数との衝突を避けるにはスクリプト変数を使う。
次の例を参照:
ここで他のスクリプトから"Tick"を実行してみると、そのスクリプト内の変数
"s:counter"は変化せず、"Tick"が定義されたスクリプト内の"s:counter"だけが変化す
る。
これと同じことをするもう1つの例:
関数呼び出しやユーザ定義コマンドを実行するとき、スクリプト変数のコンテキストは
その関数、コマンドが定義されたスクリプトとなる。
関数の中で関数を定義した場合、スクリプト変数も共有される。例:
このStartCounting()を呼ぶと、カウントアップかカウントダウンのどちらかを行う関
数MyCounter()を定義する。StartCounting()がどこで呼ばれたかに関係なく、
MyCounter()の中では変数s:counterにアクセスできる。
同じスクリプトが再度読み込まれた場合、同一のスクリプト変数が使われる。スクリプ
ト変数はVimが終了するまで存続する。以下の例はカウンタを保持する:
Note これはつまり、ファイルタイププラグインはバッファごとにスクリプト変数を1セッ
ト持つのではないということを意味する。そのような目的にはバッファローカル変数
|b:var|を使うこと。
Vimの定義済変数: *vim-variable* *v:var*
*v:beval_col* *beval_col-variable*
v:beval_col マウスポインタがある桁の桁番号。|v:beval_lnum|行目のバイトイン
デックスである。オプション'balloonexpr'を評価している最中のみ
有効。
*v:beval_bufnr* *beval_bufnr-variable*
v:beval_bufnr マウスポインタがあるバッファの番号。オプション'balloonexpr'を
評価している最中のみ有効。
*v:beval_lnum* *beval_lnum-variable*
v:beval_lnum マウスポインタがある行の行番号。オプション'balloonexpr'を
評価している最中のみ有効。
*v:beval_text* *beval_text-variable*
v:beval_text マウスポインタの下もしくは後ろにあるテキスト。Cプログラムのデ
バッグのために有用。'iskeyword'が適用されるが、マウスポインタ
の下より前にあるドットと"->"は含まれる。マウスポインタが']'の
上にあるときは、そこから対応する'['とその前にあるテキストまで
が含まれる。マウスポインタが1行に収まるビジュアル領域の上にあ
るときはその選択領域となる。オプション'balloonexpr'を評価して
いる最中のみ有効。
*v:beval_winnr* *beval_winnr-variable*
v:beval_winnr マウスポインタがあるウィンドウの番号。オプション'balloonexpr'
を評価している最中のみ有効。
*v:char* *char-variable*
v:char 'formatexpr'を評価しているときの引数。また、短縮入力
|:map-<expr>| で <expr> を指定しているとき、タイプされた文字を
保持する。
*v:charconvert_from* *charconvert_from-variable*
v:charconvert_from
変換しようとしているファイルの文字エンコーディング名。オプショ
ン'charconvert'を評価している最中のみ有効。
*v:charconvert_to* *charconvert_to-variable*
v:charconvert_to
変換後のファイルの文字エンコーディング名。オプション
'charconvert'を評価している最中のみ有効。
*v:cmdarg* *cmdarg-variable*
v:cmdarg 2つの目的のために使われる:
1. ファイルの読み書きコマンドに与えられる余分な引数。現在のと
ころ"++enc="と"++ff="がそれである。読み書きコマンドに対する
オートコマンドイベントが発生する前にこの変数が代入される。
その読み書きコマンドの後に直接この変数を連結できるように、
先頭にスペースがついている。Note: ここには"+cmd"引数は含ま
れていない。どちらにしろそれは実行されるからである。
2. ":hardcopy"でPostScriptファイルを印刷するとき、これが
":hardcopy"への引数になる。'printexpr'の中で使うことができ
る。
*v:cmdbang* *cmdbang-variable*
v:cmdbang v:cmdargと同じく読み書きコマンドを実行したとき設定される。読み
書きコマンドに"!"が使われたときは1となり、使われていなければ0
となる。Note オートコマンドの中でのみ利用可能なことに注意。ユー
ザ定義コマンドでは|<bang>|を使えば同じことができる。
*v:count* *count-variable*
v:count 最後に実行されたノーマルモードコマンドに渡されたコマンドの実行
回数を返す。読出し専用。使用例:
Note: <C-U>は、カウントの後に':'をタイプした時に示される、行範
囲指定を削除するために必要となる。
"3d2w" のようにカウントが2個指定された場合、その数が掛けられる。
よって "d6w" となる。
オプション'formatexpr'を評価するためにも使われる。
また"count"は、以前の版のVimとの互換性の為に動作する。
*v:count1* *count1-variable*
v:count1 "v:count"と同じように、しかしカウントが指定されなかった時の省
略値として存在する。
*v:ctype* *ctype-variable*
v:ctype 文字に関する実行環境の現在のロケール設定。これを使えばVim
スクリプト内で現在のロケール設定に対応できるようになる。技術的
な詳細: LC_CTYPEに等しい。ロケールを使用していないときは"C"に
なる。
この変数を設定するには|:language|コマンドを使うこと。直接設定
することはできない。
|multi-lang|を参照。
*v:dying* *dying-variable*
v:dying 通常時は0。致命的なシグナルを受信したとき1が代入される。複数
のシグナルを受信すると値が増加していく。オートコマンド内でVim
が正常に終了するかチェックするために使える。{Unix でのみ動作}
例:
Note: v:dying が 1 のときに別の致命的なシグナルを受信した場合
は VimLeave 自動コマンドは実行されません。
*v:errmsg* *errmsg-variable*
v:errmsg 最後に表示されたエラーメッセージ。この変数は代入することが許
されている。例:
また"errmsg"は、以前の版のVimとの互換性の為に動作する。
*v:exception* *exception-variable*
v:exception 最も直近に捕捉され、まだ終了していない例外の値。
|v:throwpoint|と|throw-variables|を参照。
例:
出力: "caught oops".
*v:fcs_reason* *fcs_reason-variable*
v:fcs_reason |FileChangedShell|イベントが発生した理由。オートコマンドの中で
何をすべきかやv:fcs_choiceに何を代入すべきかを決めるために使う。
値は次のどれかとなる:
deleted もはやファイルが存在しない
conflict ファイルの内容、モード、タイムスタンプ
が変化しており、バッファが変更されてい
る状態。
changed ファイルの内容が変化している
mode ファイルのモードが変化している
time タイムスタンプだけが変化している
*v:fcs_choice* *fcs_choice-variable*
v:fcs_choice |FileChangedShell|イベントが発生した後に何をすべきかを表す。
オートコマンドの中で、そのバッファに対して何をすべきかを指示す
るために使う。
reload バッファを読み直す(バッファが削除され
ている場合には効果がない)。
ask 何をすべきかをユーザに問い合わせる。こ
れはこのオートコマンドがない場合と同じ
である。ただしタイムスタンプだけが変化
しているときは何もしない。
<empty> 何もしない。オートコマンドの中だけで必
要なことは全て行ってしまっているという
場合にこの値を代入する。
既定値は<empty>。これら意外の(無効な)値が代入されたときは空の
ときと同じ動作になり、警告メッセージは表示されない。
*v:fname_in* *fname_in-variable*
v:fname_in 入力ファイルの名前。以下のオプションを評価している最中のみ
有効:
オプション このファイル名の意味
'charconvert' 変換するファイル
'diffexpr' 元のファイル
'patchexpr' 元のファイル
'printexpr' 印刷するファイル
また、オートコマンドイベント|SwapExists|が発生したときスワップ
ファイル名が代入される。
*v:fname_out* *fname_out-variable*
v:fname_out 出力ファイルの名前。以下のオプションを評価している最中のみ
有効:
オプション このファイル名の意味
'charconvert' 変換した結果のファイル (*)
'diffexpr' diffの出力
'patchexpr' パッチを当てた結果のファイル
(*) 書き込みコマンド(":w file"など)を実行する際の変換では
v:fname_inと同じになる。読み込みコマンド(":e file"など)を実行
する際の変換では一時ファイル名になり、v:fname_inと異なる。
*v:fname_new* *fname_new-variable*
v:fname_new 新しい方のファイル名。'diffexpr'を評価している最中のみ有効。
*v:fname_diff* *fname_diff-variable*
v:fname_diff diff(patch)ファイルの名前。'patchexpr'を評価している最中のみ有
効。
*v:folddashes* *folddashes-variable*
v:folddashes 'foldtext'用。閉じた折り畳みのレベルを表すダッシュ。
サンドボックス|sandbox|の中では読出し専用。|fold-foldtext|
*v:foldlevel* *foldlevel-variable*
v:foldlevel 'foldtext'用。閉じた折り畳みのレベル。
サンドボックス|sandbox|の中では読出し専用。|fold-foldtext|
*v:foldend* *foldend-variable*
v:foldend 'foldtext'用。閉じた折り畳みの最後の行。
サンドボックス|sandbox|の中では読出し専用。|fold-foldtext|
*v:foldstart* *foldstart-variable*
v:foldstart 'foldtext'用。閉じた折り畳みの最初の行。
サンドボックス|sandbox|の中では読出し専用。|fold-foldtext|
*v:insertmode* *insertmode-variable*
v:insertmode オートコマンドイベント|InsertEnter|と|InsertChange|用。
値は次のどれか:
i インサートモード
r 置換モード
v ビジュアル置換モード
*v:key* *key-variable*
v:key 辞書|Dictionary|の現在の要素のキー。|map()|と|filter()|で使わ
れる式を評価している最中のみ有効。
読出し専用。
*v:lang* *lang-variable*
v:lang メッセージに関する実行環境の現在のロケール設定。これを使えば
Vimスクリプト内で現在のロケール設定に対応できるようになる。
技術的な詳細: LC_MESSAGESに等しい。この値はシステムに依存する。
この変数を設定するには|:language|コマンドを使うこと。直接設定
することはできない。
文字エンコーディングに使うのと違う言語でメッセージを表示させた
い場合は|v:ctype|と異なる値でもよい。|multi-lang|を参照。
*v:lc_time* *lc_time-variable*
v:lc_time 時刻のメッセージに関する実行環境の現在のロケール設定。これを使
えばVimスクリプト内で現在のロケール設定に対応できるようになる。
技術的な詳細: LC_TIMEに等しい。この値はシステムに依存する。こ
の変数を設定するには|:language|コマンドを使うこと。直接設定す
ることはできない。
*v:lnum* *lnum-variable*
v:lnum 'foldexpr' |fold-expr| と 'indentexpr' に使うための行番号。ま
た 'guitablabel' と 'guitabtooltip' の文脈ではタブページ番号に
なる。これらの式のどれかを評価しているときのみ有効。サンドボッ
クス |sandbox| の中では読出し専用。
*v:mouse_win* *mouse_win-variable*
v:mouse_win |getchar()|でマウスクリックイベントを取得したとき、この変数に
ウィンドウ番号が代入されている。|winnr()|と同じく番号は1から始
まる。マウスがクリックされなかったときは0となる。
*v:mouse_lnum* *mouse_lnum-variable*
v:mouse_lnum |getchar()|でマウスクリックイベントを取得したとき、この変数に
行番号が代入されている。物理行ではなく論理行。マウスがクリック
されていないときは0となる。
*v:mouse_col* *mouse_col-variable*
v:mouse_col |getchar()|でマウスクリックイベントを取得したとき、この変数に
桁番号が代入されている。|virtcol()|と同じく画面上の桁番号。マ
ウスがクリックされていないときは0となる。
*v:oldfiles* *oldfiles-variable*
v:oldfiles 起動時に |viminfo| から読み込まれたファイルの名前のリスト。
これらはマークを記憶しているファイルである。リストの長さの上限
はオプション 'viminfo' の引数 ' によって決まる(既定では 100)。
|:oldfiles| と |c_#<| を参照。
このリストは変更可能であるが、後で |viminfo| ファイルに書き込ま
れるものには影響しない。文字列以外の値を使うと問題を引き起こす
だろう。
{|+viminfo| 機能つきでコンパイルされたときのみ有効}
*v:operator* *operator-variable*
v:operator ノーマルモードにおいて最後に実行したオペレータコマンド。基本的に
1文字である。例外は <g> や <z> で始まるコマンドで、その場合は2文
字になる。|v:prevcount| と |v:register| と組み合わせて使うとよ
い。オペレータ待機モードをキャンセルして、それからオペレータを
使いたいときに便利である。例:
この値は他のオペレータが入力されるまでセットされてい
る。よって空になると期待してはいけない。
|:delete|, |:yank| などの Ex コマンドに対しては v:operator は
セットされない。
読出し専用。
*v:prevcount* *prevcount-variable*
v:prevcount 最後のノーマルモードコマンドに与えられたカウントの値。前のコマ
ンドのv:countの値である。ビジュアルモードやオペレータ待機モー
ドをキャンセルし、その後にカウントを使う場合に便利である。
例:
読出し専用。
*v:profiling* *profiling-variable*
v:profiling 通常時は0。":profile start"を実行すると1が代入される。
|profiling|を参照。
*v:progname* *progname-variable*
v:progname Vimを起動したときのプログラム名(パスは除かれる)。"view"、
"evim"などの名前やシンボリックリンクなどで起動した場合に特別な
初期化を行うのに便利。
読出し専用。
*v:register* *register-variable*
v:register 最後のノーマルモードコマンドに指定されたレジスタの名前。レジス
タが指定されなかったときは空。|getreg()| |setreg()|
*v:scrollstart* *scrollstart-variable*
v:scrollstart 画面のスクロールの原因となったスクリプトや関数を説明する
文字列。空であるときのみ代入される。よってこの変数には最初の原
因だけが記録されている。原因がキーボードから入力されたコマンド
の場合は"Unknown"が代入される。
スクリプトを実行したとき現れたhit-enterプロンプトの原因を探る
ために便利。
*v:servername* *servername-variable*
v:servername |x11-clientserver|に登録されている名前。
読出し専用。
v:searchforward *v:searchforward* *searchforward-variable*
検索方向: 前方検索の後なら1、後方検索の後なら0。|quote/| で示す
方法によって最終検索パターンを直接セットしたときは0(前方検索)
にセットされる。関数から戻るとき、この値は呼び出し前の値に復元
される。
|function-search-undo|。
読み書き両用。
*v:shell_error* *shell_error-variable*
v:shell_error 最後に実行したシェルコマンドの結果。シェルコマンドの実行時にな
にかエラーがあったならば、非零の値を取る。問題がなければ零にな
る。これはシェルがエラーコードをVimに通知する時のみ働く。コマ
ンドが実行されなかった時には、値として-1が良く使われる。読出し
専用。
例:
また"shell_error"は、以前の版のVimとの互換性の為に動作する。
*v:statusmsg* *statusmsg-variable*
v:statusmsg 最後に表示されたステータスメッセージ。この変数は代入すること
が許されている。
*v:swapname* *swapname-variable*
v:swapname オートコマンド|SwapExists|を実行している最中のみ有効。見つかっ
たスワップファイルの名前。読出し専用。
*v:swapchoice* *swapchoice-variable*
v:swapchoice イベント|SwapExists|により実行されたオートコマンドが、見つかっ
たスワップファイルをどう処理するかをこの変数に代入する。
'o' 読込専用で開く
'e' とにかく編集する
'r' 復活させる
'd' スワップファイルを削除する
'q' 終了する
'a' 中止する
この変数の値は1文字の文字列でなければならない。値が空のときは
オートコマンドSwapExistsが存在しないときと同じようにユーザに問
い合わせる。既定値は空。
*v:swapcommand* *swapcommand-variable*
v:swapcommand ファイルを開いた後に実行するノーマルモードコマンド。オートコマ
ンド|SwapExists|で、他のVimインスタンスにファイルを開かせ、指
定位置までジャンプするために使うことができる。例えば、あるタグ
へジャンプするには、この変数に":tag tagname\r"という値を代入す
る。":edit +cmd file"を実行させるには":cmd\r"を代入する。
*v:termresponse* *termresponse-variable*
v:termresponse termcapのエントリ|t_RV|で端末から返されるエスケープシーケン
ス。ESC [またはCSIで始まり、途中数字と';'と'.'だけから構成され
'c'で終わるエスケープシーケンスを受け取ったとき代入される。
このオプションがセットされるとオートコマンドイベント
TermResponseが発生し、端末からの応答に反応することができる。
新しいxtermからの応答は次の形式である:
"<Esc>[ Pp ; Pv ; Pc c"。ここでPpは端末のタイプ: 0ならvt100、
1ならvt220。Pvはパッチレベル(パッチ95で導入されたため常
に95以上)。Pcは常に0。
{Vi mが|+termresponse|機能付きでコンパイルされたときのみ有効}
*v:this_session* *this_session-variable*
v:this_session 最後にロードされたか、セーブされたセッションファイルの完全な
ファイル名。|:mksession|を参照。この変数は代入することが許さ
れている。それ以前にセーブされたセッションがなければ、この変数
は空となる。
また"this_session"は、以前の版のVimとの互換性の為に動作する。
*v:throwpoint* *throwpoint-variable*
v:throwpoint 最も直近に捕捉されてまだ終了していない例外が発生した位置。キー
ボードから入力されたコマンドは記録されていない。|v:exception|
と|throw-variables|も参照。
例:
出力: "Exception from test.vim, line 2"
*v:val* *val-variable*
v:val 辞書|Dictionary|の現在の要素の値。|map()|と|filter()|で使わ
れる式を評価している最中のみ有効。
読出し専用。
*v:version* *version-variable*
v:version Vimのバージョン番号。メジャーバージョン番号は100倍され、マイ
ナーバージョン番号と足されている。Version 5.0は500。Version
5.1 (5.01)は501となる。読出し専用。また"version"は、以前の版の
Vimとの互換性の為に動作する。
特定のパッチが摘要されているかを調べるには|has()|を使う。例:
5.0と5.1には両方ともパッチ123が存在しているが、バージョンが違
えば番号は同じでもパッチの内容は全く異なっている。
*v:warningmsg* *warningmsg-variable*
v:warningmsg 最後に表示された警告メッセージ。この変数は代入することが許され
ている。
==============================================================================
4. 組み込み関数 *functions*
(関数名の上でCTRL-]を使うことで、詳細な説明へ飛ぶことができる)
使用法 結果 説明
abs( {expr}) 浮動小数点数または数値 {expr}の絶対値
acos( {expr}) 浮動小数点数 {expr}のアークコサイン
add( {list}, {item}) リスト {item}をリスト{list}に追加する
append( {lnum}, {string}) 数値 {string}を{lnum}行目に付け加える
append( {lnum}, {list}) 数値 行{list}を{lnum}行目に付け加える
argc() 数値 引数内のファイルの数
argv( {nr}) 文字列 引数の第{nr}番目
argv( ) リスト 引数リスト
asin( {expr}) 浮動小数点数 {expr}のアークサイン
atan( {expr}) 浮動小数点数 {expr}のアークタンジェント
atan2( {expr}, {expr}) 浮動小数点数 {expr1} / {expr2} のアークタン
ジェント
browse( {save}, {title}, {initdir}, {default})
文字列 ファイル選択ダイアログを表示
browsedir( {title}, {initdir}) 文字列 ディレクトリ選択ダイアログを表示
bufexists( {expr}) 数値 バッファ{expr}が存在すればTRUE
buflisted( {expr}) 数値 バッファ{expr}がリストにあるならTRUE
bufloaded( {expr}) 数値 バッファ{expr}がロード済みならTRUE
bufname( {expr}) 文字列 バッファ{expr}の名前
bufnr( {expr}) 数値 バッファ{expr}の番号
bufwinnr( {nr}) 数値 バッファ{nr}のウィンドウ番号
byte2line( {byte}) 数値 {byte}番目のバイトの行番号
byteidx( {expr}, {nr}) 数値 {expr}の{nr}文字目のバイトインデックス
call( {func}, {arglist} [, {dict}])
任意 引数{arglist}をつけて{func}を呼ぶ
ceil( {expr}) 浮動小数点数 {expr} を切り上げる
changenr() 数値 現在の変更番号
char2nr( {expr}) 数値 {expr}の先頭文字のASCIIコード
cindent( {lnum}) 数値 {lnum}行目のCインデント量
clearmatches() なし 全マッチをクリアする
col( {expr}) 数値 カーソルかマークのカラム番号nr
complete( {startcol}, {matches}) なし インサートモード補完を設定する
complete({startcol}, {matches}) 文字列 インサートモード補完の結果を設定する
complete_add( {expr}) 数値 補完候補を追加する
complete_check() 数値 補完中に押されたキーをチェックする
confirm( {msg}, {choices} [, {default} [, {type}]])
数値 ユーザへの選択肢と番号
copy( {expr}) 任意 {expr}の浅いコピーを作る
cos( {expr}) 浮動小数点数 {expr} の余弦(コサイン)
cosh( {expr}) 浮動小数点数 {expr}のハイパボリックコサイン
count( {list}, {expr} [, {start} [, {ic}]])
数値 {list}中に{expr}が何個現れるか数える
cscope_connection( [{num} , {dbpath} [, {prepend}]])
数値 cscope接続の存在を判定する
cursor( {lnum}, {col} [, {coladd}])
数値 カーソルを{lnum}, {col}, {coladd}へ移動
cursor( {list}) 数値 カーソルを{list}の位置へ移動
deepcopy( {expr}) 任意 {expr}の完全なコピーを作る
delete( {fname}) 数値 ファイル{fname}を消す
did_filetype() 数値 FileTypeのautocommandが実行されたか?
diff_filler( {lnum}) 数値 diffモードで{lnum}に挿入された行
diff_hlID( {lnum}, {col}) 数値 diffモードで{lnum}/{col}位置の強調
empty( {expr}) 数値 {expr}が空ならTRUE
escape( {string}, {chars}) 文字列 {string}内の{chars}を'\'でエスケープ
eval( {string}) 任意 {string}を評価し、値を得る
eventhandler( ) 数値 イベントハンドラの内側ならTRUE
executable( {expr}) 数値 実行可能な{expr}が存在するなら1
exists( {var}) 数値 変数{var}が存在したらTRUE
extend( {expr1}, {expr2} [, {expr3}])
リスト/辞書 {expr1}に{expr2}の要素を挿入
exp( {expr}) 浮動小数点数 {expr}の指数
expand( {expr} [, {flag}]) 文字列 {expr}内の特別なキーワードを展開
feedkeys( {string} [, {mode}]) 数値 先行入力バッファにキーシーケンスを追加
filereadable( {file}) 数値 {file}が読みこみ可能ならTRUE
filewritable( {file}) Number {file}が書き込み可能ならTRUE
filter( {expr}, {string}) リスト/辞書 {string}が0となる要素を{expr}から
とり除く
finddir( {name}[, {path}[, {count}]])
文字列 {path}からディレクトリ{name}を探す
findfile( {name}[, {path}[, {count}]])
文字列 {path}からファイル{name}を探す
float2nr( {expr}) 数値 浮動小数点数 {expr} を数値に変換する
floor( {expr}) 浮動小数点数 {expr} を切り捨てる
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ウィンドウを前面に移動する
function( {name}) Funcref 関数{name}への参照を取得
garbagecollect( [at_exit]) なし メモリを解放する。循環参照を断ち切る
get( {list}, {idx} [, {def}]) 任意 {list}や{def}から要素{idx}を取得
get( {dict}, {key} [, {def}]) 任意 {dict}や{def}から要素{key}を取得
getbufline( {expr}, {lnum} [, {end}])
リスト バッファ{expr}の{lnum}から{end}行目
getbufvar( {expr}, {varname}) 任意 バッファ{expr}の変数 {varname}
getcmdline() 文字列 現在のコマンドラインを取得
getcmdpos() 数値 コマンドラインのカーソル位置を取得
getcmdtype() 文字列 現在のコマンドラインの種類を取得
getcwd() 文字列 現在の作業ディレクトリ
getfperm( {fname}) 文字列 ファイル{fname}の許可属性を取得
getfsize( {fname}) 数値 ファイル{fname}のバイト数を取得
getfontname( [{name}]) 文字列 使用しているフォントの名前
getftime( {fname}) 数値 ファイルの最終更新時間
getftype( {fname}) 文字列 ファイル{fname}の種類の説明
getline( {lnum}) 文字列 現在のバッファから行の内容を取得
getline( {lnum}, {end}) リスト カレントバッファの{lnum}から{end}行目
getloclist( {nr}) リスト ロケーションリストの要素のリスト
getmatches() リスト 現在のマッチのリスト
getpid() 数値 Vim のプロセス ID
getpos( {expr}) リスト カーソル・マークなどの位置を取得
getqflist() リスト quickfixリストの要素のリスト
getreg( [{regname} [, 1]]) 文字列 レジスタの中身を取得
getregtype( [{regname}]) 文字列 レジスタの種類を取得
gettabvar( {nr}, {varname}) 任意 タブ{nr}の変数{varname}
gettabwinvar( {tabnr}, {winnr}, {name})
任意 タブページ{tabnr}の{winnr}の{name}
getwinposx() 数値 GUI vim windowのX座標
getwinposy() 数値 GUI vim windowのY座標
getwinvar( {nr}, {varname}) 文字列 ウィンドウ{nr}の変数{varname}
glob( {expr} [, {flag}]) 文字列 {expr}内のfile wildcardを展開
globpath( {path}, {expr} [, {flag}])
文字列 {path}の全ディレクトリに対し
glob({expr})を行う
has( {feature}) 数値 機能{feature}がサポートならばTRUE
has_key( {dict}, {key}) 数値 {dict}が要素{key}を持つならTRUE
haslocaldir() 数値 現在のウィンドウで|:lcd|が実行された
ならTRUE
hasmapto( {what} [, {mode} [, {abbr}]])
数値 {what}へのマッピングが存在するならTRUE
histadd( {history},{item}) 文字列 ヒストリに追加
histdel( {history} [, {item}]) 文字列 ヒストリからitemを削除
histget( {history} [, {index}]) 文字列 ヒストリから{index}アイテムを取得
histnr( {history}) 数値 ヒストリの数
hlexists( {name}) 数値 highligth group {name}が存在したらTRUE
hlID( {name}) 数値 highlight group {name}のID
hostname() 文字列 vimが動作しているマシンの名前
iconv( {expr}, {from}, {to}) 文字列 {expr}のエンコーディングを変換する
indent( {lnum}) 文字列 行{lnum}のインデントを取得
index( {list}, {expr} [, {start} [, {ic}]])
数値 {list}中に{expr}が現れる位置
input( {prompt} [, {text} [, {completion}]])
文字列 ユーザからの入力を取得
inputdialog( {p} [, {t} [, {c}]]) 文字列 input()と同様。GUIのダイアログを使用
inputlist( {textlist}) 数値 ユーザに選択肢から選ばせる
inputrestore() 数値 先行入力を復元する
inputsave() 数値 先行入力を保存し、クリアする
inputsecret( {prompt} [, {text}]) 文字列 input()だがテキストを隠す
insert( {list}, {item} [, {idx}]) リスト {list}に要素{item}を挿入 [{idx}の前]
isdirectory( {directory}) 数値 {directory}がディレクトリならばTRUE
islocked( {expr}) 数値 {expr}がロックされているならTRUE
items( {dict}) リスト {dict}のキーと値のペアを取得
join( {list} [, {sep}]) 文字列 {list}の要素を連結して文字列にする
keys( {dict}) リスト {dict}のキーを取得
len( {expr}) 数値 {expr}の長さを取得
libcall( {lib}, {func}, {arg} 文字列 ライブラリ{lib}の関数{func}をコール
libcallnr( {lib}, {func}, {arg}) 数値 上と同じ。ただし数値を返す
line( {expr}) 数値 行番号の取得
line2byte( {lnum}) 数値 行{lnum}のバイトカウント
lispindent( {lnum}) 数値 {lnum}行目のLispインデント量を取得
localtime() 数値 現在時刻
log( {expr}) 浮動小数点数 {expr}の自然対数(底e)
log10( {expr}) 浮動小数点数 浮動小数点数 {expr} の 10 を底
とする対数
map( {expr}, {string}) リスト/辞書 {expr}の各要素を{expr}に変える
matchadd( {group}, {pattern}[, {priority}[, {id}]])
数値 {pattern} を {group} で強調表示する
maparg( {name}[, {mode} [, {abbr}]])
文字列 モード{mode}でのマッピング{name}の値
mapcheck( {name}[, {mode} [, {abbr}]])
文字列 {name}にマッチするマッピングを確認
match( {expr}, {pat}[, {start}[, {count}]])
数値 {expr}内で{pat}がマッチする位置
matcharg( {nr}) リスト |:match|の引数
matchdelete( {id}) 数値 {id} で指定されるマッチを削除する
matchend( {expr}, {pat}[, {start}[, {count}]])
数値 {expr}内で{pat}が終了する位置
matchlist( {expr}, {pat}[, {start}[, {count}]])
リスト {expr}内の{pat}のマッチと部分マッチ
matchstr( {expr}, {pat}[, {start}[, {count}]])
文字列 {expr}内の{count}'番目の{pat}のマッチ
max( {list}) 数値 {list}内の要素の最大値
min( {list}) 数値 {list}内の要素の最小値
mkdir( {name} [, {path} [, {prot}]])
数値 ディレクトリ{name}を作成
mode( [expr]) 文字列 現在の編集モード
mzeval( {expr}) 任意 |MzScheme| の式を評価する
nextnonblank( {lnum}) 数値 {lnum}行目以降で空行でない行の行番号
nr2char( {expr}) 文字列 ASCIIコード{expr}で示されるキャラクタ
pathshorten( {expr}) 文字列 path内の短縮したディレクトリ名
pow( {x}, {y}) 浮動小数点数 {x} の {y} 乗
prevnonblank( {lnum}) 数値 {lnum}行目以前の空行でない行の行番号
printf( {fmt}, {expr1}...) 文字列 文字列を組み立てる
pumvisible() 数値 ポップアップメニューが表示されているか
range( {expr} [, {max} [, {stride}]])
リスト {expr}から{max}までの要素のリスト
readfile( {fname} [, {binary} [, {max}]])
リスト ファイル{fname}から行のリストを取得
reltime( [{start} [, {end}]]) リスト 時刻の値を取得
reltimestr( {time}) 文字列 時刻の値を文字列に変換
remote_expr( {server}, {string} [, {idvar}])
文字列 式を送信する
remote_foreground( {server}) 数値 Vimサーバを前面に出す
remote_peek( {serverid} [, {retvar}])
数値 返信文字列を確認する
remote_read( {serverid}) 文字列 返信文字列を読み込む
remote_send( {server}, {string} [, {idvar}])
文字列 キーシーケンスを送信する
remove( {list}, {idx} [, {end}]) 任意 {list}から{idx}〜{end}の要素を削除
remove( {dict}, {key}) 任意 {dict}から要素{key}を削除
rename({from}, {to}) 数値 {file}から{to}へファイル名変更
repeat( {expr}, {count}) 文字列 {expr}を{count}回繰り返す
resolve( {filename}) 文字列 ショートカットが指す先のファイル名
reverse( {list}) 文字列 {list}をその場で反転させる
round( {expr}) 浮動小数点数 {expr} を四捨五入する
search( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
数値 {pattern} を検索する
searchdecl( {name} [, {global} [, {thisblock}]])
数値 変数の宣言を検索
searchpair( {start}, {middle}, {end} [, {flags} [, {skip} [...]]])
数値 開始/終端のペアの他方を検索
searchpairpos( {start}, {middle}, {end} [, {flags} [, {skip} [...]]])
リスト 開始/終端のペアの他方を検索
searchpos( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
リスト {pattern}を検索
server2client( {clientid}, {string})
数値 返信文字列を送信する
serverlist() 文字列 利用可能なサーバのリストを取得
setbufvar( {expr}, {varname}, {val}) バッファ{expr}内の変数{varname}に{val}
をセット
setcmdpos( {pos}) 数値 コマンドライン内のカーソル位置を設定
setline( {lnum}, {line}) 数値 行{lnum}に{line}(文字列)をセット
setloclist( {nr}, {list}[, {action}])
数値 {list}を使ってロケーションリストを変更
setmatches( {list}) 数値 マッチのリストを復元する
setpos( {expr}, {list}) なし {expr}の位置を{list}にする
setqflist( {list}[, {action}]) 数値 {list}を使ってQuickFixリストを変更
setreg( {n}, {v}[, {opt}]) 数値 レジスタの値とタイプを設定
settabvar( {nr}, {varname}, {val}) タブページ{nr}の変数{varname}を{val}に
設定する
settabwinvar( {tabnr}, {winnr}, {varname}, {val}) タブページ{tabnr}内のウィン
ドウ{winnr}の変数{varname}に{val}を
セット
setwinvar( {nr}, {varname}, {val}) ウィンドウ{nr}の変数{varname}に{val}を
セット
shellescape( {string} [, {special}])
文字列 {string}をシェルコマンド引数として使う
ためにエスケープする。
simplify( {filename}) 文字列 ファイル名を可能なかぎり簡略化する
sin( {expr}) 浮動小数点数 {expr} の正弦(サイン)
sinh( {expr}) 浮動小数点数 {expr}のハイパボリックサイン
sort( {list} [, {func}]) リスト 比較に{func}を使って{list}をソートする
soundfold( {word}) 文字列 {word}のsound-fold
spellbadword() 文字列 カーソル位置のスペルミスした単語
spellsuggest( {word} [, {max} [, {capital}]])
リスト スペリング補完
split( {expr} [, {pat} [, {keepempty}]])
リスト {expr}を{pat}で区切ってリストを作る
sqrt( {expr} 浮動小数点数 {expr} の平方根
str2float( {expr}) 浮動小数点数 文字列を浮動小数点数に変換する
str2nr( {expr} [, {base}]) 数値 文字列を数値に変換する
strchars( {expr}) 数値 文字列{expr}の文字の数
strdisplaywidth( {expr} [, {col}]) 数値 文字列{expr}の表示幅
strftime( {format}[, {time}]) 文字列 指定されたフォーマットでの時刻
stridx( {haystack}, {needle}[, {start}])
数値 {haystack}内の{needle}のインデックス
string( {expr}) 文字列 {expr}の値の文字列表現
strlen( {expr}) 数値 文字列{expr}の長さ
strpart( {src}, {start}[, {len}])
文字列 {src}内{start}から長さ{len}の部分
strridx( {haystack}, {needle} [, {start}])
数値 {haystack}内の最後の{needle}のインデッ
クス
strtrans( {expr}) 文字列 文字列を表示可能に変更
strwidth( {expr}) 数値 文字列{expr}の表示セル幅
submatch( {nr}) 文字列 ":substitute"における特定のマッチ
substitute( {expr}, {pat}, {sub}, {flags})
文字列 {expr}の{pat}を{sub}に置換え
synID( {line}, {col}, {trans}) 数値 {line}と{col}のsyntax IDを取得
synIDattr( {synID}, {what} [, {mode}])
文字列 syntax ID{synID}の属性{what}を取得
synIDtrans( {synID}) 数値 {synID}の翻訳されたsyntax ID
synstack( {lnum}, {col}) リスト {lnum}行{col}列目における構文IDの
スタック
system( {expr} [, {input}]) 文字列 シェルコマンド{expr}の出力結果
tabpagebuflist( [{arg}]) リスト タブページ内のバッファ番号のリスト
tabpagenr( [{arg}]) 数値 現在または最後のタブページの番号
tabpagewinnr( {tabarg}[, {arg}])
数値 タブページ内の現在のウィンドウの番号
taglist( {expr}) リスト {expr}にマッチするタグのリスト
tagfiles() リスト 使用しているタグファイルのリスと
tempname() 文字列 テンポラリファイルの名前
tan( {expr}) 浮動小数点数 {expr}のタンジェント
tanh( {expr}) 浮動小数点数 {expr}のハイパボリックタンジェ
ント
tolower( {expr}) 文字列 文字列{expr}を小文字にする
toupper( {expr}) 文字列 文字列{expr}を大文字にする
tr( {src}, {fromstr}, {tostr}) 文字列 {src}中に現れる文字{fromstr}を{tostr}
に変換する。
trunc( {expr} 浮動小数点数 浮動小数点数 {expr} を切り詰め
る
type( {name}) 数値 変数{name}の型
undofile( {name}) 文字列 {name}に対するアンドゥファイルの名前
undotree() リスト アンドゥファイルツリー
values( {dict}) リスト {dict}の値のリスト
virtcol( {expr}) 数値 カーソルのスクリーンカラム位置
visualmode( [expr]) 文字列 最後に使われたVisualモード
winbufnr( {nr}) 数値 ウィンドウ{nr}のバッファ番号
wincol() 数値 カーソル位置のウィンドウ桁
winheight( {nr}) 数値 ウィンドウ{nr}の高さ
winline() 数値 カーソル位置のウィンドウ行
winnr() 数値 現在のウィンドウの番号
winrestcmd() 文字列 ウィンドウサイズを復元するコマンド
winrestview( {dict}) なし 現在のウィンドウのビューを復元
winsaveview() 辞書 現在のウィンドウのビューを保存
winwidth( {nr}) 数値 ウィンドウ{nr}の幅を取得
writefile( {list}, {fname} [, {binary}])
数値 行のリストをファイル{fname}に書き込む
abs({expr}) *abs()*
{expr} の絶対値を返す。{expr} の値が浮動小数点数である場合は浮
動小数点数を返す。{expr} が|Number|に変換可能な場合は数値が戻
り値になる。それ以外の場合はエラーメッセージを表示し、-1
を返す。
例:
1.456
5.456
4
{|+float| 機能を有効にしてコンパイルしたときのみ有効}
acos({expr}) *acos()*
{expr} の逆余弦 (アークコサイン) をラジアンで返す。
値は [0, pi] の範囲の浮動小数点数 (|Float|)。
{expr} は [-1, 1] の範囲の浮動小数点数 (|Float|) か数値
(|Number|) でなければならない。
例:
1.570796
2.094395
{|+float| 機能を有効にしてコンパイルしたときのみ有効}
add({list}, {expr}) *add()*
リスト|List|{list}の末尾に要素{expr}を追加する。結果のリストを
返す。例:
Note {expr}がリストのときは、1個の要素として追加される。リスト
を連結するには|extend()|を使う。
他の位置に要素を追加するには|insert()|を使う。
append({lnum}, {expr}) *append()*
{expr}がリスト|List|のときは、各要素をカレントバッファの{lnum}
行目以降にテキストとして追加する。
リストでないときは、{expr}をテキストとしてカレントバッファの{lnum}
行目以降にテキストとして追加する。
{lnum}は0でもよく、その場合は1行目の前に行を挿入する。
失敗した場合は0を返す({lnum}が不正な範囲であるか、メモリ不足)。
成功なら0を返す。例:
*argc()*
argc() カレントウィンドウの引数リスト内の、ファイルの数を返す。
|arglist|を参照。
*argidx()*
argidx() 引数リスト内の現在のインデックスを返す。最初のファイルは0とな
る。argc() - 1が最後のファイルとなる。|arglist|を参照。
*argv()*
argv([{nr}]) 結果は引数リスト内の、{nr}番目のファイル。|arglist|を参照。
"argv(0)"は一番最初のファイルを示す。例:
引数{nr}が指定されなかった場合は、引数リスト|arglist|全体を
返す。
asin({expr}) *asin()*
{expr} の逆正弦 (アークサイン) をラジアンで返す。
値は [-pi/2, pi/2] の範囲の浮動小数点数 (|Float|)。
{expr} は [-1, 1] の範囲の浮動小数点数 (|Float|) か数値
(|Number|) でなければならない。
例:
0.927295
-0.523599
{|+float| 機能つきでコンパイルされたときのみ有効}
atan({expr}) *atan()*
{expr} の逆正接(アークタンジェント)の主値を浮動小数点数
|Float| で返す。主値はラジアンで[-pi/2, +pi/2]の範囲内にある。
{expr} は |Float| か |Number| に評価されなければならない。
例:
1.560797
-1.326405
{|+float| 機能つきでコンパイルされたときのみ有効}
atan2({expr1}, {expr2}) *atan2()*
{expr1} / {expr2} の逆正接 (アークタンジェント) をラジアンで返
す。値は [-pi, pi] の範囲の浮動小数点数 (|Float|)。
{expr1} と {expr2} は浮動小数点数 (|Float|) か数値 (|Number|)
でなければならない。
例:
-0.785398
2.356194
{|+float| 機能を有効にしてコンパイルしたときのみ有効}
*browse()*
browse({save}, {title}, {initdir}, {default})
ファイル選択ダイアログを起動。"has("browser")"が非零を返すとき
(幾つかのGUIバージョンに限定)だけ利用可能。
入力フィールドの意味は:
{save} 非零ならば書込み用ファイルの選択
{title} ダイアログのタイトル
{initdir} ダイアログの始まるディレクトリ
{default} ファイル名の省略値
ダイアログがキャンセルされるか、何かエラーがあるか、もしくはブ
ラウジングが不可能ならば、空文字列が戻ってくる。
*browsedir()*
browsedir({title}, {initdir})
ディレクトリ選択ダイアログを起動。"has("browse")"が非零を返す
とき(幾つかのGUIバージョンに限定)だけ利用可能。
ディレクトリ選択ダイアログがないシステムにおいてはファイル選択
ダイアログが使われる。その場合は、指定したいディレクトリの中の
ファイルを選択すること。
入力フィールドの意味は:
{title} ダイアログのタイトル
{initdir} ダイアログの始まるディレクトリ
ダイアログがキャンセルされるか、何かエラーがあるか、もしくはブ
ラウジングが不可能ならば、空文字列が戻ってくる。
*bufexists()*
bufexists({expr})
結果は数値で、{expr}と呼ばれるバッファが存在すれば非零となる。
{expr}が数値の場合、バッファ番号とみなされる。
{expr}が文字列の場合、バッファ名に正確にマッチしなければな
らない。名前として以下のものが許される:
- カレントディレクトリからの相対パス。
- フルパス。
- 'buftype'が"nofile"であるバッファの名前
- URL名。
バッファリストにないバッファも検索される。
Note |:buffers|の出力で、ヘルプファイルは短い名前でリストされ
ているが、bufexists()は長い名前でないと見つけることができない。
ある名前を bufexists() に与えて非零になったとしても、その名前
をコマンド |:buffer| に与える際には |expand()| を使って展開し
なければならない場合がある。特に MS-Windows の "c:\DOCUME~1"
という 8.3 名形式において。
代替ファイル名が存在するかを判定するには"bufexists(0)"を使う。
*buffer_exists()*
以前の名前: buffer_exists().
*bufloaded()*
bufloaded({expr})
戻り値は数値で、{expr}と呼ばれるバッファが存在しロード済み(
ウィンドウに表示されているか、隠されているかは問わない)ならば
結果は非零となる。引数{expr}は|bufexists()|と同じように扱われ
る。
*bufname()*
bufname({expr})
戻り値はバッファの名前。バッファ名はコマンド":ls"で表示される
ものと同様。
{expr}が数値ならば、その番号のバッファ名が返される。0は現在の
ウィンドウの代替バッファを意味する。{expr}が文字列ならば、バッ
ファ名に対してファイル名マッチング|file-pattern|を行なうパター
ンとなる。このマッチングは常に、'magic'をセットし'cpoptions'を
空にした状態で行なわれる。複数マッチしてしまった場合には空文字
列が返される。""や"%"は現在のバッファを意味し、"#"は代替バッファ
を意味する。
完全マッチのものが優先され、完全マッチがなければ、バッファ名の
先頭でのマッチ、末尾でのマッチ、中間でのマッチが探される。完全
マッチのみを探すには、パターン先頭に"^"を、末尾に"$"をつける。
まずバッファリストにあるバッファが探される。そこで1個だけマッ
チが見つかればそれを返す。次にバッファリストにないものが探され
る。
{expr}が文字列のときに、それをバッファ番号として使いたいなら
ば、0を足すことによって強制的に数値にすることができる:
バッファが存在しないか名前を持っていない場合には、空文字列が返
される。
*buffer_name()*
以前の名前: buffer_name().
*bufnr()*
bufnr({expr} [, {create}])
結果はバッファの番号。バッファ番号はコマンド":ls"で表示される
ものと同様。{expr}の使い方は前述のbufname()を参照。バッファが
存在しない場合-1が返される。ただし、{create}が与えられて0でな
いときは、バッファリストに載せない新しいバッファを作成しその番
号を返す。
bufnr("$")は最後のバッファを意味する:
結果は存在しているバッファのうちで、もっとも大きなバッファ番号
となる。 Note そのバッファ番号より小さいバッファ番号を持つ(ハ
ズの)バッファが、必ずしも総て存在するとは限らない。なぜなら
":bwipeout"がバッファを消すことができるからだ。バッファが存在
するかテストするにはbufexists()を使う。
*buffer_number()*
以前の名前: buffer_number().
*last_buffer_nr()*
bufnr("$")の以前の名前: last_buffer_nr().
*bufwinnr()*
bufwinnr({expr})
結果は数値で、バッファ{expr}に関連付けられた最初のウィンドウの
番号。{expr}の使い方は前述の|bufname()|を参照。バッファ{expr}
が存在しないか、ウィンドウが無い場合には-1を返す。例:
この番号は|CTRL-W_w|や":wincmd w"|:wincmd|で使える。
カレントタブページ内のウィンドウだけを探す。
*byte2line()*
byte2line({byte})
カレントバッファの先頭から{byte}番目の文字が、何行目に含まれる
かを返す。これにはカレントバッファの'fileformat'に依存した、改
行文字も含まれる。先頭の文字にはバイトカウント1が与えられる。
|line2byte()|と|go|と|:goto|も参照。
{|+byte_offset|機能付きでコンパイルされたときのみ有効}
byteidx({expr}, {nr}) *byteidx()*
文字列{expr}の{nr}番目の文字のバイトインデックスを返す。
最初の文字の{nr}は0であり、戻り値は0となる。この関数はマルチバ
イト文字が存在するときのみ有用であり、そうでなければこの関数が
返す値は{nr}に等しい。合成文字は別々の文字と数えられる。
例 :
は4文字目を表示する。次も同じことをする:
{expr}が{nr}文字以下の場合は-1を返す。
{expr}がちょうど{nr}文字の場合は文字列の長さ(バイト単位)を返す。
call({func}, {arglist} [, {dict}]) *call()* *E699*
リスト|List|{arglist}の要素を引数として関数{func}を呼ぶ。
{func}は|Funcref|でも関数の名前でもよい。
a:firstlineとa:lastlineにはカレント行が代入される。
呼び出した関数の戻り値を返す。
{dict}は"dict"属性つきの関数用で、これがローカル変数"self"に代
入される。|Dictionary-function|を参照。
ceil({expr}) *ceil()*
{expr} 以上となる最小の整数を浮動小数点数 |Float| で返す
(切り上げる)。
{expr} は |Float| か |Number| に評価されなければならない。
例:
2.0
-5.0
4.0
{|+float| 機能つきでコンパイルされたときのみ有効}
changenr() *changenr()*
最も最近の変更の番号を返す。|:undolist|で表示される番号と同じ
であり、|:undo|コマンドの引数として使うことができる。
変更を行った直後ではその変更の番号となる。redoを行った直後は
redoされた変更の番号となる。undoを行った直後はundoされた変更よ
り1小さい番号になる。
*char2nr()*
char2nr({expr})
{expr}の最初の文字のASCIIコードを返す。例:
現在の'encoding'の値が適用される。"utf-8"のときの例:
|nr2char()| はこの逆を行う。
cindent({lnum}) *cindent()*
'cindent'で使われるのと同じC言語用のインデント規則に従った場合
の{lnum}行目のインデント量を返す。
インデント量はスペースで数えられ、'tabstop'の値は関係ない。
{lnum}は|getline()|の場合と同様に扱われる。
{lnum}が無効な値のときや|+cindent|機能なしでコンパイルされてい
るときは-1を返す。
|C-indenting|を参照。
clearmatches() *clearmatches()*
|matchadd()| と コマンド |:match| により定義されたマッチをすべ
て消去する。
*col()*
col({expr})
戻り値は数値で、{expr}で与えられる位置の桁番号(バイトインデッ
クス)。有効な位置は:
. 現在の位置
$ カレント行の末尾(カレント行のバイト数+1を返す)
'x マークxの位置(マークが設定されていない場合0)
さらに {expr} は [lnum, col] という行番号と桁番号のリストで
あってもよい。col に "$" を指定して、ある行の最後の桁を取得す
るのにとても便利である。"lnum" か "col" が範囲外である場合は
0 を返す。
行番号を取得するには|line()|を使う。行番号と桁番号両方を取得す
るには|getpos()|を使う。
画面上の桁番号を取得するには|virtcol()|を使う。
Note 現在のファイルのマークしか使えないことに注意。
例:
先頭の桁は1になる。戻り値0はエラーを意味する。
大文字のマークは他のバッファを指しているかもしれない。
'virtualedit'が有効なとき、カーソルが行末を越えていると、桁番
号は行の長さより1大きい値を返す。インサートモードで桁番号を取
得するには次のマップが使える:
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|を参照。
例:
この例はそれほど役には立たないが、使い方を示している。Note 0が
挿入されてしまわないように空文字列を返していることに注意。
complete_add({expr}) *complete_add()*
候補のリストに{expr}を追加する。'completefunc'で指定された関数
の中でのみ使われる。
失敗したときは0を返す(空文字列かメモリ不足)。候補が追加された
ときは1を返し、その候補が既にリストに存在するときは2を返す。
{expr}の説明については|complete-functions|を参照。'omnifunc'が
返すリストと同じである。
complete_check() *complete_check()*
補完候補を探している間にキーがタイプされたかどうか確認する。補
完の検索に時間がかかる場合に使われる。候補の検索を中断しようと
しているときは0以外を返す。そうでないときは0を返す。
'completefunc'で指定された関数の中でのみ使われる。
*confirm()*
confirm({msg}, {choices} [, {default} [, {type}]])
confirm()はユーザに選択させるためのダイアログを提供する。戻り
値は選択した番号になる。最初の選択肢が1である。
Note: confirm()は、ダイアログサポートを有効にしてコンパイルし
た時にだけ動作する。|+dialog_con|と|+dialog_gui|を参照。
ダイアログには{msg}に加えて{choices}の選択肢が表示される。
{choices}が指定されない、または空の場合は選択肢"&OK"が表示され
る(使用している言語に翻訳される)。
{msg}は文字列で'\n'を改行として使用できる。幾つかのシステムで
は、長すぎる行は自動的に折り返される。
{choices}は文字列で、個々の選択肢は'\n'によって区切られる。
例:
'&'の後の文字は選択肢のショートカットキーになる。この場合
"Cancel"を選択するのに'c'をタイプすることができる。ショート
カットキーは最初の文字である必要は無い:
コンソールでは、デフォルトのショートカットキーとして、各選択肢
の最初の文字が使われる。
省略可能な引数{default}は<CR>キーを叩いた時に選択される選択肢
の番号を指定する。最初の選択肢をデフォルトにするならば1を使用
する。デフォルトを設定したくないのならば0を使用する。
{default}を省略した場合、0が使用される。
省略可能な引数{type}はダイアログの種類を指定する。これは GTK,
Mac, Motif, Win32 の GUI でアイコンを指定するのに使われる。
"Error", "Question", "Info", "Warning", "Generic"のうちどれか
一つを指定する。以上のうちの先頭の文字だけで指定できる。{type}
が省略された場合、"Generic"が使用される。
ユーザが<Esc>やCTRL-Cや、その他の割りこみキーでダイアログを中
断した場合、confirm()は0を返す。
例:
GUIのダイアログではボタンが使用される。ボタンの配置は
'guioptions'の'v'フラグに依存する。もしも'v'フラグが含まれてい
るのなら、ボタンは常に垂直に配置される。そうでなければ水平に配
置しようと試みられる。水平配置がうまくマッチしない場合は、垂直
配置が使われる。幾つかのシステムでは常に水平配置が使われる。
*copy()*
copy({expr}) {expr}のコピーを作る。数値と文字列の場合は、{expr}そのものとコ
ピーの間に違いはない。
{expr}がリスト|List|の場合は浅いコピーを作る。つまり元のリスト
を変更してもコピーは変更されず、逆も同じである。しかし要素は共
通で、片方の要素に対し変更を加えると、もう一方の要素も変更され
る。|deepcopy()|も参照。
cos({expr}) *cos()*
{expr} の余弦(コサイン)をラジアンで浮動小数点数 |Float| で返す。
{expr} は |Float| または |Number| に評価されなければならない。
例:
0.862319
-0.646043
{|+float| 機能つきでコンパイルされたときのみ有効}
cosh({expr}) *cosh()*
{expr} の双曲線余弦 (ハイパボリックコサイン) を返す。
値は [1, inf] の範囲の浮動小数点数 (|Float|)。
{expr} は浮動小数点数 (|Float|) か 数値 (|Number|) でなければ
ならない。
例:
1.127626
-1.127626
{|+float| 機能を有効にしてコンパイルしたときのみ有効}
count({comp}, {expr} [, {ic} [, {start}]]) *count()*
リスト|List|または辞書|Dictionary| {comp}の中に値{expr}が何回
現れるかを返す。
{start}が指定されたときはそのインデックスの要素から検索を開始
する。{start}は{comp}がリストの場合のみ使用できる。
{ic}が指定され、0でない場合は大文字・小文字は区別されない。
*cscope_connection()*
cscope_connection([{num} , {dbpath} [, {prepend}]])
|cscope|接続が存在するかどうか判定する。引数が1個も指定されな
かった場合、戻り値は以下のようになる:
0, cscopeが利用できない(コンパイル時に無効化されている)
またはcscope接続が存在しない場合
1, 1個以上のcscope接続が存在する場合
引数が与えられた場合は次のようになる。{num}は、接続の存在を確
認する際のマッチング方法を指定する。
{num} 存在確認の方法
----- ------------------------------
0 引数なしの場合と同じ (例: "cscope_connection()").
1 {prepend}を無視し、{dbpath}に部分マッチを行う。
2 {prepend}を無視し、{dbpath}に部分マッチを行う。
3 {prepend}を使用し、{dbpath}と{prepend}に部分マッチを行
う。
4 {prepend}を使用し、{dbpath}と{prepend}に完全マッチを行
う。
Note: 以上のどの場合も文字列の比較は大文字・小文字を区別する。
例: ":cs show"の表示が以下のようになったとする:
実行 戻り値
---------- ----------
cursor({lnum}, {col} [, {off}]) *cursor()*
cursor({list})
{lnum}行目の{col}桁目(バイトで数える)にカーソルを移動させる。
桁番号{col}は1から始まる。
引数が1個の場合は、{lnum}, {col}, {off}からなる、2個または3個
の要素を持つリスト|List|でなければならない。これは|getpos()|の
戻り値と似ているが、1個目の要素がない点が異なる。
この関数を呼んでもジャンプリストは変更されない。
{lnum}がバッファの行数よりも大きい場合は、最後の行へ移動する。
{lnum}が0の場合はカレント行に留まる。
{col}がその行のバイト数より大きい場合は、その行の最後の文字へ
移動する。
{col}が0の場合は、カレント桁に留まる。
'virtualedit'が有効のとき、{off}は文字の先頭からの画面上のオフ
セットを指定する。例えば、<Tab>の中の位置や最後の文字より後な
どへも移動できる。
カーソルを移動できたときは 0 を、できなかったときは-1 を返す。
deepcopy({expr}[, {noref}]) *deepcopy()* *E698*
{expr}のコピーを作る。数値と文字列の場合は、{expr}そのものとコ
ピーの間に違いはない。
{expr}がリスト|List|の場合は完全なコピーを作る。つまり元のリス
トを変更してもコピーは変更されず、逆も同じである。要素の1つが
リストであるときは、再帰的にコピーが作成される。よってコピーの
要素に変更を加えても元のリストの要素は変更を受けない。
{noref}が省略された、または0のとき、含まれているリストや辞書は
1度だけコピーされる。全ての参照はこのただ1つのコピーを指す。
{noref}が1の場合、リストや辞書は現れるたびに新しいコピーが作ら
れる。そのため循環参照があるとdeepcopy()は失敗する。
*E724*
ネストは100レベルまで可能である。それ以上参照を繰り返している
要素があると、{noref}が1の場合は失敗する。
|copy()|も参照。
*delete()*
delete({fname}) {fname}という名前のファイルを削除する。戻り値は数値で、削除に
成功したら0、失敗したら1が返る。
リスト|List|から要素を削除するには|remove()|を使う。
*did_filetype()*
did_filetype() autocommandが実行されFileTypeイベントが一度でも起こっていれ
ば、非零が返る。スクリプトのFileTypeイベントが、複数回呼び出さ
れるのを回避するのに使える。 |FileType|
他のファイルへ移動すると、このカウンタはリセットされる。よって
実際は、カレントバッファに対してFileTypeイベントが発生したかど
うかを判定する。他のバッファを開くオートコマンドの中でこの関数
を使って'filetype'を設定し、構文ファイルを読み込むために使える。
diff_filler({lnum}) *diff_filler()*
{lnum}行目より上にある削除行の数を返す。削除行とは、diffモード
で他方のウィンドウにテキストが挿入されていることを表す行のこと
である。削除行は表示はされているが、実際にはバッファに存在しな
い。
{lnum}は|getline()|と同様に扱われる。つまり"."はカレント行とな
り、"'m"はマークmを表す。
カレントウィンドウがdiffモードでないときは0を返す。
diff_hlID({lnum}, {col}) *diff_hlID()*
diffモードで{lnum}行{col}桁(バイト単位)の位置のハイライトIDを
返す。カレント行に変更がないときは0を返す。
{lnum}は|getline()|と同様に扱われる。つまり"."はカレント行とな
り、"'m"はマークmを表す。
先頭の桁の{col}は1となり、最初の行の{lnum}は1となる。
ハイライトIDは|synIDattr()|を使って構文情報を得るために使える。
empty({expr}) *empty()*
{expr}が空なら1を、そうでなければ0を返す。
リスト|List|または辞書|Dictionary|は要素を1個も持たないとき空
とみなされる。数値は値が0のとき空とみなされる。
長いリストに対しては長さを0と比較するよりこちらの方がずっと高
速である。
escape({string}, {chars}) *escape()*
{string}内に現れる{chars}の文字をバックスラッシュでエスケープ
する。例:
結果:
|shellescape()| も参照。
*eval()*
eval({string}) {string}を評価し、値を返す。|string()|の戻り値を元の値に戻すの
に非常に便利である。数値、浮動小数点数文字列、それらの複合に対
して動作する。実際に存在する関数への|Funcref|に対しても動作す
る。
eventhandler() *eventhandler()*
イベントハンドラの中では1を返す。つまり、ユーザの文字入力を待っ
ている間に、ファイルをドラッグ&ドロップするなど割り込みされた
ことを表す。このときは対話的なコマンドは使えない。イベントハン
ドラの中でないときは0を返す。
executable({expr}) *executable()*
{expr}という名前の実行可能ファイルが存在するかどうか判定する。
{expr}は引数を何もつけないプログラム名でなければならない。
executable()は$PATHと通常のプログラム検索ディレクトリを参照す
る。 *PATHEXT*
MS-DOSとMS-Windowsでは".exe"、".bat"などの拡張子は含めても含め
なくてもよい。省略された場合は$PATHEXTの拡張子を検索する。よっ
て"foo.exe"が存在しなければ"foo.exe.bat"が見つかることもありう
る。$PATHEXTが存在しなければ".exe;.com;.bat;.cmd"が使われる。
$PATHEXTにドットだけを含めると拡張子なしの名前を検索することが
できる。'shell'がUnixシェルのように思われるときは、{expr}の後
に拡張子をつけない名前も検索される。
MS-DOSとMS-Windowsではファイルが存在するかどうかだけを判定し、
それがディレクトリでないことや、それが本当に実行可能であるかど
うかは判定されない。
MS-WindowsではVimと同じディレクトリにある実行ファイルは必ず発
見できる。Vimがこのディレクトリを$PATHに加えるためである。
|win32-PATH|。
戻り値は数値:
1 存在する
0 存在しない
-1 このシステム上では実装されていない
*exists()*
exists({expr}) 結果は数値で、変数{expr}が存在すれば1となり、そうでなければ0と
なる。引数{expr}は文字列で次のうちいずれかである。
&option-name Vimオプション(存在するかだけを判定し、
本当に動作するかは判定しない)
+option-name 動作するVimオプション
$ENVNAME 環境変数(空文字列と比較することでも判
定できる)
*funcname 組み込み関数(|functions|参照)かユーザ
が定義した関数(|user-functions|参照)
varname 内部変数(|internal-variables|)
|curly-braces-names|, |Dictionary|の要
素、|List|の要素などに対しても動作する。
インデックスの評価で無効な式であるとエ
ラーメッセージが出る可能性があることに
注意。例:
0
E121: Undefined variable: xx
0
:cmdname exコマンド: 組み込みコマンド、ユーザ定
義コマンド、コマンド修飾子|:command|。
戻り値:
1 コマンド名の先頭に一致
2 コマンド名に完全一致
3 複数のユーザ定義コマンドに一致
コマンドが定義されているかどうかを判定
するには、必ず戻り値が2であるかを確認
すること。
:2match |:2match|のコマンド。
:3match |:3match|のコマンド。
#event このイベントに対するオートコマンド定義
#event#pattern このイベントとパターンに対するオートコ
マンド定義(パターンは文字そのままに解
釈され、オートコマンドのパターンと1文
字ずつ比較される)
#group オートコマンドグループが存在するか
#group#event このグループとイベントに対してオートコ
マンドが定義されているか
#group#event#pattern
このグループ、イベント、パターンに対す
るオートコマンド定義
##event このイベントに対するオートコマンドがサ
ポートされているか
ある機能がサポートされているか判定するには|has()|を使う。
例:
シンボルである&/$/*と名前の間には、空白文字があってはならな
い。
ある少数の場合では無視されるが、名前の後に余計な文字があっては
ならない。将来はもっと厳格になる可能性があるので、現在許される
からといって頼ってはならない。
正しい例:
正しくない例:
Note 引数は変数そのものではなく、文字列でなければならない。例
えば、次は動作しない:
これは変数"bufcount"の存在を判定するのではなく、bufcountの値を
渡し、それが存在するかどうか判定してしまう。
exp({expr}) *exp()*
{expr} の指数を返す。
値は [0, inf] の範囲の浮動小数点数 (|Float|)。
{expr} は浮動小数点数 (|Float|) か数値 (|Number|) でなければな
らない。
例:
7.389056
0.367879
{|+float| 機能を有効にしてコンパイルしたときのみ有効}
*expand()*
expand({expr} [, {flag}])
ワイルドカードと{expr}内の特殊なキーワードを展開する。戻り値は
文字列。
複数の候補があった場合、それらは文字<NL>で区切られる。[注意:
バージョン5.0では空白文字が用いられ、スペースを含むファイル名
について問題を引き起こしていた]
展開が失敗した場合、結果は空文字列となる。また存在しないファイ
ル名というのは、結果の文字列には含まれない。
{expr}が'%'か'#'か'<'で始まる場合には、展開は|cmdline-special|
のように、変換子を受け付け、それらに関連付けられた変換が施され
る。ここに簡単な概略を示す:
% 現在のファイル名
# 代替バッファのファイル名
#n n番の代替バッファのファイル名
<cfile> カーソルのしたのファイル名
<afile> autocmdのファイル名
<abuf> autocmdのバッファ名
<sfile> 取り込み(source)中のファイル名
<cword> カーソル下の単語(word)
<cWORD> カーソル下の単語(WORD)
<client> 最後に受け取ったメッセージの{clientid}
|server2client()|
変換子:
:p フルパス名を展開
:h ヘッド(ディレクトリ)
:t テイル(ファイル名だけ)
:r 拡張子が削除される
:e 拡張子だけ
例:
'%'や'#'や'<'で始まる文字列を展開する時には、それに続くテキス
トは無視されることに注意。従ってこれは正しくない:
こうすると良い:
"<cfile>"やそれらを展開する時には、戻り値が完全な展開をされな
い参照名であることにも注意が必要。もしも"<cfile>"が"~/.cshrc"
であった場合、"~/"を展開してホームディレクトリにするために、も
う一度expand()を呼び出す必要がある:
変数と変換子の間には空白文字があってはならない。関数
|fnamemodify()|が通常のファイル名の変換には使用可能である。
カレントバッファや代替バッファの名前が未定義のときに'%'や'#'を
使うと空文字列になる。"%:p"を名無しのバッファに使用した場合、
結果はカレントディレクトリに'/'が付加されたものになる。
'%'や'#'や'<'で始まらない{expr}は、コマンドラインのファイル名
と同じように展開される。オプションの{flag}が使用され、その値が
非ゼロでない時以外は'suffixes'と'wildignore'が使用される。存在
しないファイルの名前も結果の文字列に含まれる。"**"を使うとディ
レクトリツリーを検索できる。例えば、カレントディレクトリ以下に
ある全ての"README"を見つけるには次のようにする:
expand()は、シェルの持っている変数や環境変数を展開することがで
きる。しかしシェルを起動しなければならないので、遅くなる。
|expr-env-expand|を参照。展開された変数はファイル名のリストの
ように扱われる。環境変数を展開できないときはそのままになる。よっ
て":echo expand('$FOOBAR')"の結果は"$FOOBAR"となる。
存在するファイルを探すには|glob()|を参照。外部コマンドの「生
の」実行結果を扱うには|system()|を参照。
extend({expr1}, {expr2} [, {expr3}]) *extend()*
{expr1}と{expr2}は両方ともリスト|List|であるか、両方とも辞書
|Dictionaries|でなければならない。
両方ともリストであるなら、{expr2}を{expr1}に付け加える。
{expr3}が指定された場合は、{expr1}の第{expr3}番目の要素の前に
{expr2}の要素を挿入する。{expr3}が0のときは最初の要素の前に挿
入する。{expr3}がlen({expr1})に等しいときは末尾に{expr2}が付け
加えられる。
例:
{expr1} が {expr2} と同じリストである場合、コピーされる要素の
数はリストの元の長さと同じである。
例として {expr3} が 1 のとき、最初の要素の N 個の新しいコピー
が挿入される(ここで N はリストの元の長さ)。
リストに1個の要素を加えるには|add()|を使う。2つのリストを連結
して新しいリストを作るには演算子+を使う:
両方とも辞書である場合:
{expr2}の全要素を{expr1}に加える。
{expr1}と{expr2}で共通のキーがある場合は、{expr3}によって動作
が決まる:
{expr3} = "keep"の場合: {expr1}の値そのままにする
{expr3} = "force"の場合: use the value of {expr2}
{expr3} = "error"の場合: エラーメッセージを表示する *E737*
{expr3}が省略された場合は"force"と同じになる。
{expr2}が空でないならば{expr1}が変更される。必要ならば最初に
{expr1}のコピーを作ること。
{expr2}は変更されない。
{expr1}を返す。
feedkeys({string} [, {mode}]) *feedkeys()*
{string}中の各文字を、あたかもマッピングまたはユーザによってタ
イプされたかのように、処理キューに入れる。 これらの文字は先行
入力バッファの末尾に付け足される。そのためマッピングを展開して
いる途中であれば、これらの文字はマッピングを展開した後に来るこ
とになる。
この関数は、{string}中の文字が処理されるまでは待たない。
特殊なキーを{string}に含めるにはダブルクォートと"\..."記法を使
う(|expr-quote|を参照)。例えば、feedkeys("\<CR>")は<Enter>キー
の押下をシミュレートする。しかしfeedkeys('\<CR>')とすると、こ
の文字の通り5文字を挿入する。
{mode}が省略されたときは、挿入されたキーはマップ展開の対象にな
る。{mode}は以下の文字フラグを含む文字列:
'm' キーをマップ展開する。これが既定である。
'n' キーをマップ展開しない。
't' キーをタイプされたかのように扱う。そうでない場合は
マッピングから展開されたかのように扱われる。これは
undoや折り畳みの展開などで違いが現れる。
戻り値は常に0。
*filereadable()*
filereadable({file})
結果は数値で、{file}というファイルが存在し、読みこむことが可能
ならばTRUEとなる。ファイル{file}が存在しないかディレクトリだっ
た場合には、結果はFALSEとなる。引数{file}は文字列として使えれ
ばどのような表現でもよい。
ファイルが読み込み可能でなくてもよい場合には|glob()|を使う。
*file_readable()*
以前の名前: file_readable().
filewritable({file}) *filewritable()*
結果は数値で、{file}というファイルが存在し、書き込むことが可能
ならば1となる。ファイル{file}が存在しないか書き込み不可能であ
る場合には、結果は0となる。{file}がディレクトリであり、書き込
み可能な場合、結果は2となる。
filter({expr}, {string}) *filter()*
{expr}はリスト|List|または辞書|Dictionary|でなければならない。
{expr}の各要素に対して{string}を評価し、その結果が0ならばリス
トまたは辞書からその要素を削除する。{string}の内部では|v:val|
が現在の要素の値を保持している。
辞書の場合は|v:key|が現在の要素のキーを保持している。
例:
は要素"OLD"を削除する。
は8未満のキーを持つ要素を削除する。
は全要素を削除する。つまりリストまたは辞書をクリアする。
Note {string}は式を表す文字列である。バックスラッシュを二重に
しなくても済むように|literal-string|を使うとよいだろう。
この操作はその場で(in-place)行われる。リストや辞書を変更したく
ない場合は最初にコピーを作ること:
フィルタされたリストまたは辞書を返す。{string}を評価している最
中にエラーが発生した場合は、それ以降の要素の処理は行われない。
finddir({name}[, {path}[, {count}]]) *finddir()*
{path}から{name}という名前のディレクトリを探す。ディレクトリを
上方・下方のどちらにも再帰的に検索できる。{path}の記法について
は|file-searching|を参照。
最初に見つかったディレクトリのパスを返す。そのディレクトリがカ
レントディレクトリの下にある場合は相対パスを返す。そうでなけれ
ば絶対パスを返す。
{path}が省略されたとき、または空のときはオプション'path'の値が
使われる。
省略可能な引数{count}が指定されたときは、最初に見つかったディ
レクトリでなく、{count}番目に見つかったディレクトリを返す。
{count}が負の場合は、見つかったディレクトリ全てのリスト|List|
を返す。これはexコマンド|:find|によく似ている。
{|+file_in_path| 機能付きでコンパイルされたときのみ利用可能}
findfile({name}[, {path}[, {count}]]) *findfile()*
|finddir()|と同様だが、ディレクトリでなくファイルを検索する。
'suffixesadd'が適用される。
例:
この例は、カレントファイルがあるディレクトリから上方に
"tags.vim"を見つけるまで再帰的に検索する。
float2nr({expr}) *float2nr()*
{expr} の小数点以下を切り捨てて |Number| に変換する。
{expr} は |Float| または |Number| に評価されなければならない。
{expr} の値が |Number| の範囲外の場合、結果は 0x7fffffff また
は -0x7fffffff になる。NaN は -0x80000000 になる。
例:
3
-23
2147483647
-2147483647
0
{|+float| 機能つきでコンパイルされたときのみ有効}
floor({expr}) *floor()*
{expr} 以下の最大の整数を |Float| で返す(切り捨て)。
{expr} は |Float| または |Number| に評価されなければならな
い。
例:
1.0
-6.0
4.0
{|+float| 機能つきでコンパイルされたときのみ有効}
fmod({expr1}, {expr2}) *fmod()*
{expr1} / {expr2} の余りを返す (割り算が表現できなくても)。
{expr2} が非ゼロなら {expr1} - i * {expr2} の結果を返す (i は
返り値が {expr1} と同じ符号を持ちその絶対値が {expr2} よりも小
さくなるような値)。{expr2} がゼロならゼロが返る。返り値の型は
浮動小数点数 (|Float|)。
{expr1} と {expr2} は浮動小数点数 (|Float|) か数値 (|Number|)
でなければならない。
例:
0.13
-0.13
{|+float| 機能を有効にしてコンパイルしたときのみ有効}
fnameescape({string}) *fnameescape()*
コマンド引数のファイル名として使うために {string} をエスケープ
する。'%' や '|' など特別な意味を持つ全ての文字がバックスラッ
シュでエスケープされる。
特別な文字とは、ほとんどのシステムにおいて
" \t\n*?[{`$\\%#'\"|!<" である。ファイル名にバックスラッシュが
現れるシステムにおいては 'isfname' の値に依存する。
先頭の '+' と '>' もエスケープされる(|:edit| と |:write| の引
数では特別な意味を持つ)。{string} が "-" である場合もエスケー
プされる(|:cd| の引数では意味を持つ)。
例:
上記は次と同じ結果になる:
fnamemodify({fname}, {mods}) *fnamemodify()*
ファイル名{fname}を{mods}にしたがって変更する。{mods}はコマン
ドラインで使われるのと同様な文字列である。詳細は
|filename-modifiers|を参照。
例:
結果:
Note: {fname}の中の環境変数は展開されない。環境変数を展開させ
るには|expand()|を使うこと。
foldclosed({lnum}) *foldclosed()*
結果は数値。{lnum}行目が閉じた折り畳みの中にあるなら、その折り
畳みを構成する最初の行の行番号を返す。{lnum}行目が閉じた折り畳
みに入っていないなら-1を返す。
foldclosedend({lnum}) *foldclosedend()*
結果は数値。{lnum}行目が閉じた折り畳みの中にあるなら、その折り
畳みを構成する最後の行の行番号を返す。{lnum}行目が閉じた折り畳
みに入っていないなら-1を返す。
foldlevel({lnum}) *foldlevel()*
カレントバッファの{lnum}行目の折り畳みレベルを表す数値を返す。
折り畳みがネストしているときは一番下のレベルを返す。{lnum}行目
に折り畳みがまったくないときは0を返す。折り畳みが開いているか
閉じているかは関係ない。('foldexpr'の中で)折り畳みを更新してい
る最中に呼ぶと、まだ折り畳みを更新していなく、折り畳みレベルが
未知の行に対しては-1を返す。特別な場合として、普通は1行前のレ
ベルは取得できる。
*foldtext()*
foldtext() 閉じた折り畳みに表示する文字列を返す。これはオプション
'foldtext'のデフォルトの関数であり、'foldtext'を評価していると
きにだけ呼ぶようにすべきである。この関数は変数|v:foldstart|,
|v:foldend|, |v:folddashes|を使用する。
戻り値の文字列は次のようになる:
ダッシュ(-)の数は折り畳みレベルによって決まる。"45"はその折り
畳みに含まれている行数である。"abcdef"はその折り畳みの中の最初
の空行でない行のテキストである。行頭の空白と、"//"や/*"、
'foldmarker'と'commentstring'に設定されている文字列は削除され
る。
{|+folding|機能付きでコンパイルされたときのみ利用可能}
foldtextresult({lnum}) *foldtextresult()*
{lnum}行目の閉じた折り畳みに表示される文字列を返す。'foldtext'
を適切なコンテキストの中で評価する。{lnum}行目に閉じた折り畳み
がないときは空文字列を返す。
{lnum}は|getline()|のときと同様に扱われる。つまり"."はカレント
行、"'m"はマークmを表す。
折り畳まれたテキストをHTMLなどにエクスポートするときに有用。
{|+folding|機能付きでコンパイルされたときのみ利用可能}
*foreground()*
foreground() Vimのウィンドウを前面に移動する。この関数はクライアントからVim
サーバへ送ると便利である。|remote_send()|
Win32では自分自身のウィンドウを前面に持ってくることが必ずしも
許可されていないので、動作しないかもしれない。そのときは代わり
に|remote_foreground()|を使うこと。
{Win32, Athena, Motif, GTKいずれかのGUI版とWin32コンソール版で
のみ利用できる}
function({name}) *function()* *E700*
関数{name}を参照する|Funcref|の変数を返す。{name}はユーザ定義
関数でも組み込み関数でもよい。
garbagecollect([at_exit]) *garbagecollect()*
循環参照を持ち、使われていないリスト|List|と辞書|Dictionaries|
をクリーンアップする。これはメモリ不足に陥ったときや、
'updatetime'経過後ユーザのキー入力を待っているときに自動的に行
われるので、この関数を呼ぶ必要があることはほとんどない。
循環参照を持たない要素は、使われなくなったとき必ず解放される。
長時間実行されるスクリプトの中で循環参照を持つ非常に大きなリス
トや辞書を削除したときに有用である。
省略可能な引数 "at_exit" に 1 を指定すると、Vim を終了するとき
にもガベージコレクションが行われる。これはメモリリークを発見す
るのに役に立つ。
get({list}, {idx} [, {default}]) *get()*
リスト|List| {list}から{idx}番目の要素を取得する。この要素を取
得できないときは{default}を返す。{default}が省略されたときは0
を返す。
get({dict}, {key} [, {default}])
辞書|Dictionary| {dict}からキー{key}に関連づけられた値を取得す
る。この要素を取得できないときは{default}を返す。{default}が省
略されたときは0を返す。
*getbufline()*
getbufline({expr}, {lnum} [, {end}])
バッファ{expr}の{lnum}行目から{end}行目まで(両端含む)の行から
なるリスト|List|を返す。{end}が省略されたときは{lnum}行目だけ
からなるリストを返す。
{expr}の指定の仕方については|bufname()|を参照。
{lnum}と{end}では"$"でバッファの最後の行を表すことができる。そ
れ以外は数値でなければならない。
{lnum}が1より小さいときや、バッファの行数より大きいときは空リ
ストを返す。
{end}がバッファの行数より大きいときは、バッファの行数が設定さ
れたものとして扱う。{end}が{lnum}行目より前に設定された場合は
空リストを返す。
この関数は読み込まれているバッファに対してのみ動作する。既にア
ンロードされているバッファや存在しないバッファに対しては空リス
トを返す。
例:
getbufvar({expr}, {varname}) *getbufvar()*
バッファ{expr}のオプションの値やバッファローカル変数{varname}
の値を返す。Note "b:"をつけない変数名を指定すること。
{varname} が空文字列の場合、全てのバッファローカル変数からなる
辞書を返す。
グローバルオプション、バッファローカルオプションのどちらに対し
ても動作するが、グローバル変数、ウィンドウローカル変数、ウィン
ドウローカルオプションに対しては動作しない。
{expr}の指定の仕方については|bufname()|を参照。
バッファや変数が存在しないときは空文字列を返し、エラーメッセー
ジは表示されない。
例:
getchar([expr]) *getchar()*
ユーザまたは入力ストリームから1文字を取得する。
[expr]が省略されたときは1文字を取得できるまで待つ。
[expr]が0のときは1文字を取得できる場合のみ取得する。取得できな
ければ0を返す。
[expr]が1のときは1文字を取得できるか判定し、実際には取得しない。
取得できないときは0を返す。
{expr}が省略されたときや{expr}が0のときは、文字全体または特殊
キーを返す。それが8ビット文字なら戻り値は数値である。これを文
字列に戻すにはnr2char()を使う。8ビット文字でないならばエンコー
ドして文字列にして返す。
特殊キーとは0x80(10進数で128)で始まるバイト列である。これは
文字列"\<Key>"と同じ値である(例: "\<Left>")。戻り値は文字列で
あり、修飾キー(shift, contro, alt)は含まれない。
{expr}が1のときは最初のバイトだけを返す。1バイト文字の場合、こ
れはその文字そのものを表す数値である。これを文字列に変換するに
はnr2char()を使う。
ユーザがマウスをクリックしたときはマウスイベントを返す。クリッ
クした位置は|v:mouse_col|, |v:mouse_lnum|, |v:mouse_win|で得ら
れる。以下の例は、普通にマウスがクリックされたときと同じように
カーソルを移動させる。
この関数を呼んだときプロンプトは表示されない。文字入力を待って
いることをなんらかの方法でユーザがわかるようにしなければならな
いだろう。
入力された文字に対してマッピングは適用されない。
キーコードは置換される。つまりユーザが<Del>を押した場合、「生
の」文字シーケンスでなく<Del>キーに対応するコードが得られる。
例:
以下の例は大文字・小文字を区別しないように"f"を再定義する:
getcharmod() *getcharmod()*
最後にgetchar()などで得た文字に対する修飾キーの状態を表す数値
を返す。以下の値の和となる:
2 shift
4 control
8 alt (meta)
16 マウスダブルクリック
32 マウストリプルクリック
64 マウスクアドラプルクリック
128 Macintoshのみ: command
文字自身に含まれていない修飾キーのみ取得できる。つまり、
Shift-aは修飾キーなしの"A"となる。
getcmdline() *getcmdline()*
現在のコマンドラインの内容を取得する。コマンドラインを編集して
いるときのみ動作する。つまり|c_CTRL-\_e|または|c_CTRL-R_=|を使っ
ているときのみ有効。
例:
|getcmdtype()|, |getcmdpos()|, |setcmdpos()|も参照。
getcmdpos() *getcmdpos()*
コマンドラインにおけるカーソル位置をバイト単位で取得する。最初
の桁は1となる。コマンドラインを編集しているときのみ動作する。
つまり|c_CTRL-\_e|または|c_CTRL-R_=|を使っているときのみ有効。
|getcmdtype()|, |setcmdpos()|, |getcmdline()|も参照。
getcmdtype() *getcmdtype()*
現在のコマンドラインの種類を返す。戻り値は次のいずれか:
: 通常のexコマンド
> デバッグモードコマンド |debug-mode|
/ 前方検索コマンド
? 後方検索コマンド
@ |input()| コマンド
- |:insert| または |:append| コマンド
コマンドラインを編集しているときのみ動作する。つまり
|c_CTRL-\_e|または|c_CTRL-R_=|を使っているときのみ有効。そうで
ないときは空文字列を返す。
|getcmdpos()|, |setcmdpos()|, |getcmdline()|も参照。
*getcwd()*
getcwd() 結果は文字列で、現在のディレクトリ名。
getfsize({fname}) *getfsize()*
結果は数値で、{fname}で指定されるファイルのサイズをバイト単位
で返す。
{fname}がディレクトリのときは0を返す。
ファイル{fname}が見つからないときは-1を返す。
{fname} のサイズが |Number| の範囲外の場合は -2 を返す。
getfontname([{name}]) *getfontname()*
引数なしで使われた場合には現在の通常のフォント名を返す。ハイラ
イトグループNormalに対して使われるものと同様|hl-Normal|。
引数が指定された場合には{name}が有効なフォント名であるか判定さ
れる。有効でないときは空文字列を返す。
有効なときは実際のフォント名を返す。またはGUIが実際の名前の取
得をサポートしていないときは{name}をそのまま返す。
GUIモードで実行しているときのみ動作する。よってvimrcやgvimrcの
中では使えない。GUIモードが起動した直後にこの関数を呼ぶには、
オートコマンド|GUIEnter|を使うこと。
Note GTK 2のGUIはどんなフォント名でも受け付けてしまうため、名
前が有効であるかのチェックは動作しない。
getfperm({fname}) *getfperm()*
{fname}で指定されたファイルの読み込み、書き込み、実行の許可属
性を示す文字列を返す。
{fname}が存在しない、またはそのディレクトリが読み込み不可能な
ときは空文字列を返す。
戻り値は"rwxrwxrwx"の形で、"rwx"フラグの各グループは順にファイ
ルの所有者、ファイルが所属するグループ、その他のユーザを表す。
許可属性が与えられていないフラグは"-"で置き換えられる。例:
この例は、(セキュリティの観点から望ましい設定がされているなら
ば)"rw-r--r--"あるいは"rw-------"と表示する。
*getftime()*
getftime({fname})
結果は{fname}で与えられたファイルの、最終更新時間を示す数値。
1970年1月1日からの経過時間(秒)で、strftime()に渡すことができる
だろう。|localtime()|と|strftime()|も参照。
ファイル{fname}が見つからなかった場合には-1を返す。
getftype({fname}) *getftype()*
{fname}で指定されたファイルの種別を示す文字列を返す。
{fname}が存在しないときは空文字列を返す。
ファイルの種別とそれらの結果の表を以下に示す:
通常ファイル "file"
ディレクトリ "dir"
シンボリックリンク "link"
ブロックデバイス "bdev"
キャラクタデバイス "cdev"
ソケット "socket"
FIFO &nbs