*eval.txt* For Vim バージョン 8.1. Last change: 2019 Nov 17 VIMリファレンスマニュアル by Bram Moolenaar
Vim script
Vim script の利用についてはユーザーマニュアルの 41 章 |usr_41.txt| でも解說されてゐる。
Note:
Vim script はコンパイル時に無效化できる。もしさうなつてゐるとこのドキュメントに書かれてゐる事は有效ではない。|+eval| と |no-eval-feature| を參照。
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| に記錄されてゐます。
變數には 10 種類の型があります:
32 ビットまたは 64 ビットの符號有整數。|expr-number|
64 ビット數値は |+num64| 機能つきでコンパイルされたときのみ有效。
例:
-123 0x10 0177 0b1011
浮動小數點數。|floating-point-format|
{|+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|。
例:
function("strlen")
辭書や引數とバインドすることができ、そのときは部分適用 (Partial) のやうに働く。
例:
function("Callback", [arg], myDict)
ジョブに使はれる。|job_start()| を參照。
チャネルに使はれる。|ch_open()| を參照。
バイナリラージオブジェクト。任意のバイトシーケンスを格納する。詳細は |Blob| を參照。
例: 0zFF00ED015DAF 0z は空の Blob である。
數値と文字列は文脈に應じて相互に變換される。
數値から文字列への變換は數字のASCII表現によつて行はれる。例:
數値 123 --> 文字列 "123" 數値 0 --> 文字列 "0" 數値 -1 --> 文字列 "-1"
文字列から數値への變換は最初の數字を用ゐて數値に變換します。16 進表記 "0xf9" や 8 進表記 "017"、2 進數表記の "0b10" も認識されます。(NOTE: |scriptversion-4| を使用する場合、8 進數は認識されません)。文字列が數字で始まらない場合結果は 0 となります。 例:
文字列 "456" --> 數値 456 文字列 "6bar" --> 數値 6 文字列 "foo" --> 數値 0 文字列 "0xf1" --> 數値 241 文字列 "0100" --> 數値 64 文字列 "0b101" --> 數値 5 文字列 "-8" --> 數値 -8 文字列 "+8" --> 數値 0
文字列を强制的に數値に變換するには 0 を足す:
:echo "0100" + 0 64
先頭の 0 によつて 8 進數とみなされるのを防いだり、異なる基數を使ふには |str2nr()| を使ふ。
ブール (眞理値) 演算には數値が使はれる。0 は僞を意味し、非 0 は眞を表す。また、|v:false| と |v:true| を使ふこともできる。函數から眞が返されたときは數値の 1 であり、僞が返されたときは數値の 0 である。
Note:
次のコマンドをみると:if "foo" :" 實行されない"foo" は 0 に變換され、それは僞を意味する。もし文字列がゼロでない數値から始まる場合は眞を意味する:
:if "8foo" :" 實行される文字列が空ではないか調べるためには empty() を使用して次のやうにする。
:if !empty("foo")
函數の引數は、|TRUE| とは少し異なる場合がある: 引數が存在し、それが非ゼロの Number, |v:true| または空でない String に評價される場合、値は TRUE と見なされる。
Note:
: " " と "0" も空文字列ではないので、TRUE と見なされることに注意すること。List, Dictionary または Float は數値または文字列ではないため、FALSE と評價される。
リスト |List|, 辭書 |Dictionary|, |Funcref|, ジョブ |Job|, チャネル |Channel| および |Blob| は自動的に變換されない。
數値と浮動小數點數をまぜると浮動小數點數になる。それ以外には浮動小數點數への自動的な變換は存在しない。文字列から浮動小數點數へは str2float() を使ひ、浮動小數點數から文字列へは printf() を、浮動小數點數から數値へは float2nr() を使ふ。
浮動小數點數が豫期されてゐるところでは數値も使用可能だが、それ以外は使用できない。
變數の型を變更しようとしてもエラーは發生しない。
函數への參照は、函數 |function()|、函數 |funcref()| またはラムダ式 |expr-lambda| を使ふことで得られる。函數への參照は、式の中で函數名が要求される場所で使ふと參照先の函數を呼び出す。例:
:let Fn = function("MyFunc") :echo Fn()
函數參照の變數名は、大文字、"s:", "w:", "t:", "b:" のいづれかで始めなければならない。"g:" も使へるが、あとに續く名前は大文字で始めなければならない。函數參照と參照先の函數の名前を同じにすることはできない。
函數を定義して、それへの參照を直接辭書に入れるための特別な形式がある。例:
:function dict.init() dict : let self.val = 0 :endfunction
この辭書のキーは小文字で始めなければならない。實際の函數名はここでは使はれない。|numbered-function| も參照。
|:call| コマンドでも函數參照を使ふことができる:
:call Fn() :call dict.init()
參照先の函數名は |string()| で得られる。
:let func = string(Fn)
|call()| を使ふと、リスト型の變數を引數として函數參照を呼び出すことができる:
:let r = call(Fn, mylist)
函數參照は、辭書および/もしくは引數とバインドすることができる。これは部分適用 (Partial) とも呼ばれる。これは、辭書および/もしくは引數を function() または funcref() に渡すことで作成される。その函數を呼び出すと、その辭書および/もしくは引數がその函數に渡される。例:
let Cb = function('Callback', ['foo'], myDict) call Cb('bar')
これは、函數を以下のやうにして呼び出す:
call myDict.Callback('foo', 'bar')
これは函數を何かに渡す場合、例へば |ch_open()| の引數とする場合などに非常に有用である。
Note:
函數の辭書へのバインドは、その函數が辭書のメンバーであるときにも發生することに注意:let myDict.myFunction = MyFunction call myDict.myFunction()ここで、MyFunction() は myDict を "self" として受け取る。これは、"myFunction" メンバーがアクセスされたときに起こる。"myFunction" を別の辭書 otherDict に代入して呼び出すと、それは otherDict にバインドされる:
let otherDict.myFunction = myDict.myFunction call otherDict.myFunction()今度は、"self" は "otherDict" になる。しかし、辭書を明示的にバインドしたときにはこれは起こらない:
let myDict.myFunction = function(MyFunction, myDict) let otherDict.myFunction = myDict.myFunction call otherDict.myFunction()ここでは、"self" は "myDict" である。なぜなら明示的にバインドされてゐるからである。
リストとは順序を保つ要素の列である。要素はどんな型でもよい。要素へはインデックス番號を使つてアクセスする。列の任意の位置に要素を追加したり削除することができる。
リストを作るには、[] の中にコンマで區切つて要素を書く。例:
:let mylist = [1, two, 3, "four"] :let emptylist = []
要素はどんな式でもよい。要素としてリストを指定すると、リストのリストができる:
:let nestlist = [[11, 12], [21, 22], [31, 32]]
最後の要素の後に餘分なコンマがあると無視される。
リストの要素にアクセスするには、リスト名の後に[]を書き、その中にインデックスを書く。インデックスは 0 基點 (つまり最初の要素のインデックスは 0) である。
:let item = mylist[0] " 最初の要素 (1) を取得 :let item = mylist[2] " 3 番目の要素 (3) を取得
取得した要素がリストならば、さらに續けてインデックスを書くことができる:
:let item = nestlist[0][1] " 最初のリストの 2 番目の要素 (12) を取得
負のインデックスを指定すると、リストの末尾から數へられる。インデックス -1 は最後の要素を示し、-2 は最後から 2 番目を指す
:let last = mylist[-1] " 最後の要素 ("four") を取得
無效なインデックスによるエラーを囘避するには函數 |get()| を使ふ。するとインデックスが無效な場合は、0 かまたは自分で指定した既定値が返る:
:echo get(mylist, idx) :echo get(mylist, idx, "NONE")
2 つのリストを連結するには演算子 "+" を使ふ:
:let longlist = mylist + [5, 6] :let mylist += [7, 8]
1 個の要素を先頭または末尾に付け加へるには、[] で圍んでリストにして連結する。リストの特定の要素を變更するには後述の |list-modification| を參照。
リストの一部分を取り出すには、[] の中に始點と終點のインデックスを書き、コロンで區切る:
:let shortlist = mylist[2:-1] " リスト [3, "four"] を得る
始點のインデックスを省略すると 0 となる。終點のインデックスを省略すると -1 となる。
:let endlist = mylist[2:] " 2 番目から最後まで: [3, "four"] :let shortlist = mylist[2:2] " 1 個の要素からなるリスト: [3] :let otherlist = mylist[:] " リストのコピーを作る
終點のインデックスが始點のインデックスよりも前になつてしまつた場合は空リストとなる。エラーメッセージは表示されない。
終點のインデックスがリストの長さより大きい場合は、長さ -1 を指定したときと同じになる:
:let mylist = [0, 1, 2, 3] :echo mylist[2:8] " 結果: [2, 3]
Note:
mylist[s:e] と書くと變數 "s:e" をインデックスとして使つたと解釋される。":" の前に 1 文字の變數を使ふときは十分注意すること。必要ならこのやうにスペースを入れるとよい: mylist[s : e].
變數 "aa" がリストであり、それを別の變數 "bb" に代入したとすると、兩方とも同じ變數を參照するやうになる。よつてリスト "aa" を變更すると "bb" も變更される:
:let aa = [1, 2, 3] :let bb = aa :call add(aa, 4) :echo bb [1, 2, 3, 4]
リストのコピーを作るには函數 |copy()| を使ふ。前述の通り [:] を使つてもできる。これは淺いコピーである。つまりリストの要素であるリストに變更を加へると、コピーされたリスト內の同じ要素も變更される:
:let aa = [[1, 'a'], 2, 3] :let bb = copy(aa) :call add(aa, 4) :let aa[0][1] = 'aaa' :echo aa [[1, aaa], 2, 3, 4] :echo bb [[1, aaa], 2, 3]
完全に獨立したコピーを作るには |deepcopy()| を使ふ。これは再歸的にリストの要素のコピーを作る。ただし深さは 100 レベルまでである。
2 つの變數が同じリストを指してゐるかは演算子 "is" で判定できる。"isnot" はその逆である。一方、"==" は 2 つのリストが同じ値を持つてゐるかを判定する。
:let alist = [1, 2, 3] :let blist = [1, 2, 3] :echo alist is blist 0 :echo alist == blist 1
Note:
リストの比較について注意: 2 つのリストは、同じ長さを持ち、全要素が "==" の意味で等しいとき、等しいとみなされる。ただ、1 つ例外がある: 數値と文字列を比較するとそれらは異なるとみなされる。變數に對して "==" で比較したときに行はれるやうな自動的な型變換は行はれない。例:echo 4 == "4" 1 echo [4] == ["4"] 0つまり、リストの比較は數値や文字列の比較よりも嚴格である。單純な値もリストに入れることによりこの方法で比較することができる:
:let a = 5 :let b = "5" :echo a == b 1 :echo [a] == [b] 0
リストの要素を個々の變數としてアンパックするには、[] の中に變數を書く:
:let [var1, var2] = mylist
變數の個數とリストの要素數が一致しないときはエラーになる。リストにある餘分な要素をまとめて受け取るには、";" と受け取る變數名を書いておく:
:let [var1, var2; rest] = mylist
上の例は次とほぼ同じである:
:let var1 = mylist[0] :let var2 = mylist[1] :let rest = mylist[2:]
要素が 2 つしかないときでもエラーにはならない。"rest" は空リストになる。
リストの中の特定の要素を變更するには次のやうに |:let| を使ふ:
:let list[4] = "four" :let listlist[0][3] = item
始點と終點を指定してリストの一部分を變更することができる。代入する値は、少なくとも削除する範圍の要素數と同じ數だけ必要である:
:let list[3:5] = [3, 4, 5]
リストに要素を追加したり削除するには函數を使ふ。いくつか例を示す:
:call insert(list, 'a') " 先頭に要素 'a' を插入する :call insert(list, 'a', 3) " 要素 'a' を list[3] の前に插入する :call add(list, "new") " 文字列の要素を最後に追加する :call add(list, [1, 2]) " 1 個の要素としてリストを追加する :call extend(list, [1, 2]) " 2 個の要素からなるリストを連結する :let i = remove(list, 3) " 要素 3 を削除する :unlet list[3] " 同上 :let l = remove(list, 3, -1) " 要素 3 から最後までを削除する :unlet list[3 : ] " 同上 :call filter(list, 'v:val !~ "x"') " 要素 'x' を削除
要素の順番を變更する:
:call sort(list) " リストをアルファベット順にソート :call reverse(list) " 要素の順序を反轉させる :call uniq(sort(list)) " ソートして重複を削除する
|:for| ループは、1 つの變數に對してリストの各要素を順番に代入し、コマンドを實行していく。例:
:for item in mylist : call Doit(item) :endfor
上の例は次と同じ:
:let index = 0 :while index < len(mylist) : let item = mylist[index] : :call Doit(item) : let index = index + 1 :endwhile
やりたいことがリストの各要素を變更するだけなら、for ループを使ふより函數 |map()| を使つた方がよりシンプルになる。
|:let| コマンドと同じやうに、|:for| は變數のリストをループ變數にすることができる。この場合、引數はリストのリストでなければならない。
:for [lnum, col] in [[1, 3], [2, 8], [3, 0]] : call Doit(lnum, col) :endfor
これはリストの各要素に對して |:let| コマンドを實行するかのやうに實行される。またこの場合も引數の型は全て同じでないとエラーになる。
引數の殘りを 1 個のリスト變數に代入することもできる:
:for [i, j; rest] in listlist : call Doit(i, j) : if !empty(rest) : echo "remainder: " . string(rest) : endif :endfor
以下はリスト操作に使へる函數である:
:let r = call(funcname, list) " 引數リストをつけて函數を呼び出す :if empty(list) " リストが空かどうか判定する :let l = len(list) " リストの要素數 :let big = max(list) " リスト中の最大値 :let small = min(list) " リスト中の最小値 :let xs = count(list, 'x') " 'x' の出現回數を數へる :let i = index(list, 'x') " 最初に 'x' が現れる位置のインデックス :let lines = getline(1, 10) " バッファから10行を取得 :call append('$', lines) " バッファに行を追加する :let list = split("a b c") " 文字列を分割してリストにする :let string = join(list, ', ') " リストの要素を連結して文字列にする :let s = string(list) " リストの文字列表現 :call map(list, '">> " . v:val') " 各要素の前に ">> " をつける
機能を組み合はせると、處理を單純に記述できることを覺えておくとよい。例へば、リスト中の全ての數値の和を求める例:
:exe 'let sum = ' . join(nrlist, '+')
辭書とは聯想排列である。各要素はキーと値を持つ。要素はキーによつて特定できる。要素は特に順序を持たずに保持される。
辭書を作るには、{} の中にコンマで區切つて要素を書く。各要素のキーと値はコロンで區切る。それぞれのキーは1度しか現れてはならない。例:
:let mydict = {1: 'one', 2: 'two', 3: 'three'} :let emptydict = {}
キーは必ず文字列である。數値を使ふこともできるが、自動的に文字列に變換される。よつて文字列 ’4’ のキーと數値4のキーは同一の要素を參照する。
Note:
文字列 ’04’ と數値 04 は異なることに注意。なぜなら數値 04 は文字列 ’4’ に變換されるからである。空文字列もキーとして使用できる。
すべてのキーについてクォートを付けなければいけないことを囘避するためには #{} を使ふことができます。これは ASCII 文字、digit、’-’ と ’_’ のみからなるキーについては {譯注: キーにクォートを付けなければならないルールを} 要求されません。
例:
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
また、この書き方で既存の辭書に要素を追加できる。この點はリストと異なる。
キー名がアルファベット、數字、アンダースコアだけからなる場合は、以下の形式が使へる |expr-entry|:
:let val = mydict.one :let mydict.four = 4
要素はリストや辭書を含むどんな型でもよいため、インデックス參照とキー參照を續けて書くことができる:
:echo dict.key[idx].key
辭書の全要素に對してループを行ひたい場合がある。そのためには辭書をリストに變換し、そのリストに對して |:for| ループを行ふ。
多くの場合はキーに對してループを行ふ。これには函數 |keys()| を使ふ:
:for key in keys(mydict) : echo key . ': ' . mydict[key] :endfor
このキーのリストはソートされてゐない。ソートさせるには函數 |sort()| を使ふ:
:for key in sort(keys(mydict))
値に對してループを行ふには函數 |values()| を使ふ:
:for v in values(mydict) : echo "value: " . v :endfor
キーと値兩方を得るには函數 |items()| を使ふ。この函數は、キーと値の 2 個の要素からなるリストのリストを返す:
:for [key, value] in items(mydict) : echo key . ': ' . value :endfor
辭書のコピーを作るにはリストと同樣に |copy()| と |deepcopy()| を使ふ必要がある。さうでなく代入を行ふと同一の辭書を參照するやうになる:
:let onedict = {'a': 1, 'b': 2} :let adict = onedict :let adict['a'] = 11 :echo onedict['a'] 11
2 つの辭書は、全てのキー・値のペアが等しいとき等しいとみなされる。より詳しくは |list-identity| を參照。
辭書の要素を變更したり、新しい要素を追加するには |:let| を使ふ:
:let dict[4] = "four" :let dict['one'] = item
辭書から要素を取り除くには |remove()| か |:unlet| を使ふ。以下のやうに辭書からキー "aaa" を取り除くには 3 つの方法がある:
:let i = remove(dict, 'aaa') :unlet dict.aaa :unlet dict['aaa']
2 つの辭書を倂合させるには |extend()| を使ふ:
:call extend(adict, bdict)
上のコマンドは bdict の全ての要素を adict に追加する。キーが重複した要素は bdict の要素により上書きされる。この動作は3番目の引數により變更できる。
Note:
辭書の要素閒に順序は定まつてゐない。そのため ":echo adict
" としたとき、もともと adict にあつた要素が先に、bdict から追加された要素が後に表示されると考へてはならない。
辭書から條件を指定して要素を取り除くには |filter()| が使へる:
:call filter(dict, 'v:val =~ "x"')
このコマンドは "dict" から ’x’ にマッチしない要素を全て取り除く。
函數が "dict" 屬性つきで定義されると、特殊な方法で呼び出すことができる。例:
:function Mylen() dict : return len(self.data) :endfunction :let mydict = {'data': [0, 1, 2, 3], 'len': function("Mylen")} :echo mydict.len()
これはオブジェクト指向プログラミングのメソッドに似てゐる。この辭書の要素は |Funcref| である。暗默に定義されるローカル變數 "self" は、この函數を呼び出した辭書を參照してゐる。
"dict" 屬性をつけないで Funcref を辭書に入れることもできる。しかしその場合、變數 "self" は定義されない。
函數に名前をつける必要をなくすために、函數を定義して直接辭書に代入することができる:
:let mydict = {'data': [0, 1, 2, 3]} :function mydict.len() : return len(self.data) :endfunction :echo mydict.len()
かうすると函數に番號がふられ、dict.len がこの函數を參照する |Funcref| となる。この函數は |Funcref| を通してのみ呼び出せる。參照してゐる |Funcref| がなくなると、この函數は自動的に削除される。
番號付き函數には "dict" 屬性を付ける必要はない。
番號付き函數でエラーが發生したときは、あるトリックを使ふことで發生源を確認できる。例へば 42 といふ函數なら次のやうにする:
:function {42}
以下は辭書操作に使へる函數である:
: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') " 各要素の前に ">> " をつける
Blob は、バイナリオブジェクトである。例へば、ファイルから畫像を讀んでチャネルを通し送信することなどに使へる。
Blob は、ほとんどの場合、數値の |List| のやうに振る舞ふ。數値は、0 から 255 の 8ビットの値を持つ。
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 の後ろに角括弧でインデックスを入れることによつてアクセスすることができる。インデックスは 0 から始まるため、最初のバイトのインデックスは 0 になる。
:let myblob = 0z00112233 :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)
|:for| ループは、Blob の各バイトに對してコマンドを實行する。ループ變數は Blob の各バイトに設定される。例:
:for byte in 0z112233 : call Doit(byte) :endfor
これは、0x11, 0x22 および 0x33 で Doit() を呼び出す。
2 つの Blob は "+" 演算子で連結できる:
:let longblob = myblob + 0z4455 :let myblob += 0z6677
Blob の決まつた場所を變更するには、下記の |blob-modification| を參照。
Blob の一部は、角括弧內のコロンで區切られた最初と最後のインデックスを指定することによつて取得できる:
:let myblob = 0z00112233 :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 のコピーを作成
最初のインデックスが Blob の最後のバイトを超えてゐる場合、または 2 番目のインデックスが最初のインデックスより前にある場合、結果は空の Blob になる。エラーメッセージはない。
2 番目のインデックスがリストの長さ以上の場合、長さから 1 を引いたものが使用される:
:echo myblob[2:8] " 結果: 0z2233
Blob の特定のバイトを變更するには |:let| を使用する:
:let blob[4] = 0x44
インデックスが Blob の終端を 1 つ超える場合は、それが追加される。それより上のインデックスはエラーである。
バイトシーケンスを變更するには、[:] 表記が使用できる:
let blob[1:3] = 0z445566
置き換へられたバイトの長さは、提供された値と丁度同じでなければならない。
Blob の一部を變更するには、變更する最初と最後のバイトを指定する。値の範圍內のバイト數は同じでなければならない:
:let blob[3:5] = 0z334455
函數 |add()|, |remove()| および |insert()| も使用できる。
Blob は等しいかどうか比較することができる:
if blob == 0z001122
または、同一性の等しさのために:
if blob is otherblob
變數 "aa" が Blob で、別の變數 "bb" に代入すると、兩方の變數は同じ Blob を參照する。そして、"is" 演算子は true を返す。
[:] または |copy()| を使用してコピーを作成する場合、値は同じだが、同一性は異なる:
:let blob = 0z112233 :let blob2 = blob :echo blob == blob2 1 :echo blob is blob2 1 :let blob3 = blob[:] :echo blob == blob3 1 :echo blob is blob3 0
Blob のコピーを作成するには、|copy()| 函數を使用する。[:] を使つても上で說明したやうに動作する。
變數や式の結果の型を知りたいのならば、函數 |type()| を使ふ。
オプション ’viminfo’ にフラグ ’!’ が含まれるならば、大文字で始まり小文字を含まない名前のグローバル變數は、viminfo ファイル |viminfo-file| に格納される。
オプション ’sessionoptions’ が "global" を含むなら、大文字で始まり少なくとも一文字以上の小文字を含む名前のグローバル變數は、session ファイル |session-file| に格納される。
變數名 | 何處に保存されるか |
---|---|
my_var_6 | されない |
My_Var_6 | sessionファイル |
MY_VAR_6 | viminfoファイル |
波括弧を使つて變數名を構成できる。詳細は |curly-braces-names| を參照。
式文法一覽、優先順位の低いものから高い順に:
|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] | 文字列のバイト、またはリスト |List| の要素 | |
expr8[expr1 : expr1] | 文字列の部分文字列、またはリスト |List| の部分リスト | |
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"
1 つのレベルにある全ての式は左から右に解釋される。
expr2 ? expr1 : expr1 |
’?’ より前の式は數値として評價される。その結果が |TRUE| であつた場合、’?’ と ’:’ に挾まれた式の値がこの式全體の値となり、さうでなかつた場合は ’:’ 以降の式の値が全體の値となる。 例:
:echo lnum == 1 ? "先頭" : lnum
始めの式が "expr2" であるから、そこに別の ?: を含むことはできない。殘り 2 つの式については以下のやうに再歸的な ?: の利用が許される。 例:
:echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum
讀み易くするために、行繼續 |line-continuation| を利用することが推奬される:
:echo lnum == 1 :\ ? "top" :\ : lnum == 1000 :\ ? "last" :\ : lnum
’:’ の前には必ずスペースを入れること。さうでないと "a:1" のやうな變數の使用と閒違へてしまふ可能性がある。
expr3 || expr3 .. | 論理和 |
expr4 && expr4 .. | 論理積 |
演算子 "||" と "&&" は左右に 1 つずつ引數を取る。引數は數値に變換される。結果は:
入力 | 出力 | ||
---|---|---|---|
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
これは a が |TRUE| であるため、變數bが宣言されてゐなくても有效であり、結果は絕對に |TRUE| である。次のも同樣に:
echo exists("b") && b == "yes"
これも b が宣言されてゐるゐないにかかはらず有效である。後半の項は b が定義されてゐる時にだけ評價される。
expr5 {cmp} expr5 |
2 つの式 expr5 を比較し、結果が僞なら 0 を、眞なら 1 を返す。
’ignorecase’ 次第 | 大小文字考慮 | 大小文字無視 | |
---|---|---|---|
等しい | == | ==# | ==? |
等しくない | != | !=# | !=? |
より大きい | > | ># | >? |
より大きいか等しい | >= | >=# | >=? |
より小さい | < | <# | <? |
より小さいか等しい | <= | <=# | <=? |
正規表現マッチ | =~ | =~# | =~? |
正規表現非マッチ | !~ | !~# | !~? |
同一のインスタンス | is | is# | is? |
異なるインスタンス | isnot | isnot# | isnot? |
例:
"abc" ==# "Abc" | 0 と評價される |
"abc" ==? "Abc" | 1 と評價される |
"abc" == "Abc" | ’ignorecase’ が設定されてゐれば 1 と、でなければ 0 と評價 |
リスト |List| はリストとだけ比較可能で、== 系, != 系, is 系, isnot 系のみ利用できる。これらはそれぞれのリストの値を再歸的に比較する。大文字小文字無視にすると要素を比較するときに大文字小文字を無視する。
辭書 |Dictionary| は辭書とだけ比較可能で、== 系, != 系, is 系, isnot 系のみ利用できる。これらは辭書のキー/値を再歸的に比較する。大文字小文字無視にすると要素を比較するときに大文字小文字を無視する。
|Funcref| は Funcref とだけ比較可能で、== 系, != 系, is 系, isnot 系のみ利用できる。大文字小文字は常に區別される。引數や辭書が (部分適用に) バインドされてゐるかどうかも重要である。辭書も同値 (あるいは "is" の場合は同一) でなければならず、引數も同値 (あるいは同一) でなければならない。
函數參照が同じ函數を指してゐるのかを、バインドされた辭書や引數を無視して比較したい場合は、|get()| を使用して函數名を取得すればよい:
if get(Part1, 'name') == get(Part2, 'name') " 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?" は大文字小文字を區別するかどうかが違ふ。
文字列と數値を比較した場合、文字列が數値に變換され、數値として比較される。これは以下のやうになることを意味する:
echo 0 == 'x' 1
なぜなら、’x’ は數値のゼロに變換されるからである。しかし、
echo [0] == ['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 として評價される |
expr6 + expr6 | 足し算、リスト |List| もしくは |Blob| の連結 |
expr6 - expr6 | 引き算 |
expr6 . expr6 | 文字列の連結 |
expr6 .. expr6 | 文字列の連結 |
リスト |List| に對しては "+" のみ可能で、expr6 は兩方ともリストでなければならない。結果は 2 つのリストを連結した新しいリスト。
文字列の連結には ".." が推奬される。"." はあゐまいで、|Dict| メンバーアクセスと浮動小數點數にも使用される。
|vimscript-version| が 2 以上の場合は "." を使用することはできない。
expr7 * expr7 | 掛け算 |
expr7 / expr7 | 割り算 |
expr7 % expr7 | 剩餘(割つた餘り) |
"." と ".." を除く全ての演算子は自動的に文字列を數値に變換する。ビット演算については |and()|, |or()|, |xor()| を參照。
Note:
"+" と "." の違ひに注意:"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| には適用できない。
. と % は浮動小數點數には適用できない。
! expr7 | 論理否定 |
- expr7 | 單項マイナス |
+ expr7 | 單項プラス |
’!’ 演算子では |TRUE| は |FALSE| に、|FALSE| は |TRUE| になる。’-’ では數値の符號が反轉される。’+" では變化はない。
文字列はまず數値に變換される。
これら 2 つは繰り返したり混ぜたりできる。例:
!-1 == 0 !!8 == 1 --9 == 9
この式は |expr9| もしくは連續する以下の選擇方式であり、どんな順番でもよい。例として、これらはすべて可能である:
expr8[expr1].name expr8.name[expr1] expr8(expr1, ...)[expr1].name expr8->(expr1, ...)[expr1]
評價は常に左から右に行はれます。
expr8 が數値か文字列ならば、この値は文字列 expr8 の第 expr1 番目のバイトからなる 1 バイトの文字列となる。expr8 は文字列、expr1 は數として扱はれる。ただし expr8 がマルチバイト文字列である場合、この値は單なるバイトコードであり、1 文字とはならないかもしれないことに注意。マルチバイト文字列に對する代はりの方法は ‘byteidx()‘ を參照するか、‘split()‘を使つて文字列を文字のリストに變換すれば良い。
インデックスが0の場合、先頭のバイトが得られることに注意。これはC言語のやうに働く。注意:カラム番號は1から始まる。例へばカーソルの下のバイトを得るためには、次のやうにする必要がある:
:let c = getline(".")[col(".") - 1]
文字列の長さよりも大きなインデックスが指定された場合、結果は空文字列になる。負數のインデックスを指定すると、結果は常に空文字列になる (後方互換性のため)。最後のバイトを得るには [-1:] を使ふこと。
expr8 がリスト |List| ならばインデックス expr1 の要素が返る。取りうるインデックスの値については |list-index| を參照。インデックスが範圍を超えてゐる場合はエラーとなる。例:
:let item = mylist[-1] " 最後の要素を取得
一般的には、インデックスが正でリスト |List| の長さ以上または、負でリストの長さ ×-1 より小さいときエラーとなる。
expr8 が數値か文字列ならば、expr1a バイトから expr1b バイトまでの部分文字列となる (兩端を含む)。expr8 は文字列として扱はれ、expr1a と expr1b は數値として扱はれる。Note マルチバイトのエンコーディングは認識しない。マルチバイト文字列のインデックスを計算する方法については |byteidx()| を參照。
expr1a が省略されたときは 0 となる。expr1b が省略されたときは文字列の長さ -1 となる。
負數のインデックスを使ふことによつて文字列の末尾から取り出すことができる。-1 は最後の文字、-2 は最後から 2 文字目…を表す。
インデックスがその文字の範圍外に出てしまつたときは、その文字は省かれる。expr1b が expr1a より小さいときは空文字列となる。
例:
:let c = name[-1:] " 文字列の最後のバイト :let c = name[-2:-2] " 文字列の最後から 2 バイト目 :let s = line(".")[4:] " 5 バイト目から末尾まで :let s = s[:-3] " 最後の 2 文字を削除する
expr8 がリスト |List| ならば、インデックス expr1a と expr1b の閒の要素からなる新しいリストとなる。すぐ上で說明した文字列の場合と同樣である。部分リスト |sublist| も參照のこと。例:
:let l = mylist[:3] " 最初の 4 個の要素 :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 のコピー
|Funcref| に對して expr8[expr1] や expr8[expr1a : expr1b] を使ふとエラーになる。
部分リストでスコープと變數に續くコロンとの混亂に注意してください:
mylist[n:] " 變數 n は使へる mylist[s:] " スコープ s: を使ふとエラー!
expr8 が辭書 |Dictionary| のとき、ドットをつけるとその後に書かれた名前が辭書のキーと見なされる。例: expr8[name]。
名前は變數名と同じやうにアルファベットと數字だけから構成されなければならないが、數字で始まつてもよい。波括弧は使へない。
ドットの前後に空白があつてはならない。
例:
:let dict = {"one": 1, 2: "two"} :echo dict.one " "1" を表示 :echo dict.2 " "two" を表示 :echo dict .2 " ドットの前のスペースによるエラー
Note:
ドットは文字列連結にも使はれる。混亂を避けるために、文字列連結のドットの周りには必ずスペースを入れること。
expr8 が |Funcref| 型の變數のとき、その參照する函數を呼び出す。
グローバル函數としても利用可能なメソッドの場合、これは次と同じです:
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())
"->name(" には空白を含めることはできません。"->" の前と "(" の後に空白を含めるこ とができます。したがつて、次のやうに行を分割することができます:
mylist \ ->filter(filterexpr) \ ->map(mapexpr) \ ->sort() \ ->join()
ラムダ形式を使用する場合、} と ( の閒に空白があつてはなりません。
10 進數、16 進數 (0x か 0X で始まる)、2 進數 (0b か 0B で始まる)、もしくは 8 進數 (0 で始まる) の數定數。
浮動小數點數は次の 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 內で意圖的に使はれてゐるものが見つからなかつたので、浮動小數點數の普通の表記法を用ゐるため、この後方非互換性は許容された。
コピー&ペーストしておくのに便利な値:
:let pi = 3.14159265359 :let e = 2.71828182846
または、浮動小數點リテラルとして書き込むことを望まない場合は、次のやうな函數を使用することもできる:
:let pi = acos(-1.0) :let e = exp(1.0)
浮動小數點數の精度と範圍は、Vim とリンクしたライブラリの "double" の意味による。實行時にこれを變更することはできない。
浮動小數點數 |Float| は printf("%g", f) とするのと同樣に、小數點以下 6 桁まで表示される。表示する桁數は |printf()| を使へば變へられる。例:
:echo printf('%.15e', atan(1)) 7.853981633974483e-01
Note:
ダブルクォートが使はれてゐることに注意。
文字列定數には以下の特殊文字が使用できる:
\... | 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 を使ふこと。 |
Note:
"\xff" は値 255 の 1 バイトとなる。これはエンコーディングによつては無效な値かもしれない。現在の ’encoding’ の値に應じた文字 255 を得るには "\u00ff" を使ふ。
Note:
"\000" と "\x00" は强制的に文字列の終端として扱はれる。
0z または 0Z で始まる任意のバイト數の 16 進數。シーケンスは偶數個の 16 進數文字でなければならない。例:
:let b = 0zFF00ED015DAF
Note:
シングルクォートが使はれてゐることに注意。
この文字列は文字通りに扱はれる。バックスラッシュは取り除かれないし、また特別な意味を持つたりもしない。唯一の例外は、2 つのシングルクォートで 1 つのシングルクォートになることである。
シングルクォートの文字列は、バックスラッシュを2重にしなくてよいため、正規表現パターンを表すのに便利である。以下の 2 つのコマンドは同値である:
if a =~ "\\s*" if a =~ '\s*'
&option | オプション變數、ローカルなものが優先 |
&g:option | グローバルオプション變數 |
&l:option | ローカルオプション變數 |
例:
echo "タブストップは " . &tabstop . " です" if &insertmode
ここにはあらゆるオプション名を使ふことができる。|options| を參照。ローカル變數を使はうとして、實際にはバッファローカルもウィンドウローカルも存在しない場合には、グローバル變數が利用される。
名前付きレジスタの中身を1つの文字列として得る。必要なところには改行文字が插入されてゐる。無名レジスタの中身を取得するには @" か @@ を使ふ。利用可能なレジスタの說明については |registers| を參照。
レジスタ ’=’ を使ふと、式の値でなく式そのものを得る。それを評價するには |eval()| を使ふ。
環境變數の文字列。定義されてゐない環境變數を指定した場合、結果は空文字列。
‘getenv()
‘ と ‘setenv()
‘ 函數も使用でき、英數字以外の名前を持つ環境變數に對して機能する。‘environ()
‘ 函數は、すべての環境變數を含む辭書を取得するために使用できる。
Note:
$VAR を直接使用した場合と expand("$VAR") を使用した場合では、動作に違ひがあることに注意。直接使用した場合には、現在の Vim のセッション中で既知の値に展開されるだけである。expand() を使用した場合、まづ最初に Vim のセッション中で既知の値に展開される。それが失敗した場合、變數の展開にシェルが使用されることになる。これは遲くはなるが、シェルの知りうる全ての變數を展開することができる。例::echo $shell :echo expand("$shell")最初の 1 つは恐らく何も返つてこず、2 つ目は $shell の値が返つてくるだらう (貴方のシェルがそれをサポートしてゐるなら)
以下の |internal-variables| を參照。
以下の |functions| を參照。
ラムダ式は、|expr1| を評價した結果を返す新しい無名函數を作成する。ラムダ式は以下の點がユーザー定義函數 |user-functions| と異なる:
:let F = {arg1, arg2 -> arg1 - arg2} :echo F(5, 2) 3
引數は任意である。例:
:let F = {-> 'error function'} :echo F() error function
ラムダ式は外側のスコープの變數と引數にアクセスできる。これはよくクロージャと呼ばれる。以下の例ではラムダの中で "i" と "a:arg" が使はれてゐるが、これらは函數のスコープにすでに存在する。これらは函數から拔けても有效であり續ける:
:function Foo(arg) : let i = 3 : return {x -> x + i - a:arg} :endfunction :let Bar = Foo(4) :echo Bar(6) 5
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 Handler called Handler called
Note:
Ex コマンドを實行するためにどのやうに execute() を使つてゐるかに注意。醜いが。
ラムダ式は ’<lambda>42’ のやうな內部名を持つてゐる。もしラムダ式でエラーが發生した場合には、以下のコマンドでどのラムダ式でエラーが起きたかを調べることができる:
:function {'<lambda>42'}
|numbered-function| も參照。
內部變數の名前には文字と、數字とアンダーバー (’_’) を使ふことができる。しかし數字で始めることはできない。波括弧を使ふこともできる。詳細は |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 script にローカル |
|function-argument| | a: | 函數の引數(函數內のみ) |
|vim-variable| | v: | グローバル、Vim があらかじめ定義 |
これらのスコープそのものに辭書 |Dictionary| を通じてアクセスできる。例へば、全てのスクリプトローカル變數を削除するには次のやうにする:
:for k in keys(s:) : unlet s:[k] :endfor
"b:" で始まる變數名は、カレントバッファに局所的な變數を意味する。このやうに 1 つ 1 つのバッファ每に、變數 "b:foo" を別々に使用することができる。この種の變數はバッファが掃除 (wipe out) された時や、|:bdelete| で削除された時に一緖に削除される。
1 つのバッファローカル變數が定義濟:
現在のバッファに對する變更の總回數。變更を行ふたびに增加する。これには 1 回のアンドゥ操作もカウントされる。バッファ書き込み時に ’modified’ をリセットすることもカウントされる。
この變數はバッファに變更が行はれた際にだけアクションを起こしたい時に利用できる。例:
:if my_changedtick != b:changedtick : let my_changedtick = b:changedtick : call My_Update() :endif
b:changedtick 變數を變更したり削除することはできない。
"w:" で始まる變數名は、カレントウィンドウにローカルな變數を意味する。これはウィンドウを閉ぢるときに破毀される。
"t:" で始まる變數名は、カレントタブページにローカルな變數を意味する。これはタブページを閉ぢるときに破毀される。
{|+windows| 機能つきでコンパイルしたときのみ利用可能}
函數の中からグローバル變數へアクセスするには、"g:" を付けた名前を使用する。これが省略された場合は函數ローカルな變數にアクセスする。ただし "g:" 自體は、函數の外でも使ふことができる。
函數の中からそのローカル變數にアクセスするには何も前置しなければ良い。明示的に "l:" を付けることも可能である。ただし "l:" をつけないと豫約されてゐる變數名と衝突してしまふことがある。例: "count" とすると "v:count" を參照してしまふ。"l:count" とすればローカル變數 count を參照できる。
Vim script 內では "s:" で始まる變數名を使ふことができる。これはスクリプトについてローカルであり、スクリプトの外部からはアクセスできない。
スクリプト變數は次の場所で使へる:
次の場面では使へない:
グローバル變數との衝突を避けるにはスクリプト變數を使ふ。次の例を參照:
let s:counter = 0 function MyCounter() let s:counter = s:counter + 1 echo s:counter endfunction command Tick call MyCounter()
ここで他のスクリプトから "Tick" を實行してみると、そのスクリプト內の變數 "s:counter" は變化せず、"Tick" が定義されたスクリプト內の "s:counter" だけが變化する。
これと同じことをするもう 1 つの例:
let s:counter = 0 command Tick let s:counter = s:counter + 1 | echo s:counter
函數呼び出しやユーザー定義コマンドを實行するとき、スクリプト變數のコンテキストはその函數、コマンドが定義されたスクリプトとなる。
函數の中で函數を定義した場合、スクリプト變數も共有される。例:
let s:counter = 0 function StartCounting(incr) if a:incr function MyCounter() let s:counter = s:counter + 1 endfunction else function MyCounter() let s:counter = s:counter - 1 endfunction endif endfunction
この StartCounting() を呼ぶと、カウントアップかカウントダウンのどちらかを行ふ函數 MyCounter() を定義する。StartCounting() がどこで呼ばれたかに關係なく、MyCounter() の中では變數 s:counter にアクセスできる。
同じスクリプトが再度讀み込まれた場合、同一のスクリプト變數が使はれる。スクリプト變數は Vim が終了するまで存續する。以下の例はカウンタを保持する:
if !exists("s:counter") let s:counter = 1 echo "script executed for the first time" else let s:counter = s:counter + 1 echo "script executed " . s:counter . " times now" endif
Note:
これはつまり、ファイルタイププラグインはバッファごとにスクリプト變數を 1 セット持つのではないといふことを意味する。そのやうな目的にはバッファローカル變數 |b:var| を使ふこと。
一部の變數はユーザーが設定できるが、型を變更することはできない。
Vim の起動に使用したコマンドライン引數。これは文字列のリストです。最初の項目は Vim コマンドです。
マウスポインタがある桁の桁番號。|v:beval_lnum| 行目のバイトインデックスである。オプション ’balloonexpr’ を評價してゐる最中のみ有效。
マウスポインタがあるバッファの番號。オプション ’balloonexpr’ を評價してゐる最中のみ有效。
マウスポインタがある行の行番號。オプション ’balloonexpr’ を評價してゐる最中のみ有效。
マウスポインタの下もしくは後ろにあるテキスト。C プログラムのデバッグのために有用。’iskeyword’ が適用されるが、マウスポインタの下より前にあるドットと "->" は含まれる。マウスポインタが ’]’ の上にあるときは、そこから對應する ’[’ とその前にあるテキストまでが含まれる。マウスポインタが 1 行に收まるビジュアル領域の上にあるときはその選擇領域となる。|<cexpr>| も參照。
オプション ’balloonexpr’ を評價してゐる最中のみ有效。
マウスポインタがあるウィンドウの番號。オプション ’balloonexpr’ を評價してゐる最中のみ有效。1 番目のウィンドウの番號はゼロである (他の場所でのウィンドウ番號と異なつてゐる)。
マウスポインタがあるウィンドウのウィンドウ ID |window-ID|。それ以外は v:beval_winnr と同樣。
’formatexpr’ を評價してゐるときの引數。また、短縮入力 |:map-<expr>| で <expr> を指定してゐるとき、タイプされた文字を保持する。これは |InsertCharPre| と |InsertEnter| イベントでも使はれる。
變換しようとしてゐるファイルの文字エンコーディング名。オプション ’charconvert’ を評價してゐる最中のみ有效。
變換後のファイルの文字エンコーディング名。オプション ’charconvert’ を評價してゐる最中のみ有效。
2 つの目的のために使はれる:
Note:
ここには "+cmd" 引數は含まれてゐない。どちらにしろそれは實行されるからである。
:hardcopy
" で PostScript ファイルを印刷するとき、これが ":hardcopy
" への引數になる。’printexpr’ の中で使ふことができる。
v:cmdarg と同じく讀み書きコマンドを實行したとき設定される。讀み書きコマンドに "!" が使はれたときは 1 となり、使はれてゐなければ 0 となる。
Note:
自動コマンドの中でのみ利用可能なことに注意。ユーザー定義コマンドでは |<bang>| を使へば同じことができる。
最も最近補完された單語が含まれた |complete-items| の |Dictionary| が |CompleteDone| イベント後に設定される。補完に失敗した時、その |Dictionary| は空である。
最後に實行されたノーマルモードコマンドに渡されたカウント數。マッピングの前のカウントを取得するのに使用できる。讀出し專用。使用例:
:map _x :<C-U>echo "the count is " . v:count<CR>
Note:
<C-U>は、カウントの後に ’:’ をタイプした時に示される行範圍指定を削除するために必要となる。"3d2w" のやうにカウントが 2 個指定された場合、その數が掛けられる。よつて "d6w" となる。オプション ’formatexpr’ を評價するためにも使はれる。|scriptversion| が 3 以降でなければ、"count" も、以前の版の Vim との互換性の爲に動作する。
"v:count" と同じだが、カウントが指定されなかつた時の既定値が 1 となる。
文字に關する實行環境の現在のロケール設定。これを使へば Vim script 內で現在のロケール設定に對應できるやうになる。技術的な詳細: LC_CTYPE に等しい。ロケールを使用してゐないときは "C" になる。この變數を設定するには |:language| コマンドを使ふこと。直接設定することはできない。|multi-lang| を參照。
通常時は 0。致命的なシグナルを受信したとき 1 が代入される。複數のシグナルを受信すると値が增加していく。自動コマンド內で Vim が正常に終了するかチェックするために使へる。{Unix でのみ動作}
例:
:au VimLeave * if v:dying | echo "\nAAAAaaaarrrggghhhh!!!\n" | endif
Note:
v:dying が 1 のときに別の致命的なシグナルを受信した場合は VimLeave 自動コマンドは實行されない。
|hit-enter-prompt| を引き起こす前の最後の畫面行の ‘:echo
‘ メッセージに使用できる畫面セルの數。’showcmd’, ’ruler’ および ’columns’ に依存する。最後の行の上に全幅の行があるかどうかを ’cmdheight’ で確認する必要がある。
最後に表示されたエラーメッセージ。この變數は代入することが許されてゐる。
例:
:let errmsg = "" :next :if (errmsg != "") : ...
|scriptversion| が 3 以降でなければ、"errmsg" も、以前の版の Vim との互換性の爲に動作する。
|assert_true()| のやうな、テスト用函數によつて見つかつたエラー。
これは文字列のリストである。テスト用函數はテストに失敗した時にエラーを末尾に追加する。戾りり値が示すもの: 要素が v:errors に追加された場合 1 が返る。それ以外では 0 が返る。
古い結果を削除する方法はこの變數を空にする:
:let v:errors = []
たとへ |v:errors| にリスト以外のいかなる値をセットしたとしても、(次に實行される時に) テスト用函數によつて空のリストが設定 (上書き) される。
現在の |autocommand| に關する情報を含む辭書。この辭書は |autocommand| が終了したときに空にされる。獨立したコピーの取得方法については |dict-identity| を參照。
最も直近に捕捉され、まだ終了してゐない例外の値。|v:throwpoint| と |throw-variables| を參照。
例:
:try : throw "oops" :catch /.*/ : echo "caught " .. v:exception :endtry
出力: "caught oops".
數値 0。JSON では "false" として使はれる。|json_encode()| を參照。
文字列として使はれた時、これは "v:false" として評價される。
echo v:false v:false
これは eval() がその文字列をパースしたときに、元の値に戾せるやうにするためである。讀出し專用。
|FileChangedShell| イベントが發生した理由。自動コマンドの中で何をすべきかや v:fcs_choice に何を代入すべきかを決めるために使ふ。値は次のどれかとなる:
deleted | もはやファイルが存在しない |
conflict | ファイルの內容、モード、タイムスタンプが變化してをり、バッファが變更されてゐる狀態。 |
changed | ファイルの內容が變化してゐる |
mode | ファイルのモードが變化してゐる |
time | タイムスタンプだけが變化してゐる |
|FileChangedShell| イベントが發生した後に何をすべきかを表す。自動コマンドの中で、そのバッファに對して何をすべきかを指示するために使ふ。
reload | バッファを讀み直す (バッファが削除されてゐる場合には效果がない)。 |
ask | 何をすべきかをユーザーに問ひ合はせる。これはこの自動コマンドがない場合と同じである。ただしタイムスタンプだけが變化してゐるときは何もしない。 |
<empty> | 何もしない。自動コマンドの中だけで必要なことは全て行つてしまつてゐるといふ場合にこの値を代入する。 |
既定値は <empty>。これら以外の (無效な) 値が代入されたときは空のときと同じ動作になり、警告メッセージは表示されない。
入力ファイルの名前。以下のオプションを評價してゐる最中のみ有效:
オプション | このファイル名の意味 |
---|---|
’charconvert’ | 變換するファイル |
’diffexpr’ | 元のファイル |
’patchexpr’ | 元のファイル |
’printexpr’ | 印刷するファイル |
また、自動コマンドイベント |SwapExists| が發生したときスワップファイル名が代入される。
出力ファイルの名前。以下のオプションを評價してゐる最中のみ有效:
オプション | このファイル名の意味 |
---|---|
’charconvert’ | 變換した結果のファイル (*) |
’diffexpr’ | diff の出力 |
’patchexpr’ | パッチを當てた結果のファイル |
(*) 書き込みコマンド (":w file
" など) を實行する際の變換では v:fname_in と同じになる。讀み込みコマンド (":e file
" など) を實行する際の變換では一時ファイル名になり、v:fname_in と異なる。
新しい方のファイル名。’diffexpr’ を評價してゐる最中のみ有效。
diff(patch) ファイルの名前。’patchexpr’ を評價してゐる最中のみ有效。
’foldtext’ 用。閉ぢた折り疊みのレベルを表すダッシュ。サンドボックス |sandbox| の中では讀出し專用。|fold-foldtext|
’foldtext’ 用。閉ぢた折り疊みのレベル。サンドボックス |sandbox| の中では讀出し專用。|fold-foldtext|
’foldtext’ 用。閉ぢた折り疊みの最後の行。サンドボックス |sandbox| の中では讀出し專用。|fold-foldtext|
’foldtext’ 用。閉ぢた折り疊みの最初の行。サンドボックス |sandbox| の中では讀出し專用。|fold-foldtext|
檢索による强調表示がオンになつてゐるかどうかを示す變數。設定は |+extra_search| 機能が必要な ’hlsearch’ が有效になつてゐる時のみ意味をなす。この變數を 0 に設定することは、|:nohlsearch| コマンドを實行することと同樣に働き、1 に設定することは以下と同樣に働く
let &hlsearch = &hlsearch
Note:
函數から戾つたときに値が復元されることに注意すること。|function-search-undo|
自動コマンドイベント |InsertEnter| と |InsertChange| 用。値は次のどれか:
i | 插入モード |
r | 置換モード |
v | 假想置換モード |
辭書 |Dictionary| の現在の要素のキー。|map()| と |filter()| で使はれる式を評價してゐる最中のみ有效。讀出し專用。
メッセージに關する實行環境の現在のロケール設定。これを使へば Vim script 內で現在のロケール設定に對應できるやうになる。技術的な詳細: LC_MESSAGES に等しい。この値はシステムに依存する。この變數を設定するには |:language| コマンドを使ふこと。直接設定することはできない。
文字エンコーディングに使ふのと違ふ言語でメッセージを表示させたい場合は |v:ctype| と異なる値でもよい。|multi-lang| を參照。
時刻のメッセージに關する實行環境の現在のロケール設定。これを使へば Vim script 內で現在のロケール設定に對應できるやうになる。技術的な詳細: LC_TIME に等しい。この値はシステムに依存する。この變數を設定するには |:language| コマンドを使ふこと。直接設定することはできない。
’foldexpr’ |fold-expr| と ’indentexpr’ に使ふための行番號。また ’guitablabel’ と ’guitabtooltip’ の文脈ではタブページ番號になる。これらの式のどれかを評價してゐるときのみ有效。サンドボックス |sandbox| の中では讀出し專用。
|getchar()| でマウスクリックイベントが發生したときのウィンドウ番號。|winnr()| と同じく番號は 1 から始まる。マウスがクリックされなかつたときは 0 となる。
|getchar()| でマウスクリックイベントが發生したときのウィンドウ ID。マウスがクリックされてゐないときは 0 になる。
|getchar()| でマウスクリックイベントが發生したときの行番號。物理行ではなく論理行。マウスがクリックされてゐないときは 0 となる。
|getchar()| でマウスクリックイベントが發生したときの桁番號。|virtcol()| と同じく畫面上の桁番號。マウスがクリックされてゐないときは 0 となる。
空の文字列。JSON では空の要素として使はれる。|json_encode()| を參照。數値として使はれた時、これは 0 として評價される。文字列として使はれた時、これは "v:none" として評價される。
echo v:none v:none
これは eval() がその文字列をパースしたときに、元の値に戾せるやうにするためである。讀出し專用。
空の文字列。JSON では "null" として使はれる。|json_encode()| を參照。數値として使はれた時、これは 0 として評價される。文字列として使はれた時、これは "v:null" として評價される。
echo v:null v:null
これは eval() がその文字列をパースしたときに、元の値に戾せるやうにするためである。讀出し專用。
起動時に |viminfo| から讀み込まれたファイルの名前のリスト。これらはマークを記憶してゐるファイルである。リストの長さの上限はオプション ’viminfo’ の引數 ’ によつて決まる (既定では 100)。|viminfo| ファイルが使はれてゐない時、リストは空となる。|:oldfiles| と |c_#<| を參照。このリストは變更可能であるが、後で |viminfo| ファイルに書き込まれるものには影響しない。文字列以外の値を使ふと問題を引き起こすだらう。
{|+viminfo| 機能つきでコンパイルされたときのみ有效}
オプションに設定された新しい値。自動コマンド |OptionSet| を實行してゐる閒のみ有效。
オプションの以前の値。自動コマンド |OptionSet| を實行してゐる閒のみ有效。設定に使用されたコマンドおよびオプションの種類によつて、ローカルの以前の値またはグローバルの以前の値のどちらかになる。
オプションの以前のローカル値。|OptionSet| 自動コマンドの實行中に有效である。
オプションの以前のグローバル値。|OptionSet| 自動コマンドの實行中に有效である。
set コマンドのスコープ。自動コマンド |OptionSet| を實行してゐる閒のみ有效。"global" もしくは "local" のどちらかとなる。
オプションを設定するために使はれたコマンド。|OptionSet| 自動コマンドの實行中に有效である。
値 | オプションは以下によつて設定された |
---|---|
"setlocal" | |:setlocal| または ":let l:xxx " |
"setglobal" | |:setglobal| または ":let g:xxx " |
"set" | |:set| または |:let| |
"modeline" | |modeline| |
ノーマルモードにおいて最後に實行したオペレータコマンド。基本的に 1 文字である。例外は <g> や <z> で始まるコマンドで、その場合は2文字になる。|v:prevcount| と |v:register| と組み合はせて使ふとよい。オペレータ待機モードをキャンセルして、それからオペレータを使ひたいときに便利である。例:
:omap O <Esc>:call MyMotion(v:operator)<CR>
この値は他のオペレータが入力されるまでセットされてゐる。よつて空になると期待してはいけない。|:delete|, |:yank| などの Ex コマンドに對しては v:operator はセットされない。
讀出し專用。
現在の OS のアピアランスモード。GUI フロントエンドのアピアランスにしたがつて |-background| や |:colorscheme| オプションを變更したい時に便利です。|OSAppearanceChanged| も參照してください。
値 | 說明 |
---|---|
0 | Light Mode (サポートされてゐないプラットフォーム上では常に 0) |
1 | Dark Mode |
2 | High-Contrast Light Mode |
3 | High-Contrast Dark Mode |
{MacVim GUI のみ}
最後の 1 つ前のノーマルモードコマンドに與へられたカウントの値。前のコマンドの v:count の値である。ビジュアルモードやオペレータ待機モードをキャンセルし、その後にカウントを使ふ場合に便利である。例:
:vmap % <Esc>:call MyFilter(v:prevcount)<CR>
讀出し專用。
通常時は 0。":profile start" を實行すると1が代入される。|profiling| を參照。
Vim を起動したときのプログラム名(パスは除かれる)。|view|, |evim| などの名前やシンボリックリンクなどで起動した場合に特別な初期化を行ふのに便利。
讀出し專用。
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 には追加されません。
讀出し專用。
現在のノーマルモードコマンドに適用されるレジスタの名前 (そのコマンドが實際にレジスタを使ふかどうかには依らない)。または、現在實行してゐるノーマルモードマッピング用のレジスタの名前 (レジスタを使ふカスタムコマンドの中で使ふ)。レジスタが指定されなかつたときはデフォルトレジスタ ’"’ になる。’clipboard’ に "unnamed" か "unnamedplus" が含まれてゐるときはデフォルトはそれぞれ ’*’ か ’+’ になる。|getreg()| と |setreg()| も參照。
畫面のスクロールの原因となつたスクリプトや函數を說明する文字列。空であるときのみ代入される。よつてこの變數には最初の原因だけが記錄されてゐる。原因がキーボードから入力されたコマンドの場合は "Unknown" が代入される。スクリプトを實行したとき現れた hit-enter プロンプトの原因を探るために便利。
|client-server-name| で登錄された結果。
讀出し專用。
檢索方向: 前方檢索の後なら 1、後方檢索の後なら 0。|quote/| で示す方法によつて最終檢索パターンを直接セットしたときは 1 (前方檢索) にリセットされる。函數から戾るとき、この値は呼び出し前の値に復元される。|function-search-undo|。
讀み書き兩用。
最後に實行したシェルコマンドの結果。シェルコマンドの實行時に何かエラーがあつたならば、非零の値を取る。問題がなければ零になる。これはシェルがエラーコードを Vim に通知する時のみ働く。コマンドが實行されなかつた時には、値として -1 が良く使はれる。讀出し專用。
例:
:!mv foo bar :if v:shell_error : echo 'could not rename "foo" to "bar"!' :endif
|scriptversion| が 3 以降でなければ、"shell_error" も、以前の版の Vim との互換性の爲に動作する。
最後に表示されたステータスメッセージ。この變數は代入することが許されてゐる。
自動コマンド |SwapExists| を實行してゐる最中のみ有效。見つかつたスワップファイルの名前。讀出し專用。
イベント |SwapExists| により實行された自動コマンドが、見つかつたスワップファイルをどう處理するかをこの變數に代入する。
’o’ | 讀込專用で開く |
’e’ | とにかく編輯する |
’r’ | 復活させる |
’d’ | スワップファイルを削除する |
’q’ | 終了する |
’a’ | 中止する |
この變數の値は 1 文字の文字列でなければならない。値が空のときは自動コマンド SwapExists が存在しないときと同じやうにユーザーに問ひ合はせる。既定値は空。
ファイルを開いた後に實行するノーマルモードコマンド。自動コマンド |SwapExists| で、他の Vim インスタンスにファイルを開かせ、指定位置までジャンプするために使ふことができる。例へば、あるタグへジャンプするには、この變數に ":tag tagname\r" といふ値を代入する。":edit +cmd file" を實行させるには ":cmd\r" を代入する。
辭書型 |Dictionary| の値。讀出し專用。參照: |type()|
termcap のエントリ |t_RV| で端末から返されるエスケープシーケンス。 ESC [ または CSI で始まり、次に ’>’ または ’?’ が來て、途中數字と ’;’ だけから構成され ’c’ で終はるエスケープシーケンスを受け取つたときに代入される。
このオプションがセットされると自動コマンドイベント TermResponse が發生し、端末からの應答に反應することができる。 新しい xterm からの應答は次の形式である: "<Esc>[> Pp ; Pv ; Pc c"。ここで Pp は端末のタイプ: 0 なら vt100、1 なら vt220。Pv はパッチレベル (パッチ 95 で導入されたため常に 95 以上)。Pc は常に 0。
{Vimが |+termresponse| 機能付きでコンパイルされたときのみ有效}
termcap のエントリ |t_RC| で端末から返されるエスケープシーケンス。端末カーソルが點滅してゐるかを調べるために使用される。|term_getcursor()| で使用される。
termcap のエントリ |t_RS| で端末から返されるエスケープシーケンス。カーソルの形狀を調べるために使用される。|term_getcursor()| で使用される。
termcap のエントリ |t_RB| で端末から返されるエスケープシーケンス。端末の背景色を調べるために使用される。’background’ を參照。
termcap のエントリ |t_RF| で端末から返されるエスケープシーケンス。端末の文字色を調べるために使用される。
termcap のエントリ |t_u7| で端末から返されるエスケープシーケンス。曖昧な幅の文字に對して端末が何をするか調べるのに使はれる。’ambiwidth’ を參照。
‘test_garbagecollect_now()‘ を使ふ前に設定する必要がある。また、これが設定されてゐると、特定のエラーメッセージが 2 秒閒表示されなくなる。(例: "’dictionary’ option is empty")
最後にロードされたか、セーブされたセッションファイルの完全なファイル名。|:mksession| を參照。この變數は代入することが許されてゐる。それ以前にセーブされたセッションがなければ、この變數は空となる。
|scriptversion| が 3 以降でなければ、"this_session" も、以前の版の Vim との互換性の爲に動作する。
最も直近に捕捉されてまだ終了してゐない例外が發生した位置。キーボードから入力されたコマンドは記錄されてゐない。|v:exception| と |throw-variables| も參照。
例:
:try : throw "oops" :catch /.*/ : echo "Exception from" v:throwpoint :endtry
出力: "Exception from test.vim, line 2"
數値 1。JSON では "true" として使はれる。|json_encode()| を參照。
文字列として使はれた時、これは "v:true" として評價される。
echo v:true v:true ~
これは eval() がその文字列をパースしたときに、元の値に戾せるやうにするためである。讀出し專用。
リスト |List| や辭書 |Dictionary| の現在の要素の値。|map()| と |filter()| で使はれる式を評價してゐる最中のみ有效。讀出し專用。
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:version と同じだが、最後の 4 桁にパッチレベルも含む。パッチ 123 を適用したバージョン 8.1 の値は 8010123 である。
これは次のやうに使用できる:
if v:versionlong >= 8010123
ただし、含まれてゐるパッチのリストに隙閒がある場合は、うまくいかない。これは、最近のパッチが古いバージョンに含まれてゐた場合に起こる。例へば、セキュリティ修正のため。パッチが實際に含まれてゐることを確認するためには has() 函數を使用すること。
ほとんどのスタートアップが完了するまでの閒 0。|VimEnter| 自動コマンドが實行される直前に 1 にセットされる。
最後に表示された警告メッセージ。この變數は代入することが許されてゐる。
X11 ベースの GUI を使つてゐるとき、もしくは端末の Vim を使つてゐて X サーバーに接續してゐるとき (|-X|) は、ウィンドウ ID がセットされる。MS-Windows の GUI を使つてゐるときはウィンドウハンドルがセットされる。それ以外では値はゼロである。
Note:
Vim の中のウィンドウを扱ふときは |winnr()| または |win_getid()| を使ふ。|window-ID| を參照。
機能別に分類された一覽は |function-list| を參照のこと。
(函數名の上で CTRL-] を使ふことで、詳細な說明へ飛ぶことができる。)
使用法 | 結果 | 說明 |
---|---|---|
abs({expr}) | 浮動小數點數または數値 | {expr} の絕對値 |
acos({expr}) | 浮動小數點數 | {expr} のアークコサイン |
add({object}, {item}) | リスト/Blob | {item} を {object} に追加する |
and({expr}, {expr}) | 數値 | ビット論理積 |
append({lnum}, {text}) | 數値 | {text} を {lnum} 行目に付け加へる |
append({lnum}, {list}) | 數値 | 行 {list} を {lnum} 行目に付け加へる |
appendbufline({expr}, {lnum}, {text}) | 數値 | {expr} バッファの {lnum} 行目の次に {text} を加へる |
argc([{winid}]) | 數値 | 引數內のファイルの數 |
argidx() | 數値 | 引數リスト內の現在のインデックス |
arglistid([{winnr} [, {tabnr}]]) | 數値 | 引數リストID |
argv({nr} [, {winid}]) | 文字列 | 引數の第 {nr} 番目 |
argv([-1, {winid}]) | リスト | 引數リスト |
assert_beeps({cmd}) | 數値 | {cmd} がビープ音を鳴らすことをテストする |
assert_equal({exp}, {act} [, {msg}]) | 數値 | {exp} と {act} が等しいかどうかテストする |
assert_equalfile({fname-one}, {fname-two}) | 數値 | ファイルの內容が等しいことをテストする |
assert_exception({error} [, {msg}]) | 數値 | v:exception が {error} であるかテストする |
assert_fails({cmd} [, {error} [, {msg}]]) | 數値 | {cmd} が失敗するかどうかテストする |
assert_false({actual} [, {msg}]) | 數値 | {actual} が false かどうかテストする |
assert_inrange({lower}, {upper}, {actual} [, {msg}]) | 數値 | {actual} が範圍內にあるかテストする |
assert_match({pat}, {text} [, {msg}]) | 數値 | {pat} が {text} にマッチするかテストする |
assert_notequal({exp}, {act} [, {msg}]) | 數値 | {exp} が {act} と等しくないことをテストする |
assert_notmatch({pat}, {text} [, {msg}]) | 數値 | {pat} が {text} とマッチしないことをテストする |
assert_report({msg}) | 數値 | テストの失敗を報告する |
assert_true({actual} [, {msg}]) | 數値 | {actual} が true かどうかテストする |
asin({expr}) | 浮動小數點數 | {expr} のアークサイン |
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 コード |
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 が實行されると |TRUE| |
diff_filler({lnum}) | 數値 | 差分モードで {lnum} に插入された行 |
diff_hlID({lnum}, {col}) | 數値 | 差分モードで {lnum}/{col} 位置の强調 |
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| |
extend({expr1}, {expr2} [, {expr3}]) | リスト/辭書 | {expr1} に {expr2} の要素を插入 |
exp({expr}) | 浮動小數點數 | {expr} の指數 |
expand({expr} [, {nosuf} [, {list}]]) | 任意 | {expr} 內の特別なキーワードを展開 |
expandcmd({expr}) | 文字列 | ‘:edit‘ のやうに {expr} を展開 |
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} を探す |
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 ウィンドウを前面に移動する |
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() | 數値 | 修飾キーの狀態を表す數値を取得 |
getcharsearch() | 辭書 | 最後の文字檢索を取得 |
getcmdline() | 文字列 | 現在のコマンドラインを取得 |
getcmdpos() | 數値 | コマンドラインのカーソル位置を取得 |
getcmdtype() | 文字列 | 現在のコマンドラインの種類を取得 |
getcmdwintype() | 文字列 | 現在のコマンドラインウィンドウの種類 |
getcompletion({pat}, {type} [, {filtered}]) | リスト | コマンドライン補完にマッチするリスト |
getcurpos() | リスト | カーソルの位置 |
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} [, {what}]) | リスト | ロケーションリストの要素のリスト |
getmatches([{win}]) | リスト | 現在のマッチのリスト |
getmousepos() | 辭書 | 最後にわかつてゐるマウスの位置 |
getpid() | 數値 | Vim のプロセス ID |
getpos({expr}) | リスト | カーソル・マークなどの位置を取得 |
getqflist([{what}]) | リスト | quickfix 要素のリスト |
getreg([{regname} [, 1 [, {list}]]]) | 文字列/リスト | レジスタの中身を取得 |
getregtype([{regname}]) | 文字列 | レジスタの種類を取得 |
gettabinfo([{expr}]) | リスト | タブページのリスト |
gettabvar({nr}, {varname} [, {def}]) | 任意 | タブ {nr} の變數 {varname} または {def} |
gettabwinvar({tabnr}, {winnr}, {name} [, {def}]) | 任意 | タブページ {tabnr} の {winnr} の {name} |
gettagstack([{nr}]) | 辭書 | ウィンドウ {nr} のタグスタックを取得する |
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}) | 數値 | 機能 {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}) | 數値 | ヒストリの數 |
hlexists({name}) | 數値 | highlight group {name} が存在したら |TRUE| |
hlID({name}) | 數値 | highlight group {name} の ID |
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} の前] |
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} にマッチするマッピングを確認 |
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)matchend()({expr}, {pat} [, {start} [, {count}]]) | 數値 | {expr} 內で {pat} が終了する位置 |
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} 內の要素の最大値 |
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}) | 文字列 | path 內の短縮したディレクトリ名 |
perleval({expr}) | 任意 | |Perl| の式を評價する |
popup_atcursor({what}, {options}) | 數値 | カーソル付近にポップアップウィンドウを作成する |
popup_beval({what}, {options}) | 數値 | ’ballooneval’ 用にポップアップウィンドウを作成する |
popup_clear() | なし | すべてのポップアップウィンドウを閉ぢる |
popup_close({id} [, {result}]) | なし | {id} のポップアップウィンドウを閉ぢる |
popup_create({what}, {options}) | 數値 | ポップアップウィンドウを作成する |
popup_dialog({what}, {options}) | 數値 | ダイアログとして使用するポップアップウィンドウを作成する |
popup_filter_menu({id}, {key}) | 數値 | filter for a menu popup window |
popup_filter_yesno({id}, {key}) | 數値 | filter for a dialog popup window |
popup_findinfo() | 數値 | 情報ポップアップウィンドウの window ID を取得する |
popup_findpreview() | 數値 | プレビューポップアップウィンドウの window ID を取得する |
popup_getoptions({id}) | 辭書 | get options of popup window {id} |
popup_getpos({id}) | 辭書 | get position of popup window {id} |
popup_hide({id}) | なし | hide popup menu {id} |
popup_menu({what}, {options}) | 數値 | create a popup window used as a menu |
popup_move({id}, {options}) | なし | set position of popup window {id} |
popup_notification({what}, {options}) | 數値 | create a notification popup window |
popup_show({id}) | なし | unhide popup window {id} |
popup_setoptions({id}, {options}) | なし | set options for popup window {id} |
popup_settext({id}, {text}) | なし | set the text of popup window {id} |
pow({x}, {y}) | 浮動小數點數 | {x} の {y} 乘 |
prevnonblank({lnum}) | 數値 | {lnum} 行目以前の空行でない行の行番號 |
printf({fmt}, {expr1}...) | 文字列 | 文字列を組み立てる |
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() | 數値 | ポップアップメニューが表示されてゐるか |
pyeval({expr}) | 任意 | |Python| の式を評價する |
py3eval({expr}) | 任意 | |python3| の式を評價する |
pyxeval({expr}) | 任意 | |python_x| の式を評價する |
range({expr} [, {max} [, {stride}]]) | リスト | {expr} から {max} までの要素のリスト |
readdir({dir} [, {expr}]) | リスト | {expr} によつて選擇された {dir} 內のファイル名を取得 |
readfile({fname} [, {type} [, {max}]]) | リスト | ファイル {fname} から行のリストを取得 |
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}]]]) | 數値 | {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() | 文字列 | 利用可能なサーバーのリストを取得 |
setbufline({expr}, {lnum}, {text}) | 數値 | バッファ {expr} の {lnum} 行目に {text} を設定する |
setbufvar({expr}, {varname}, {val}) | なし | バッファ {expr} 內の變數 {varname} に {val} をセット |
setcharsearch({dict}) | 辭書 | 文字檢索を {dict} に設定 |
setcmdpos({pos}) | 數値 | コマンドライン內のカーソル位置を設定 |
setenv({name}, {val}) | なし | 環境變數を設定 |
setfperm({fname}, {mode}) | 數値 | ファイル {fname} のパーミッションを {mode} に設定 |
setline({lnum}, {line}) | 數値 | 行 {lnum} に {line} (文字列) をセット |
setloclist({nr}, {list} [, {action} [, {what}]]) | 數値 | {list} を使つてロケーションリストを變更 |
setmatches({list} [, {win}]) | 數値 | マッチのリストを復元する |
setpos({expr}, {list}) | なし | {expr} の位置を {list} にする |
setqflist({list} [, {action} [, {what}]]) | 數値 | {list} を使つて 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} のハイパボリックサイン |
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} で區切つてリスト |List| を作る |
sqrt({expr}) | 浮動小數點數 | {expr} の平方根 |
state([{what}]) | 文字列 | Vim の現在の狀態 |
str2float({expr}) | 浮動小數點數 | 文字列を浮動小數點數に變換する |
str2list({expr} [, {utf8}]) | リスト | {expr} の各文字を ASCII/UTF8 値に變換する |
str2nr({expr} [, {base} [, {quoted}]]) | 數値 | 文字列を數値に變換する |
strchars({expr} [, {skipcc}]) | 數値 | 文字列 {expr} の文字の數 |
strcharpart({str}, {start} [, {len}]) | 文字列 | {str} の {start} から長さ {len} の文字列を得る |
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}]) | 文字列 | {str} 內 {start} から長さ {len} の部分 |
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}]) | 數値 | タブページ內の現在のウィンドウの番號 |
taglist({expr} [, {filename}]) | リスト | {expr} にマッチするタグのリスト |
tagfiles() | リスト | 使用してゐるタグファイルのリスト |
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_setapi({buf}, {expr}) | なし | |terminal-api| 函數名プリフィックスを設定する |
term_setansicolors({buf}, {colors}) | なし | GUI カラーモードでの ANSI パレットを設定する |
term_setkill({buf}, {how}) | なし | 端末のジョブを停止するためのシグナルを設定する |
term_setrestore({buf}, {command}) | なし | 端末を復元するためのコマンドを設定する |
term_setsize({buf}, {rows}, {cols}) | なし | 端末のサイズを設定する |
term_start({cmd} [, {options}]) | 數値 | 端末ウィンドウを開きジョブを實行する |
term_wait({buf} [, {time}]) | 數値 | スクリーンが更新されるのを待つ |
test_alloc_fail({id}, {countdown}, {repeat}) | なし | メモリの確保を失敗にさせる |
test_autochdir() | なし | 起動時に ’autochdir’ を有效にする |
test_feedinput({string}) | なし | キー入力を入力バッファに追加する |
test_garbagecollect_now() | なし | テスト用に直ちにメモリを解放する |
test_garbagecollect_soon() | なし | テスト用にすぐにメモリを解放する |
test_getvalue({string}) | 任意 | 內部變數の値を取得する |
test_ignore_error({expr}) | なし | 特定のエラーを無視する |
test_null_blob() | Blob | テスト用の null 値 |
test_null_channel() | チャネル | テスト用の null 値 |
test_null_dict() | 辭書 | テスト用の 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}) | なし | テスト用に現在の時刻を設定する |
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}]) | 文字列 | {text} から {mask} 內の文字を切り取る |
trunc({expr}) | 浮動小數點數 | 浮動小數點數 {expr} を切り詰める |
type({name}) | 數値 | 變數 {name} の型 |
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_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} の高さ |
winlayout([{tabnr}]) | リスト | タブ {tabnr} 中のウィンドウの配置 |
winline() | 數値 | カーソル位置のウィンドウ行 |
winnr([{expr}]) | 數値 | 現在のウィンドウの番號 |
winrestcmd() | 文字列 | ウィンドウサイズを復元するコマンド |
winrestview({dict}) | なし | 現在のウィンドウのビューを復元 |
winsaveview() | 辭書 | 現在のウィンドウのビューを保存 |
winwidth({nr}) | 數値 | ウィンドウ {nr} の幅を取得 |
wordcount() | 辭書 | バイト/文字/單語の統計情報を取得 |
writefile({object}, {fname} [, {flags}]) | 數値 | 行の |Blob| または |list| をファイルに書き込む |
xor({expr}, {expr}) | 數値 | ビット排他的論理和 |
{expr} の絕對値を返す。{expr} の値が浮動小數點數 |Float| である場合は浮動小數點數を返す。{expr} が數値 |Number| に變換可能な場合は abs() は數値を返す。それ以外の場合はエラーメッセージを表示し、-1 を返す。
例:
echo abs(1.456) 1.456 echo abs(-5.456) 5.456 echo abs(-4) 4
|method| としても使用できます:
Compute()->abs()
{|+float| 機能を有效にしてコンパイルしたときのみ有效}
{expr} の逆餘弦 (アークコサイン) をラジアンで返す。値は [0, pi] の範圍の浮動小數點數 (|Float|)。{expr} は [-1, 1] の範圍の浮動小數點數 (|Float|) か數値 (|Number|) でなければならない。
例:
:echo acos(0) 1.570796 :echo acos(-0.5) 2.094395
|method| としても使用できます:
Compute()->acos()
{|+float| 機能を有效にしてコンパイルしたときのみ有效}
リスト |List| または |Blob| {object} の末尾に項目 {expr} を追加する。結果の |List| か |Blob| を返す。例:
:let alist = add([1, 2, 3], item) :call add(mylist, "woodstock")
Note:
{expr} がリストのときは、1 個の要素として追加される。リストを連結するには |extend()| を使ふ。{object} が |Blob| の場合、{expr} は數値でなければならない。他の位置に要素を追加するには |insert()| を使ふ。
|method| としても使用できます:
mylist->add(val1)->add(val2)
2 つの引數のビット論理積。引數は數値に變換される。リスト、辭書、浮動小數點數を指定するとエラーになる。例:
:let flag = and(bits, 0x80)
|method| としても使用できます:
:let flag = bits->and(0x80)
{text} がリスト |List| のときは、各要素をカレントバッファの {lnum} 行目以降にテキストとして追加する。リストでないときは、{text} をテキストとしてカレントバッファの {lnum} 行目以降にテキストとして追加する。 {lnum}は 0 でもよく、その場合は 1 行目の前に行を插入する。失敗した場合は 1 を返す({lnum} が不正な範圍であるか、メモリ不足)。成功なら 0 を返す。例:
:let failed = append(line('$'), "# THE END") :let failed = append(0, ["Chapter 1", "the beginning"])
リストの後で |method| としても使用できます:
mylist->append(lnum)
|append()| と同樣、ただしバッファ {expr} にテキストを追加する。
この函數はロードされたバッファに對してのみ機能します。必要であれば最初に |bufload()| を呼び出してください。
{expr} の使ひ方については |bufname()| を參照。
{lnum} は |append()| と同樣に扱はれる。
Note:
|line()| の使用は、追加對象のバッファではなくカレントバッファに適用されることに注意。バッファの最後に追加するには "$" を使用する。
成功時には 0 が返り、失敗時には 1 が返る。
{expr} が有效なバッファでない、もしくは {lnum} が有效でない場合、エラーメッセージが與へられる。例:
:let failed = appendbufline(13, 0, "# THE START")
リストのあとに |method| としても使用できます:
mylist->appendbufline(buf, lnum)
引數リスト內のファイルの數を返す。|arglist| を參照。
もしも {winid} が與へられてゐないなら、カレントウィンドウの引數リストが使はれる。もしも {winid} が -1 なら、大域の引數リストが使はれる。
{winid} が與へられてゐるなら、どちらかのウィンドウ引數リストが使はれる: ウィンドウ番號もしくはウィンドウ ID
もしも {winid} の引數が不正ならば -1 を返す。
引數リスト內の現在のインデックスを返す。最初のファイルは 0 となる。argc() - 1 が最後のファイルとなる。|arglist| を參照。
引數リストの ID を返す。値は引數リストを區別するための數値である。ゼロはグローバル引數リストを意味する。|arglist| 參照。引數が無效な場合は -1 を返す。
引數を指定しなかつた場合はカレントウィンドウが使はれる。{winnr} を指定した場合はカレントタブページ內のウィンドウが使はれる。{winnr} と {tabnr} を指定した場合は指定したタブページ內のウィンドウが使はれる。{winnr} にはウィンドウ番號または |window-ID| が使へる。
結果は引數リスト內の {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} が指定されなかつた、もしくは {nr} が -1 の場合は、引數リスト |arglist| 全體を返す。
{winid} 引數はウィンドウ ID を指定します。|argc()| を參照してください。Vim のコマンドライン引數については、|v:argv| を參照してください。
assert_ 函數群についてはここに文書化されてゐます: |assert-functions-details|
{expr} の逆正弦 (アークサイン) をラジアンで返す。値は [-pi/2, pi/2] の範圍の浮動小數點數 (|Float|)。{expr} は [-1, 1] の範圍の浮動小數點數 (|Float|) か數値 (|Number|) でなければならない。
例:
:echo asin(0.8) 0.927295 :echo asin(-0.5) -0.523599
|method| としても使用できます:
Compute()->asin()
{|+float| 機能つきでコンパイルされたときのみ有效}
{expr} の逆正接 (アークタンジェント) の主値を浮動小數點數 |Float| で返す。主値はラジアンで [-pi/2, +pi/2] の範圍內にある。{expr} は |Float| か |Number| に評價されなければならない。
例:
:echo atan(100) 1.560797 :echo atan(-4.01) -1.326405
|method| としても使用できます:
Compute()->atan()
{|+float| 機能つきでコンパイルされたときのみ有效}
{expr1} / {expr2} の逆正接 (アークタンジェント) をラジアンで返す。値は [-pi, pi] の範圍の浮動小數點數 (|Float|)。{expr1} と {expr2} は浮動小數點數 (|Float|) か數値 (|Number|) でなければならない。
例:
:echo atan2(-1, 1) -0.785398 :echo atan2(1, -1) 2.356194
|method| としても使用できます:
Compute()->atan(1)
{|+float| 機能を有效にしてコンパイルしたときのみ有效}
バルーン內の現在のテキストを返す。文字列に對してのみ使用され、リストには使用されない。
{expr} をバルーン內に表示する。GUI では {expr} は文字列として扱はれる。端末では {expr} をバルーンの行を含むリストとしてもよい。{expr} がリストでない場合、|balloon_split()| で分割される。
{expr} が空文字列の場合、既存のバルーンは削除される。
例:
func GetBalloonContent() " ... 內容の取得を開始 return '' endfunc set balloonexpr=GetBalloonContent() func BalloonCallback(result) call balloon_show(a:result) endfunc
|method| としても使用できます:
GetText()->balloon_show()
想定される使用方法は、バルーンの內容の取得が ’balloonexpr’ から開始されることである。そこから非同期メソッドを呼び出し、コールバックから balloon_show() を呼び出す。’balloonexpr’ 自身は空文字列かプレースホルダーを返すことができる。
バルーンを表示できないときは何も起こらず、エラーメッセージも表示されない。
{Vim が |+balloon_eval| もしくは |+balloon_eval_term| 機能付きでコンパイルされたときのみ有效}
{msg} をバルーン內で表示される行に分割する。カレントウィンドウサイズ用に分割され、デバッガ出力を表示するために最適化される。分割された行の |List| を返す。 |method| としても使用できます:
GetText()->balloon_split()->balloon_show()
{Vim が |+balloon_eval_term| 機能付きでコンパイルされたときのみ有效}
ファイル選擇ダイアログを起動。"has("browse")" が |TRUE| を返すとき (幾つかの GUI バージョンに限定) だけ利用可能。
入力フィールドの意味は:
{save} | |TRUE| ならば書込み用ファイルの選擇 |
{title} | ダイアログのタイトル |
{initdir} | ダイアログの始まるディレクトリ |
{default} | ファイル名の省略値 |
ダイアログがキャンセルされるか、何かエラーがあるか、もしくはブラウジングが不可能ならば、空文字列が戾つてくる。
ディレクトリ選擇ダイアログを起動。"has("browse")" が |TRUE| を返すとき (幾つかの GUI バージョンに限定) だけ利用可能。ディレクトリ選擇ダイアログがないシステムにおいてはファイル選擇ダイアログが使はれる。その場合は、指定したいディレクトリの中のファイルを選擇すること。
入力フィールドの意味は:
{title} | ダイアログのタイトル |
{initdir} | ダイアログの始まるディレクトリ |
ダイアログがキャンセルされるか、何かエラーがあるか、もしくはブラウジングが不可能ならば、空文字列が戾つてくる。
バッファリストに {name} といふ名前でバッファを追加します。 もしもファイルのための {name} がすでに存在してゐるなら、バッファの番號を返します。さうでなければ、直近に作成されたバッファの番號を返します。{name} が空文字の場合、新規バッファが常に作成されます。 バッファは ’buflisted’ セットを持つてゐないし、まだロードもされてゐないでせう。バッファにテキストを追加するには次のやうに使用します:
let bufnr = bufadd('someName') call bufload(bufnr) call setbufline(bufnr, 1, ['some', 'text'])
|method| としても使用できます:
let bufnr = 'somename'->bufadd()
結果は數値で、{expr} と呼ばれるバッファが存在すれば |TRUE| となる。{expr} が數値の場合、バッファ番號とみなされる。數値の 0 はカレントウィンドウの代替バッファである。
{expr} が文字列の場合、バッファ名に正確にマッチしなければならない。名前として以下のものが許される:
バッファリストにないバッファも檢索される。
Note:
|:buffers| の出力で、ヘルプファイルは短い名前でリストされてゐるが、bufexists() は長い名前でないと見つけることができない。ある名前を bufexists() に與へて非零になつたとしても、その名前をコマンド |:buffer| に與へる際には |expand()| を使つて展開しなければならない場合がある。特に MS-Windows の "c:\DOCUME~1" といふ 8.3 名形式において。代替ファイル名が存在するかを判定するには "bufexists(0)" を使ふ。
|method| としても使用できます:
let exists = 'somename'->bufexists()
以前の名前: buffer_exists().
戾り値は數値で、{expr} と呼ばれるバッファが存在しリストされてゐる (’buflisted’ オプションがオンになつてゐる) ならば結果は |TRUE| となる。引數 {expr} は |bufexists()| と同じやうに扱はれる。
|method| としても使用できます:
let listed = 'somename'->buflisted()
バッファ {expr} がロードされることを確實にします。バッファ名が存在するファイルを指してゐるなら、ファイルが讀み込まれます。さうでなければバッファは空になるでせう。もしもバッファがすでに讀み込まれてゐるなら、變更はありません。 もしもバッファのファイルのためのスワップファイルが存在してゐるなら、何も言はずにとにかく讀み込まれるでせう。{expr} 引數は |bufexists()| のやうに使はれます。
|method| としても使用できます:
eval 'somename'->bufload()
戾り値は數値で、{expr} と呼ばれるバッファが存在しロード濟み (ウィンドウに表示されてゐるか、隱されてゐるかは問はない) ならば結果は |TRUE| となる。引數 {expr} は |bufexists()| と同じやうに扱はれる。
|method| としても使用できます:
let loaded = 'somename'->bufloaded()
戾り値はバッファの名前。バッファ名はコマンド ":ls
" で表示されるものと同樣。{expr} が省略された場合は、カレントバッファが使はれます。
{expr} が數値ならば、その番號のバッファ名が返される。0 は現在のウィンドウの代替バッファを意味する。{expr} が文字列ならば、バッファ名に對してファイル名マッチング |file-pattern| を行ふパターンとなる。このマッチングは常に、’magic’ をセットし ’cpoptions’ を空にした狀態で行はれる。複數マッチしてしまつた場合には空文字列が返される。
"" や "%" は現在のバッファを意味し、"#" は代替バッファを意味する。
完全マッチのものが優先され、完全マッチがなければ、バッファ名の先頭でのマッチ、末尾でのマッチ、中閒でのマッチが探される。完全マッチのみを探すには、パターン先頭に "^" を、末尾に "$" をつける。
まずバッファリストにあるバッファが探される。そこで 1 個だけマッチが見つかればそれを返す。次にバッファリストにないものが探される。
{expr} が文字列のときに、それをバッファ番號として使ひたいならば、0 を足すことによつて强制的に數値にすることができる:
echo bufname("3" + 0)
|method| としても使用できます:
echo bufnr->bufname()
バッファが存在しないか名前を持つてゐない場合には、空文字列が返される。
bufname("#") | 代替バッファの名前 |
bufname(3) | バッファ 3 の名前 |
bufname("%") | カレントバッファの名前 |
bufname("file2") | "file2" にマッチするバッファの名前 |
以前の名前: buffer_name().
結果はバッファの番號。バッファ番號はコマンド ":ls
" で表示されるものと同樣。{expr} の使ひ方は前述の |bufname()| を參照。
バッファが存在しない場合 -1 が返される。ただし、{create} が與へられて0でないときは、バッファリストに載せない新しいバッファを作成しその番號を返す。例:
let newbuf = bufnr('Scratch001', 1)
空の名前を使用すると、カレントバッファが使用されます。空の名前で新しいバッファを作成するには |bufadd()| を使用します。
bufnr("$") は最後のバッファを意味する:
:let last_buffer = bufnr("$")
結果は存在してゐるバッファのうちで、もつとも大きなバッファ番號です。
Note:
そのバッファ番號より小さいバッファ番號を持つ (ハズの) バッファが、必ずしも全て存在するとは限らないことに注意してください。なぜなら ":bwipeout
" がバッファを消すことができるからです。バッファが存在するかテストするには bufexists() を使ひます。
|method| としても使用できます:
echo bufref->bufnr()
以前の名前: buffer_number()。 bufnr("$") の以前の名前: last_buffer_nr()。
その結果は數値で、バッファ {expr} に關聯付けられた最初のウィンドウの |window-ID|。{expr} の使ひ方は前述の |bufname()| を參照。バッファ {expr} が存在しないか、ウィンドウが無い場合は、-1 が返される。例:
echo "A window containing buffer 1 is " . (bufwinid(1))
現在のタブページのみを處理する。
|method| としても使用できます:
FindBuffer()->bufwinid()
|bufwinid()| と同樣ですが、|window-ID| の代はりにウィンドウ番號を返します。バッファ {expr} が存在しないか、ウィンドウが無い場合には -1 を返します。例:
echo "A window containing buffer 1 is " . (bufwinnr(1))
この番號は |CTRL-W_w| や ":wincmd w
" |:wincmd| で使へます。
|method| としても使用できます:
FindBuffer()->bufwinnr()
カレントバッファの先頭から {byte} 番目の文字が、何行目に含まれるかを返す。これにはカレントバッファの ’fileformat’ に依存した、改行文字も含まれる。先頭の文字にはバイトカウント 1 が與へられる。|line2byte()| と |go| と |:goto| も參照。
|method| としても使用できます:
GetOffset()->byte2line()
{|+byte_offset| 機能付きでコンパイルされたときのみ有效}
文字列 {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()| も參照。{expr} が {nr} 文字以下の場合は -1 を返す。{expr} がちやうど {nr} 文字の場合は文字列の長さ (バイト單位) を返す。
|method| としても使用できます:
GetName()->byteidx(idx)
byteidx() と同じだが、合成文字は個別にカウントされる。例:
let s = 'e' . nr2char(0x301) echo byteidx(s, 1) echo byteidxcomp(s, 1) echo byteidxcomp(s, 2)
1 番目と 3 番目は 3 が出力される (’e’ の長さと合成文字の長さを足すと 3 バイト)。2 番目は 1 が出力される (’e’ は 1 バイト)。’encoding’ に Unicode が設定されてゐるときのみ byteidx() と違ふ動作になる。
|method| としても使用できます:
GetName()->byteidxcomp(idx)
リスト |List| {arglist} の要素を引數として函數 {func} を呼ぶ。{func} は |Funcref| でも函數の名前でもよい。a:firstline と a:lastline にはカレント行が代入される。呼び出した函數の戾り値を返す。
{dict} は "dict" 屬性つきの函數用で、これがローカル變數 "self" に代入される。|Dictionary-function| を參照。
|method| としても使用できます:
GetFunc()->call([arg, arg], dict)
{expr} 以上となる最小の整數を浮動小數點數 |Float| で返す (切り上げる)。{expr} は |Float| か |Number| に評價されなければならない。
例:
echo ceil(1.456) 2.0 echo ceil(-5.456) -5.0 echo ceil(4.0) 4.0
|method| としても使用できます:
Compute()->ceil()
{|+float| 機能つきでコンパイルされたときのみ有效}
ch_ 函數群についてはここに文書化されてゐます: |channel-functions-details|
最も最近の變更の番號を返す。|:undolist| で表示される番號と同じであり、|:undo| コマンドの引數として使ふことができる。變更を行つた直後ではその變更の番號となる。redo を行つた直後は redo された變更の番號となる。undo を行つた直後は undo された變更より 1 小さい番號になる。
{expr} の最初の文字の ASCII コードを返す。例:
char2nr(" ") | returns 32 |
char2nr("ABC") | returns 65 |
{utf8} を省略、またはゼロを指定すると、現在の ’encoding’ が適用される。"utf-8" の場合の例:
char2nr("á") | returns 225 |
char2nr("á"[0]) | returns 195 |
{utf8} に 1 を指定すると、常に utf-8 文字として扱はれる。合成文字は個別の文字として扱はれる。|nr2char()| はこの逆を行ふ。 文字列を文字の番號のリストに變換するには:
let str = "ABC" let list = map(split(str, '\zs'), {_, val -> char2nr(val)})
結果: [65, 66, 67]
|method| としても使用できます:
GetChar()->char2nr()
現在の作業ディレクトリを {dir} に變更する。ディレクトリの變更範圍は、カレントウィンドウのディレクトリによつて異なる:
成功した場合は、前の作業ディレクトリを返します。ディレクトリを復元するには、これを別の chdir() に渡してください。失敗した場合は、空の文字列を返します。
例:
let save_dir = chdir(newdir) if save_dir != "" " ... do some work call chdir(save_dir) endif
|method| としても使用できます:
GetDir()->chdir()
’cindent’ で使はれるのと同じ C 言語用のインデント規則に從つた場合の {lnum} 行目のインデント量を返す。インデント量はスペースで數へられ、’tabstop’ の値は關係ない。{lnum} は |getline()| の場合と同樣に扱はれる。{lnum} が無效な値のときや |+cindent| 機能なしでコンパイルされてゐるときは -1 を返す。|C-indenting| を參照。
|method| としても使用できます:
GetLnum()->cindent()
|matchadd()| と コマンド |:match| によりカレントウィンドウに定義されたマッチをすべて消去する。
{win} が指定されれば、カレントウィンドウではなく指定されたウィンドウあるいはウィンドウ ID を對象にする。
|method| としても使用できます:
GetWin()->clearmatches()
戾り値は數値で、{expr} で與へられる位置の桁番號 (バイトインデックス)。有效な位置は:
. | 現在の位置 |
$ | カレント行の末尾 (カレント行のバイト數 +1 を返す) |
’x | マークxの位置 (マークが設定されてゐない場合 0) |
v | ビジュアルモードでは: ビジュアル選擇領域の開始行 (カーソルがその端)。ビジュアルモード以外ではカーソル位置を返す。すぐに更新される點が |'<| と違ふ。 |
さらに {expr} は [lnum, col] といふ行番號と桁番號のリスト |List| であつてもよい。col に "$" を指定して、ある行の最後の桁を取得するのにとても便利である。"lnum" か "col" が範圍外である場合は 0 を返す。
行番號を取得するには |line()| を使ふ。行番號と桁番號兩方を取得するには |getpos()| を使ふ。畫面上の桁番號を取得するには |virtcol()| を使ふ。
Note:
現在のファイルのマークしか使へないことに注意。
例:
col(".") | カーソルの桁 |
col("$") | カレント行の長さ +1 |
col("’t") | マークtの桁 |
col("’" . markname) | マーク markname の桁 |
先頭の桁は 1 になる。戾り値 0 はエラーを意味する。大文字のマークは他のバッファを指してゐるかもしれない。’virtualedit’ が有效なとき、カーソルが行末を越えてゐると、桁番號は行の長さより 1 大きい値を返す。插入モードで桁番號を取得するには次のマップが使へる:
:imap <F2> <C-O>:let save_ve = &ve<CR> \<C-O>:set ve=all<CR> \<C-O>:echo col(".") . "\n" <Bar> \let &ve = save_ve<CR>
|method| としても使用できます:
GetPos()->col()
插入モード補完の候補を設定する。插入モードでのみ使用できる。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 が插入されてしまはないやうに空文字列を返してゐることに注意。
|method| としても使用でき、ベースは第 2 引數として渡されます:
GetMatches()->complete(col('.'))
候補のリストに {expr} を追加する。’completefunc’ で指定された函數の中でのみ使はれる。
失敗したときは 0 を返す (空文字列かメモリ不足)。候補が追加されたときは 1 を返し、その候補が既にリストに存在するときは 2 を返す。
{expr} の說明については |complete-functions| を參照。’omnifunc’ が返すリストと同じである。
|method| としても使用できます:
GetMoreMatches()->complete_add()
補完候補を探してゐる閒にキーがタイプされたかどうか確認する。補完の檢索に時閒がかかる場合に使はれる。候補の檢索を中斷しようとしてゐるときは |TRUE| を返す。さうでないときは 0 を返す。
’completefunc’ で指定された函數の中でのみ使はれる。
插入モードの補完に關する情報を辭書で返す。|ins-completion| を參照。 要素は以下の通り:
mode | 現在の補完モード名の文字列。値は |complete_info_mode| を參照。 |
pum_visible | ポップアップメニューが表示されてゐるなら |TRUE|。
|pumvisible()| を參照。 |
items | 補完マッチのリスト。各要素は "word", "abbr", "menu", "kind", "info", "user_data" を含む辭書。
|complete-items| を參照。 |
selected | 選擇された補完候補のインデックス。最初のインデックスが 0。どの補完候補も選擇されてゐなければ -1 (入力したテキストのみを表示)。 |
inserted | 入力された文字列。[現時點では未實裝] |
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'])
|method| としても使用できます:
GetItems()->complete_info()
confirm() はユーザーに選擇させるためのダイアログを提供する。戾り値は選擇した番號になる。最初の選擇肢が 1 である。
Note:
confirm() は、ダイアログサポートを有效にしてコンパイルした時にだけ動作する。|+dialog_con| と |+dialog_gui| を參照。
ダイアログ |dialog| には {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" のうちどれか 1 つを指定する。以上のうちの先頭の文字だけで指定できる。{type} が省略された場合、"Generic" が使用される。
ユーザーが <Esc>
や CTRL-C や、その他の割りこみキーでダイアログを中斷した場合、confirm() は 0 を返す。
例:
:let choice = confirm("What do you want?", "&Apples\n&Oranges\n&Bananas", 2) :if choice == 0 : echo "make up your mind!" :elseif choice == 3 : echo "tasteful" :else : echo "I prefer bananas myself." :endif
GUI のダイアログではボタンが使用される。ボタンの配置は ’guioptions’ の ’v’ フラグに依存する。もしも ’v’ フラグが含まれてゐるのなら、ボタンは常に垂直に配置される。さうでなければ水平に配置しようと試みられる。水平配置がうまくマッチしない場合は、垂直配置が使はれる。幾つかのシステムでは常に水平配置が使はれる。
|method| としても使用できます:
BuildMessage()->confirm("&Yes\n&No")
{expr} のコピーを作る。數値と文字列の場合は、{expr} そのものとコピーの閒に違ひはない。{expr} がリスト |List| の場合は淺いコピーを作る。つまり元のリストを變更してもコピーは變更されず、逆も同じである。しかし要素は共通で、片方の要素に對し變更を加へると、もう一方の要素も變更される |Lists|。辭書 |Dictionary| はリスト |List| と同樣な方法でコピーされる。|deepcopy()| も參照。 |method| としても使用できます:
mylist->copy()
{expr} の餘弦 (コサイン) をラジアンで浮動小數點數 |Float| で返す。{expr} は |Float| または |Number| に評價されなければならない。
例:
:echo cos(100) 0.862319 :echo cos(-4.01) -0.646043
|method| としても使用できます:
Compute()->cos()
{|+float| 機能つきでコンパイルされたときのみ有效}
{expr} の雙曲線餘弦 (ハイパボリックコサイン) を返す。値は [1, inf] の範圍の浮動小數點數 (|Float|)。{expr} は浮動小數點數 (|Float|) か 數値 (|Number|) でなければならない。
例:
:echo cosh(0.5) 1.127626 :echo cosh(-0.5) -1.127626
|method| としても使用できます:
Compute()->cosh()
{|+float| 機能を有效にしてコンパイルしたときのみ有效}
文字列 |String|、リスト |List| または辭書 |Dictionary| {comp} の中に値 {expr} が何囘現れるかを返す。
{start} が指定されたときはそのインデックスの要素から檢索を開始する。{start} は {comp} がリストの場合のみ使用できる。
{ic} が指定され、|TRUE| の場合は大文字・小文字は區別されない。
{comp} が文字列の場合、オーバーラップしてゐない {expr} の回數が返される。{expr} が空文字列の場合は 0 が返る。
|method| としても使用できます:
mylist->count(val)
|cscope| 接續が存在するかどうか判定する。引數が 1 個も指定されなかつた場合、戾り値は以下のやうになる:
0 | cscope が利用できない (コンパイル時に無效化されてゐる) または cscope 接續が存在しない場合 |
1 | 1 個以上の cscope 接續が存在する場合 |
引數が與へられた場合は次のやうになる。{num} は、接續の存在を確認する際のマッチング方法を指定する。
{num} | 存在確認の方法 |
---|---|
0 | 引數なしの場合と同じ (例: "cscope_connection()")。 |
1 | {prepend} を無視し、{dbpath} に部分マッチを行ふ。 |
2 | {prepend} を無視し、{dbpath} に部分マッチを行ふ。 |
3 | {prepend} を使用し、{dbpath} と {prepend} に部分マッチを行ふ。 |
4 | {prepend} を使用し、{dbpath} と {prepend} に完全マッチを行ふ。 |
Note:
以上のどの場合も文字列の比較は大文字・小文字を區別する。
例: ":cs show
" の表示が以下のやうになつたとする:
# pid database name prepend path 0 27664 cscope.out /usr/local
實行 戾り値 cscope_connection() 1 cscope_connection(1, "out") 1 cscope_connection(2, "out") 0 cscope_connection(3, "out") 0 cscope_connection(3, "out", "local") 1 cscope_connection(4, "out") 0 cscope_connection(4, "out", "local") 0 cscope_connection(4, "cscope.out", "/usr/local") 1
{lnum} 行目の {col} 桁目 (バイトで數へる) にカーソルを移動させる。桁番號 {col} は 1 から始まる。
引數に {list} が 1 つだけ指定された場合は、それは要素が 2 個か 3 個、または 4 個の |List| として解釋される:
[{lnum}, {col}] |
[{lnum}, {col}, {off}] |
[{lnum}, {col}, {off}, {curswant}] |
これは |getpos()| や |getcurpos()| の戾り値とほぼ同じである。違ひは最初の要素がないこと。
この函數を呼んでもジャンプリストは變更されない。{lnum} がバッファの行數よりも大きい場合は、最後の行へ移動する。{lnum} が 0 の場合はカレント行に留まる。{col} がその行のバイト數より大きい場合は、その行の最後の文字へ移動する。
{col} が 0 の場合は、カレント桁に留まる。{curswant} が與へられた場合は、縱方向移動の優先的列番號として使はれる。指定がない場合は {col} が使はれる。
’virtualedit’ が有效のとき、{off} は文字の先頭からの畫面上のオフセットを指定する。例へば、<Tab> の中の位置や最後の文字より後などへも移動できる。カーソルを移動できたときは 0 を、できなかつたときは -1 を返す。
|method| としても使用できます:
GetCursorPos()->cursor()
主にデバッグしてゐるプログラムに割り込むために使用される。プロセス {pid} に對して SIGTRAP を發生させる。關係のないプロセスへの振る舞ひは未定義である。|terminal-debugger| を參照。
{MS-Windows 上でのみ有效}
|method| としても使用できます:
GetPid()->debugbreak()
{expr} のコピーを作る。數値と文字列の場合は、{expr} そのものとコピーの閒に違ひはない。
{expr} がリスト |List| の場合は完全なコピーを作る。つまり元のリストを變更してもコピーは變更されず、逆も同じである。要素の 1 つがリストまたは辭書 |Dictionary| であるときは、再歸的にコピーが作成される。よつてコピーの要素に變更を加へても元のリストの要素は變更を受けない。
辭書 |Dictionary| はリスト |List| と同樣な方法でコピーされる。{noref} が省略された、または 0 のとき、含まれてゐるリストや辭書は 1 度だけコピーされる。全ての參照はこのただ 1 つのコピーを指す。{noref} が 1 の場合、リストや辭書は現れるたびに新しいコピーが作られる。そのため循環參照があると deepcopy() は失敗する。
ネストは 100 レベルまで可能である。それ以上參照を繰り返してゐる要素があると、{noref} が 1 の場合は失敗する。|copy()| も參照。
|method| としても使用できます:
GetObject()->deepcopy()
{flags} を指定しないもしくは {flags} を空で指定した場合: ファイル {fname} を削除する。これは {fname} がシンボリックリンクの時でも動作する。
{flags}が "d" の場合: ディレクトリ {fname} を削除する。これはディレクトリ {fname} が空でない場合は失敗する。
{flags} が "rf" の場合: ディレクトリ {fname}、その中に含むすべてのものを再歸的に削除する。氣をつけて!
Note:
MS-Windows では、使用中のディレクトリを削除することはできない。
シンボリックリンクは、それが示すものではなく、リンク自身が削除される。
結果は數値であり、削除に成功すれば 0、削除に失敗すれば -1 である。
リスト |List| から項目を削除するには |remove()| を使ふ。バッファから行を削除するには |:delete| もしくは |deletebufline()| を使ふ。
|method| としても使用できます:
GetName()->delete()
{first} から {last} (を含む) までの行をバッファ {expr} から削除する。{last} が省略されてゐる場合、{first} 行だけを削除する。成功時には 0 が返され、失敗時には 1 が返される。
この函數はロードされたバッファに對してのみ機能します。必要であれば、最初に |bufload()| を呼び出してください。
{expr} の使ひ方は前述の |bufname()| を參照。
{first} および {last} は |getline()| と同樣に扱はれる。
Note:
|line()| の使用はカレントバッファを參照することに注意。バッファ {expr} 內の最後の行を參照するには "$" を使用する。
|method| としても使用できます:
GetBuffer()->deletebufline(1)
autocommand が實行され FileType イベントが一度でも起こつてゐれば、|TRUE| が返る。スクリプトの FileType イベントが、複數回呼び出されるのを囘避するのに使へる。|FileType|
‘:setf FALLBACK
‘ が使用されてゐる場合は |FALSE| を返す。
他のファイルへ移動すると、このカウンタはリセットされる。よつて實際は、カレントバッファに對して FileType イベントが發生したかどうかを判定する。他のバッファを開く自動コマンドの中でこの函數を使つて ’filetype’ を設定し、構文ファイルを讀み込むために使へる。
{lnum} 行目より上にある削除行の數を返す。削除行とは、差分モードで他方のウィンドウにテキストが插入されてゐることを表す行のことである。削除行は表示はされてゐるが、實際にはバッファに存在しない。
{lnum} は |getline()| と同樣に扱はれる。つまり "." はカレント行となり、"’m" はマーク m を表す。
カレントウィンドウが差分モードでないときは 0 を返す。
|method| としても使用できます:
GetLnum()->diff_filler()
差分モードで {lnum} 行 {col} 桁 (バイト單位) の位置のハイライト ID を返す。カレント行に變更がないときは 0 を返す。
{lnum} は |getline()| と同樣に扱はれる。つまり "." はカレント行となり、"’m" はマーク m を表す。
先頭の桁の {col} は 1 となり、最初の行の {lnum} は 1 となる。
ハイライト ID は |synIDattr()| を使つて構文情報を得るために使へる。
|method| としても使用できます:
GetLnum()->diff_hlID(col)
すべての環境變數を辭書として返す。このやうに環境變數が存在するかどうかを確認できる:
:echo has_key(environ(), 'HOME')
Note:
變數名はキャメルケース (CamelCase) でも構はない。大文字と小文字を區別しないためにこれを使用すること::echo index(keys(environ()), 'HOME', 0, 1) != -1
{expr} が空なら 1 を、さうでなければ 0 を返す。
長いリスト |List| に對しては長さを 0 と比較するよりこちらの方がずつと高速である。
|method| としても使用できます:
mylist->empty()
{string} 內に現れる {chars} の文字をバックスラッシュでエスケープする。例:
:echo escape('c:\program files\vim', ' \')
結果:
c:\\program\ files\\vim
|shellescape()| および |fnameescape()| も參照。
|method| としても使用できます:
GetText()->escape(' \')
{string} を評價し、値を返す。|string()| の戾り値を元の値に戾すのに非常に便利である。數値、浮動小數點數、文字列、Blobs、およびそれらの複合に對して動作する。實際に存在する函數への |Funcref| に對しても動作する。
|method| としても使用できます:
argv->join()->eval()
イベントハンドラの中では 1 を返す。つまり、ユーザーの文字入力を待つてゐる閒に、例へばファイルをドラッグ&ドロップするなどの割り込みがされたことを表す。このときは對話的なコマンドは使へない。イベントハンドラの中でないときは 0 を返す。
{expr} といふ名前の實行可能ファイルが存在するかどうか判定する。{expr} は引數を何もつけないプログラム名でなければならない。executable() は $PATH
と通常のプログラム檢索ディレクトリを參照する。
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 | このシステム上では實裝されてゐない |
|exepath()| は、實行ファイルの絕對パスを取得するのに使用することができる。
|method| としても使用できます:
GetCommand()->executable()
單一あるいは複數の Ex コマンドを實行して、出力を文字列として返す。 {command} は文字列かリストを使へる。リストの場合はそれらの行は一行ずつ實行される。
以下と同等である:
redir => var {command} redir END
オプションの {silent} の引數は以下の値を取ることができる:
"" | ‘:silent‘ を使はない |
"silent" | ‘:silent‘ を使ふ |
"silent!" | ‘:silent!‘を使ふ |
デフォルトは "silent" である。
Note:
"silent!" は ‘redir‘ とは異なり、エラーメッセージは削除されることに注意すること。もし外部コマンドを使つて畫面がをかしくなる樣であれば、代はりに ‘system()‘ を使ふことができる。
{command} の中のどこかで ‘:redir‘ を使ふことができない。
行のリストを得るために、出力に |split()| を使ふことができる:
split(execute('args'), "\n")
現在のウィンドウとは別のウィンドウでコマンドを實行するには ‘win_execute()
‘ を使用すること。
再歸的に使用されると、再歸呼び出しの出力は、上位呼び出しの出力に含まれません。
|method| としても使用できます:
GetCommand()->execute()
{expr} が實行ファイルで、それが絕對パス、相對パス、または $PATH
の中に存在する場合は、そのフルパスを返す。
Note:
{expr} が "./" で開始してゐる場合はカレントディレクトリが使はれる。Vim のパスを得る場合に問題になるかもしれない:echo exepath(v:progpath){expr} が
$PATH
の中に見つからないか、それが實行ファイルではなかつた場合は空文字列が返る。
|method| としても使用できます:
GetCommand()->exepath()
結果は數値で、變數 {expr} が存在すれば |TRUE| となり、さうでなければ 0 となる。
ある機能がサポートされてゐるか判定するには |has()| を使ふ。
ファイルが存在するかを判定するには |filereadable()| を使ふ。
引數 {expr} は文字列で次のうちいづれかである。
Vim オプション (存在するかだけを判定し、本當に動作するかは判定しない)
動作する Vim オプション
環境變數 (空文字列と比較することでも判定できる)
組み込み函數 (|functions| 參照) かユーザーが定義した函數 (|user-functions| 參照)。また Funcref である變數に對しても動作する。
內部變數(|internal-variables|)。|curly-braces-names|, |Dictionary| の要素、|List| の要素などに對しても動作する。インデックスの評價で無效な式であるとエラーメッセージが出る可能性があることに注意。例:
:let l = [1, 2, 3] :echo exists("l[5]") 0 :echo exists("l[xx]") E121: Undefined variable: xx 0
ex コマンド: 組み込みコマンド、ユーザー定義コマンド、コマンド修飾子 |:command|。
戾り値:
コマンドが定義されてゐるかどうかを判定するには、必ず戾り値が2であるかを確認すること。
|:2match| のコマンド。
|:3match| のコマンド。
このイベントに對する自動コマンド定義
このイベントとパターンに對する自動コマンド定義(パターンは文字そのままに解釋され、自動コマンドのパターンと 1 文字ずつ比較される)
自動コマンドグループが存在するか
このグループとイベントに對して自動コマンドが定義されてゐるか
このグループ、イベント、パターンに對する自動コマンド定義
このイベントに對する自動コマンドがサポートされてゐるか
例:
exists("&shortname") exists("$HOSTNAME") exists("*strftime") exists("*s:MyFunc") exists("bufcount") exists(":Make") exists("#CursorHold") exists("#BufReadPre#*.gz") exists("#filetypeindent") exists("#filetypeindent#FileType") exists("#filetypeindent#FileType#*") exists("##ColorScheme")
シンボルである&/$/*と名前の閒には、空白文字があつてはならない。
ある少數の場合では無視されるが、名前の後に餘計な文字があつてはならない。將來はもつと嚴格になる可能性があるので、現在許されるからといつて賴つてはならない。 正しい例:
exists(":make")
正しくない例:
exists(":make install")
Note:
引數は變數そのものではなく、文字列でなければならない。例へば、次は動作しない:exists(bufcount)これは變數 "bufcount" の存在を判定するのではなく、bufcount の値を渡し、それが存在するかどうか判定してしまふ。
|method| としても使用できます:
Varname()->exists()
{expr} の指數を返す。値は [0, inf] の範圍の浮動小數點數 (|Float|)。{expr} は浮動小數點數 (|Float|) か數値 (|Number|) でなければならない。 例:
:echo exp(2) 7.389056 :echo exp(-1) 0.367879
|method| としても使用できます:
Compute()->exp()
{|+float| 機能を有效にしてコンパイルしたときのみ有效}
ワイルドカードと {expr} 內の特殊なキーワードを展開する。’wildignorecase’ が適用される。
{list} が指定されその値が |TRUE| なら、結果はリストで返される。さうでない場合は結果は文字列で返される。その場合、複數のマッチがあるときはそれらは文字 <NL> で區切られる。
Note:
バージョン5.0 では空白文字が用ゐられ、スペースを含むファイル名について問題を引き起こしていた
展開が失敗した場合、結果は空文字列となる。{expr} が ’%’, ’#’, ’<’ で始まらない限り、存在しないファイル名といふのは、結果の文字列には含まれない。下記を參照のこと。
{expr} が ’%’ か ’#’ か ’<’ で始まる場合には、展開は |cmdline-special| のやうに、變換子を受け付け、それらに關聯付けられた變換が施される。ここに簡單な槪略を示す:
% | 現在のファイル名 |
# | 代替バッファのファイル名 |
#n | n 番の代替バッファのファイル名 |
<cfile> | カーソルの下のファイル名 |
<afile> | autocmd のファイル名 |
<abuf> | autocmd のバッファ名 |
<sfile> | 取り込み (source) 中のファイル名、函數名 |
<slnum> | 取り込み (source) 中の行番號もしくは函數の行番號 |
<sflnum> | 函數內であつてもスクリプトファイルの行番號 |
<cword> | カーソル下の單語 (word) |
<cWORD> | カーソル下の單語 (WORD) |
<client> | 最後に受け取つたメッセージの {clientid} |server2client()| |
變換子:
:p | フルパス名を展開 |
:h | ヘッド (ディレクトリ) |
:t | テイル (ファイル名だけ) |
:r | 擴張子が削除される |
:e | 擴張子だけ |
例:
:let &tags = expand("%:p:h") . "/tags"
Note:
’%’ や ’#’ や ’<’ で始まる文字列を展開する時には、それに續くテキストは無視されることに注意。從つてこれは正しくない::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()
‘:edit
‘ などの Ex コマンドに對しておこなはれてゐるやうに、{expr} の特殊な項目を展開します。これは {expr} の中のどこでも、|expand()| のやうな特殊なキーワードと環境變數を展開します。"~user" および "~/path" は冒頭でのみ展開されます。展開された文字列を返します。
例:
:echo expandcmd('make %<.o')
|method| としても使用できます:
GetCommand()->expandcmd()
{expr1} と {expr2} は兩方ともリスト |List| であるか、兩方とも辭書 |Dictionaries| でなければならない。
兩方ともリスト |Lists| であるなら、{expr2} を {expr1} に付け加へる。{expr3} が指定された場合は、{expr1} の第 {expr3} 番目の要素の前に {expr2} の要素を插入する。{expr3} が 0 のときは最初の要素の前に插入する。{expr3} が len({expr1}) に等しいときは末尾に {expr2} が付け加へられる。
例:
:echo sort(extend(mylist, [7, 5])) :call extend(mylist, [2, 3], 1)
{expr1} が {expr2} と同じリストである場合、コピーされる要素の數はリストの元の長さと同じである。例として {expr3} が 1 のとき、最初の要素の N 個の新しいコピーが插入される (ここで N はリストの元の長さ)。
リストに 1 個の要素を加へるには |add()| を使ふ。2 つのリストを連結して新しいリストを作るには演算子 + を使ふ:
:let newlist = [1, 2, 3] + [4, 5]
兩方とも辭書 |Dictionaries| である場合: {expr2} の全要素を {expr1} に加へる。
{expr1} と {expr2} で共通のキーがある場合は、{expr3} によつて動作が決まる:
{expr3} = "keep" の場合: | {expr1} の値そのままにする |
{expr3} = "force" の場合: | {expr2} の値で上書きする |
{expr3} = "error" の場合: | エラーメッセージを表示する |
{expr3} が省略された場合は "force" と同じになる。
{expr2} が空でないならば {expr1} が變更される。必要ならば最初に {expr1} のコピーを作ること。
{expr2} は變更されない。
{expr1} がロックされてゐて、かつ {expr2} が空でない場合は操作は失敗する。
{expr1} を返す。
|method| としても使用できます:
mylist->extend(otherlist)
{string} 中の各文字を、あたかもマッピングまたはユーザーによつてタイプされたかのやうに、處理キューに入れる。
デフォルトではこれらの文字は先行入力バッファの末尾に付け足される。そのためマッピングを展開してゐる途中であれば、これらの文字はマッピングを展開した後に來ることになる。他の文字の前に插入するには、’i’ フラグを使用する。それらはマッピングからの任意の文字の前の插入の次に實行される。
この函數は、{string} 中の文字が處理されるまでは待たない。
特殊なキーを {string} に含めるにはダブルクォートと "\..." 記法を使ふ (|expr-quote| を參照)。例へば、feedkeys("\<CR>") は <Enter>
キーの押下をシミュレートする。しかし feedkeys(’\<CR>’) とすると、この文字の通り 5 文字を插入する。
役に立つかもしれない特別なコードは <Ignore> だ。それは何もせずに文字の待機を終了する。
{mode} は以下の文字フラグを含む文字列:
’m’ | キーをマップ展開する。これが既定である。{mode} が省略されたときは、插入されたキーはマップ展開の對象になる。 |
’n’ | キーをマップ展開しない。 |
’t’ | キーをタイプされたかのやうに扱ふ。さうでない場合はマッピングから展開されたかのやうに扱はれる。これは undo や折り疊みの展開などで違ひが現れる。 |
’L’ | 低レベル入力。Unix または GUI を使用してゐる場合にのみ機能する。キーは端末から來てゐるかのやうに使はれる。他のフラグは使用されない。 |
’i’ | 追加する代はりに文字を插入する。(上記參照) |
’x’ | 先行入力が空になるまでコマンドを實行する。これは ":normal! " を使ふのと似てゐる。’x’ なしで數回 feedkeys() を呼んだ後、’x’ ありで 1 回 ({string} が空でも可能) feedkeys() を呼ぶことで先行入力をすべて實行できる。
|
’!’ | ’x’ と一緖に使用すると插入モードを終了しない。タイマーが少し後で插入モードを終了するやうに設定されてゐるときにテストで使用できる。CursorHoldI のテストに便利である。 |
戾り値は常に0。
|method| としても使用できます:
GetInput()->feedkeys()
結果は數値で、{file} といふファイルが存在し、讀み込むことが可能ならば |TRUE| となる。ファイル {file} が存在しないかディレクトリだつた場合には、結果は |FALSE| となる。引數 {file} は文字列として使へればどのやうな表現でもよい。ファイルが讀み込み可能でなくてもよい場合には |glob()| を使ふ。 {file} はそのまま使用されるため、最初にワイルドカードを展開することを推奬します:
echo filereadable('~/.vimrc') 0 echo filereadable(expand('~/.vimrc')) 1
|method| としても使用できます:
GetName()->filereadable()
以前の名前: file_readable()。
結果は數値で、{file} といふファイルが存在し、書き込むことが可能ならば 1 となる。ファイル {file} が存在しないか書き込み不可能である場合には、結果は 0 となる。{file} がディレクトリであり、書き込み可能な場合、結果は 2 となる。
|method| としても使用できます:
GetName()->filewriteable()
{expr1} はリスト |List| または辭書 |Dictionary| でなければならない。{expr1} の各要素に對して {expr2} を評價し、その結果が 0 ならばリストまたは辭書からその要素を削除する。{expr2} は文字列 |string| または函數參照 |Funcref| でなければならない。
{expr2} が文字列 |string| の場合、{expr2} の內部では |v:val| が現在の要素の値を保持してゐる。辭書の場合は |v:key| が現在の要素のキーを保持してをり、リストの場合は |v:key| が現在の要素のインデックスを保持してゐる。 例:
call filter(mylist, 'v:val !~ "OLD"')
は要素 "OLD" を削除する。
call filter(mydict, 'v:key >= 8')
は 8 未滿のキーを持つ要素を削除する。
call filter(var, 0)
は全要素を削除する。つまりリスト |List| または辭書 |Dictionary| をクリアする。
Note:
{expr2} は式を表す文字列である。バックスラッシュを二重にしなくても濟むやうに |literal-string| を使ふとよいだらう。ただしその場合はシングルクォートを二重にしなければならない。
{expr2} が |Funcref| の場合は、2 つの引數で呼び出される:
函數は、その要素を保持すべきときは |TRUE| を返さなければならない。リストの奇數版目の要素を保持する例:
func Odd(idx, val) return a:idx % 2 == 1 endfunc call filter(mylist, function('Odd'))
|lambda| を使へばより短く書ける:
call filter(myList, {idx, val -> idx * val <= 42})
"val" を使はない場合は省略できる:
call filter(myList, {idx -> idx % 2 == 1})
この操作はその場で (in-place) 行はれる。リスト |List| や辭書 |Dictionary| を變更したくない場合は最初にコピーを作ること:
:let l = filter(copy(mylist), 'v:val =~ "KEEP"')
{expr1} のリスト |List| または辭書 |Dictionary| をフィルターした結果を返す。{expr2} を評價してゐる最中にエラーが發生した場合は、{expr1} 內のそれ以降の要素の處理は行はれない。{expr2} が函數參照の場合、函數が "abort" フラグつきで定義されてゐない限り、函數內のエラーは無視される。
|method| としても使用できます:
mylist->filter(expr2)
{path} から {name} といふ名前のディレクトリを探す。ディレクトリを上方・下方のどちらにも再歸的に檢索できる。{path} の記法については |file-searching| を參照。
最初に見つかつたディレクトリのパスを返す。そのディレクトリがカレントディレクトリの下にある場合は相對パスを返す。さうでなければ絕對パスを返す。{path} が省略されたとき、または空のときはオプション ’path’ の値が使はれる。
省略可能な引數 {count} が指定されたときは、最初に見つかつたディレクトリでなく、{count} 番目に見つかつたディレクトリを返す。{count} が負の場合は、見つかつたディレクトリ全てのリスト |List| を返す。これは ex コマンド |:find| によく似てゐる。
{|+file_in_path| 機能付きでコンパイルされたときのみ利用可能}
|method| としても使用できます:
GetName()->finddir()
|finddir()| と同樣だが、ディレクトリでなくファイルを檢索する。’suffixesadd’ が適用される。
例:
:echo findfile("tags.vim", ".;")
この例は、カレントファイルがあるディレクトリから上方に "tags.vim" を見つけるまで再歸的に檢索する。
|method| としても使用できます:
GetName()->findfile()
{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) 0
|method| としても使用できます:
Compute()->float2nr()
{|+float| 機能つきでコンパイルされたときのみ有效}
{expr} 以下の最大の整數を |Float| で返す (切り捨て)。{expr} は |Float| または |Number| に評價されなければならない。 例:
echo floor(1.856) 1.0 echo floor(-5.456) -6.0 echo floor(4.0) 4.0
|method| としても使用できます:
Compute()->floor()
{|+float| 機能つきでコンパイルされたときのみ有效}
{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.13
|method| としても使用できます:
Compute()->fmod(1.22)
{|+float| 機能を有效にしてコンパイルしたときのみ有效}
コマンド引數のファイル名として使ふために {string} をエスケープする。’%’ や ’|’ など特別な意味を持つ全ての文字がバックスラッシュでエスケープされる。
特別な文字とは、ほとんどのシステムにおいて" \t\n*?[{‘$\\%#’\"|!<" である。ファイル名にバックスラッシュが現れるシステムにおいては ’isfname’ の値に依存する。
先頭の ’+’ と ’>’ もエスケープされる (|:edit| と |:write| の引數では特別な意味を持つ)。{string} が "-" である場合もエスケープされる (|:cd| の引數では意味を持つ)。 例:
:let fname = '+some str%nge|name' :exe "edit " . fnameescape(fname)
上記は次と同じ結果になる:
edit \+some\ str\%nge\|name
|method| としても使用できます:
GetName()->fnameescape()
ファイル名 {fname} を {mods} にしたがつて變更する。{mods} はコマンドラインで使はれるのと同樣な文字列である。詳細は |filename-modifiers| を參照。 例:
:echo fnamemodify("main.c", ":p:h")
結果:
/home/mool/vim/vim/src/
Note:
{fname} の中の環境變數は展開されない。環境變數を展開させるには |expand()| を使ふこと。
|method| としても使用できます:
GetName()->fnamemodify(':p:h')
結果は數値。{lnum} 行目が閉ぢた折り疊みの中にあるなら、その折り疊みを構成する最初の行の行番號を返す。{lnum} 行目が閉ぢた折り疊みに入つてゐないなら -1 を返す。
|method| としても使用できます:
GetLnum()->foldclosed()
結果は數値。{lnum} 行目が閉ぢた折り疊みの中にあるなら、その折り疊みを構成する最後の行の行番號を返す。{lnum} 行目が閉ぢた折り疊みに入つてゐないなら -1 を返す。
|method| としても使用できます:
GetLnum()->foldclosedend()
カレントバッファの {lnum} 行目の折り疊みレベルを表す數値を返す。折り疊みがネストしてゐるときは一番下のレベルを返す。{lnum} 行目に折り疊みがまつたくないときは 0 を返す。折り疊みが開いてゐるか閉ぢてゐるかは關係ない。(’foldexpr’ の中で) 折り疊みを更新してゐる最中に呼ぶと、まだ折り疊みを更新してゐなく、折り疊みレベルが未知の行に對しては -1 を返す。特別な場合として、普通は 1 行前のレベルは取得できる。
|method| としても使用できます:
GetLnum()->foldlevel()
閉ぢた折り疊みに表示する文字列を返す。これはオプション ’foldtext’ のデフォルトの函數であり、’foldtext’ を評價してゐるときにだけ呼ぶようにすべきである。この函數は變數 |v:foldstart|, |v:foldend|, |v:folddashes| を使用する。 戾り値の文字列は次のやうになる:
+-- 45 lines: abcdef
先導するダッシュ (-) の數は折り疊みレベルによつて決まる。"45" はその折り疊みに含まれてゐる行數である。"abcdef" はその折り疊みの中の最初の空行でない行のテキストである。行頭の空白と、"//" や "/*"、’foldmarker’ と ’commentstring’ に設定されてゐる文字列は削除される。
實際に折り疊みテキストを表示するときには、行の殘りは ’fillchars’ で設定した折り疊み用の文字で埋められる。
{|+folding| 機能付きでコンパイルされたときのみ利用可能}
{lnum} 行目の閉ぢた折り疊みに表示される文字列を返す。’foldtext’ を適切なコンテキストの中で評價する。{lnum} 行目に閉ぢた折り疊みがないときは空文字列を返す。 {lnum}は |getline()| のときと同樣に扱はれる。つまり "." はカレント行、"’m" はマーク m を表す。折り疊まれたテキストを HTML などにエクスポートするときに有用。
{|+folding| 機能付きでコンパイルされたときのみ利用可能}
|method| としても使用できます:
GetLnum()->foldtextresult()
Vim のウィンドウを前面に移動する。この函數はクライアントから Vim サーバーへ送ると便利である。|remote_send()| Win32 では自分自身のウィンドウを前面に持つてくることが必ずしも許可されてゐないので、動作しないかもしれない。そのときは代はりに |remote_foreground()| を使ふこと。
{Win32, Athena, Motif, GTK いづれかの GUI 版と Win32 コンソール版でのみ利用できる}
|function()| と同樣である。ただし、返された Funcref は函數を名前ではなく參照で檢索する。これは函數 {name} が後で再定義されるときに重要である。
|function()| とは違ひ、{name} はユーザー定義函數として存在してゐなければならない。また、autoload 函數についても同樣である。{name} は組込み函數であつてはならない。
|method| としても使用できます:
GetFuncname()->funcref([arg])
函數 {name} を參照する |Funcref| の變數を返す。{name} はユーザー定義函數でも組み込み函數でもよい。
ここで {name} は函數の參照、もしくは部分適用である。部分適用であるとき、それに格納されてゐる辭書が使用され、{dict} 引數が使用できない。例:
let FuncWithArg = function(dict.Func, [arg]) 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')
函數は次のやうに呼び出す:
call Callback('one', 'two', 'name')
|method| の場合:
func Callback(one, two, 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')
これは次のやうに函數を呼び出す:
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() は必要ない。以下の 2 つは同等である:
let Func = function('Callback', context) let Func = context.Callback
引數のリストと辭書を同時に使用することもできる:
function Callback(arg1, count) dict ... let context = {"name": "example"} let Func = function('Callback', ['one'], context) ... call Func(500)
これは次のやうに函數を呼び出す:
call context.Callback('one', 500)
|method| としても使用できます:
GetFuncname()->function([arg])
循環參照を持ち、使はれてゐないリスト |List|、辭書 |Dictionaries|、チャネル |Channels|、ジョブ |Jobs| をクリーンアップする。
これはメモリ不足に陷つたときや、’updatetime’ 經過後ユーザーのキー入力を待つてゐるときに自動的に行はれるので、この函數を呼ぶ必要があることはほとんどない。循環參照を持たない要素は、使はれなくなつたとき必ず解放される。長時閒實行されるスクリプトの中で循環參照を持つ非常に大きなリスト |List| や辭書 |Dictionary| を削除したときに有用である。
省略可能な引數 {atexit} に 1 を指定すると、Vim を終了するときにもガーベッジコレクションが行はれる。これはメモリリークを發見するのに役に立つ。
ガーベッジコレクションはすぐには實行されず、安全な場合のみ實行される。これはユーザーが文字を入力するのを待つてゐるときである。ガーベッジコレクションを强制するには、すぐに |test_garbagecollect_now()| を使用すること。
リスト |List| {list} から {idx} 番目の要素を取得します。この要素を取得できないときは {default} を返します。{default} が省略されたときは 0 を返します。
|method| としても使用できます:
mylist->get(idx)
|Blob| {blob} から {idx} 番目のバイトを取得する。このバイトを取得できないときは {default} を返す。{default} が省略されたときは -1 を返す。
辭書 |Dictionary| {dict} からキー {key} に關聯づけられた値を取得します。この要素を取得できないときは {default} を返します。{default} が省略されたときは 0 を返します。便利な例:
let val = get(g:, 'var_name', 'default')
g:var_name の値が存在する場合はこれを取得して使用しますが、存在しない場合は ’default’ を返します。
Funcref {func} から項目を取得する。{what} の可能な値は:
"name" | 函數名 |
"func" | 函數 |
"dict" | 辭書 |
"args" | 引數リスト |
バッファの情報を辭書のリストとして取得する。
引數なしの場合、すべてのバッファに關する情報が返される。
引數が辭書の場合、指定された條件を滿たすバッファのみが返される。{dict} には以下のキーを指定できる:
buflisted | リストされたバッファのみを含む。 |
bufloaded | ロードされたバッファのみを含む。 |
bufmodified | 修正されたバッファのみを含む。 |
それ以外の場合、{expr} は情報を返す特定のバッファを指定する。{expr} の使用については、上記の |bufname()| を參照。バッファが見つかつた場合、返される List には 1 つの項目がある。それ以外の場合、結果は空のリストになる。
返される各 List 項目は、次のエントリを持つ辭書である:
bufnr | バッファ番號。 | ||||||
changed | バッファが變更されてゐる場合は TRUE。 | ||||||
changedtick | バッファに加へられた變更の數。 | ||||||
hidden | バッファが隱されてゐる場合は TRUE。 | ||||||
lastused | バッファが最後に使用されたときの |localtime()| のやうな秒單位のタイムスタンプ。
{|+viminfo| 機能付きでコンパイルされたときのみ有效} | ||||||
listed | バッファがリストされてゐる場合は TRUE。 | ||||||
lnum | バッファ內の現在の行番號。 | ||||||
loaded | バッファがロードされてゐる場合は TRUE。 | ||||||
name | バッファ內のファイルへのフルパス | ||||||
signs | バッファに配置された目印のリスト。各リスト項目は、次のフィールドを含む辭書である:
| ||||||
variables | バッファローカル變數の辭書への參照 | ||||||
windows | バッファを表示する |window-ID| のリスト | ||||||
popups | バッファを表示する ポップアップ |window-ID| のリスト |
例:
for buf in getbufinfo() echo buf.name endfor for buf in getbufinfo({'buflisted':1}) if buf.changed .... endif endfor
バッファローカルオプションを取得するには:
getbufvar({bufnr}, '&option_name')
バッファ {expr} の {lnum} 行目から {end} 行目まで (兩端含む) の行からなるリスト |List| を返す。{end} が省略されたときは {lnum} 行目だけからなるリストを返す。
{expr} の指定の仕方については |bufname()| を參照。
{lnum} と {end} では "$" でバッファの最後の行を表すことができる。それ以外は數値でなければならない。
{lnum} が 1 より小さいときや、バッファの行數より大きいときは空リスト |List| を返す。
{end} がバッファの行數より大きいときは、バッファの行數が設定されたものとして扱ふ。{end} が {lnum} 行目より前に設定された場合は空リスト |List| を返す。
この函數は讀み込まれてゐるバッファに對してのみ動作する。既にアンロードされてゐるバッファや存在しないバッファに對しては空リスト |List| を返す。
例:
:let lines = getbufline(bufnr("myfile"), 1, "$")
|method| としても使用できます:
GetBufnr()->getbufline(lnum)
バッファ {expr} のオプションの値やバッファローカル變數 {varname} の値を返す。
Note:
"b:" をつけない變數名を指定すること。
{varname} が空文字列の場合、全てのバッファローカル變數からなる辭書を返す。
{varname} が "&" に等しいとき、すべてのバッファローカルオプションを持つ辭書を返す。さうでなく、{varname} が "&" で始まるとき、バッファローカルオプションの値を返す。
グローバルオプション、バッファローカルオプションのどちらに對しても動作するが、グローバル變數、ウィンドウローカル變數、ウィンドウローカルオプションに對しては動作しない。 {expr} の指定の仕方については |bufname()| を參照。
バッファや變數が存在しないときは {def} または空文字列を返し、エラーメッセージは表示されない。
例:
:let bufmodified = getbufvar(1, "&mod") :echo "todo myvar = " . getbufvar("todo", "myvar")
|method| としても使用できます:
GetBufnr()->getbufvar(varname)
バッファの {expr} の |changelist| を返す。{expr} の使ひ方は、前述の |bufname()| を參照。バッファ {expr} が存在しない場合、空のリストが返される。
返されるリストは 2 つのエントリを含む: 變更位置のリストと、リスト內の現在地。變更リスト內のそれぞれの項目は、以下の項目を含む辭書になつてゐる:
col | 列番號 |
coladd | ’virtualedit’ 用の列のオフセット |
lnum | 行番號 |
バッファ {expr} がカレンノバッファの場合、現在地はリスト內の位置を指す。それ以外のバッファではリストの長さに設定される。
|method| としても使用できます:
GetBufnr()->getchangelist()
ユーザーまたは入力ストリームから 1 文字を取得する。
[expr] が省略されたときは 1 文字を取得できるまで待つ。
[expr] が 0 のときは 1 文字を取得できる場合のみ取得する。取得できなければ 0 を返す。
[expr] が 1 のときは 1 文字を取得できるか判定し、實際には取得しない。取得できないときは 0 を返す。
[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
bracketed paste を使用してゐるときは最初の文字のみが返され、ペーストされた殘りのテキストは切り捨てられる。|xterm-bracketed-paste|
この函數を呼んだときプロンプトは表示されない。文字入力を待つてゐることをなんらかの方法でユーザーがわかるやうにしなければならないだらう。
入力された文字に對してマッピングは適用されない。
キーコードは置換される。つまりユーザーが <Del>
を押した場合、「生の」文字シーケンスでなく <Del>
キーに對應するコードが得られる。例:
getchar() == "\<Del>" getchar() == "\<S-Left>"
以下の例は大文字・小文字を區別しないやうに "f" を再定義する:
:nmap f :call FindChar()<CR> :function FindChar() : let c = nr2char(getchar()) : while col('.') < col('$') - 1 : normal l : if getline('.')[col('.') - 1] ==? c : break : endif : endwhile :endfunction
あなたは |<CursorHold>| のやうな合成文字も取得するかもしれない。多くの場合、あなたはこれを無視して別の文字を取得することになる:
:function GetKey() : let c = getchar() : while c == "\<CursorHold>" : let c = getchar() : endwhile : return c :endfunction
最後に getchar() などで得た文字に對する修飾キーの狀態を表す數値を返す。以下の値の和となる:
2 | shift |
4 | control |
8 | alt (meta) |
16 | meta (ALT と META が區別される場合) |
32 | マウスのダブルクリック |
64 | マウスのトリプルクリック |
96 | マウスのクアドラプルクリック (== 32 + 64) |
128 | command (Macintosh のみ) |
文字自身に含まれてゐない修飾キーのみ取得できる。つまり、Shift-a は修飾キーなしの "A" となる。
現在の文字檢索の情報である {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()| も參照。
現在のコマンドラインの內容を取得する。コマンドラインを編輯してゐるときのみ動作する。つまり |c_CTRL-\_e| または |c_CTRL-R_=| を使つてゐるときのみ有效。
例:
:cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
|getcmdtype()|, |getcmdpos()|, |setcmdpos()| も參照。
パスワードの入力や |inputsecret()| が使はれたときは空文字を返す。
コマンドラインにおけるカーソル位置をバイト單位で取得する。最初の桁は 1 となる。
コマンドラインを編輯してゐるときのみ動作する。つまり |c_CTRL-\_e| または |c_CTRL-R_=| または式マッピングを使つてゐるときのみ有效。さうでないときは 0 を返す。
|getcmdtype()|, |setcmdpos()|, |getcmdline()| も參照。
現在のコマンドラインの種類を返す。戾り値は次のいづれか:
: | 通常の ex コマンド |
> | デバッグモードコマンド |debug-mode| |
/ | 前方檢索コマンド |
? | 後方檢索コマンド |
|input()| コマンド | |
- | |:insert| または |:append| コマンド |
= | |i_CTRL-R_=| |
コマンドラインを編輯してゐるときのみ動作する。つまり |c_CTRL-\_e| または |c_CTRL-R_=| または式マッピングを使つてゐるときのみ有效。さうでないときは空文字列を返す。
|getcmdpos()|, |setcmdpos()|, |getcmdline()| も參照。
現在のコマンドラインウィンドウ (|command-line-window|) の種類を返す。戾り値の意味は |getcmdtype()| と同じ。コマンドラインウィンドウでなければ空文字列を返す。
コマンドライン補完のマッチするリストを返す。{type} は何のためのものかを指定する。 次の補完タイプがサポートされてゐる:
arglist | 引數リスト內のファイル名 |
augroup | 自動コマンドグループ |
buffer | バッファ名 |
behave | |:behave| サブオプション |
color | カラースキーム |
command | Ex コマンド (および引數) |
compiler | コンパイラ |
cscope | |:cscope| のサブオプション |
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} の値が無效だと、エラーが發生する。
|method| としても使用できます:
GetPattern()->getcompletion('color')
カーソルの位置を返す。これは getpos(’.’) に似てゐるが、追加の情報を含む:
[bufnum, lnum, col, off, curswant]
"curswant" は縱方向移動の優先的列番號である。|getpos()| も參照。
次のやうにしてカーソル位置の保存と復元ができる:
let save_cursor = getcurpos() MoveTheCursorAround call setpos('.', save_cursor)
Note:
これはウィンドウ內でのみ機能することに注意。より多くの狀態を復元する方法については |winrestview()| を參照。
結果は現在の作業ディレクトリ名の文字列である。
{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)
|method| としても使用できます:
GetWinnr()->getcwd()
環境變數 {name} の値を返す。
變數が存在しない場合は |v:null| が返されます。これは空の文字列に設定された變數とは異なりますが、一部のシステムは空の値を削除される變數として解釋します。
|expr-env| も參照してください。
|method| としても使用できます:
GetVarname()->getenv()
引數なしで使はれた場合には現在の通常のフォント名を返す。ハイライトグループ Normal に對して使はれるものと同樣 |hl-Normal|。 引數が指定された場合には {name} が有效なフォント名であるか判定される。有效でないときは空文字列を返す。
有效なときは實際のフォント名を返す。または GUI が實際の名前の取得をサポートしてゐないときは {name} をそのまま返す。 GUI モードで實行してゐるときのみ動作する。よつて vimrc や gvimrc の中では使へない。GUI モードが起動した直後にこの函數を呼ぶには、自動コマンド |GUIEnter| を使ふこと。
Note:
GTK の GUI はどんなフォント名でも受け付けてしまふため、名前が有效であるかのチェックは機能しない。
{fname} で指定されたファイルの讀み込み、書き込み、實行の許可屬性を示す文字列を返す。
{fname} が存在しない、またはそのディレクトリが讀み込み不可能なときは空文字列を返す。 戾り値は "rwxrwxrwx" の形で、"rwx" フラグの各グループは順にファイルの所有者、ファイルが所屬するグループ、その他のユーザーを表す。許可屬性が與へられてゐないフラグは "-" で置き換へられる。例:
:echo getfperm("/etc/passwd") :echo getfperm(expand("~/.vimrc"))
この例は、(セキュリティの觀點から望ましい設定がされてゐるならば) "‘rw-r--r--’" あるいは "‘rw-------’" と表示する。
|method| としても使用できます:
GetFilename()->getfperm()
許可屬性を設定するには |setfperm()| を使用する。
結果は數値で、{fname} で指定されるファイルのサイズをバイト單位で返す。
{fname} がディレクトリのときは 0 を返す。
ファイル {fname} が見つからないときは -1 を返す。
{fname} のサイズが |Number| の範圍外の場合は -2 を返す。
|method| としても使用できます:
GetFilename()->getfsize()
結果は {fname} で與へられたファイルの、最終更新時閒を示す數値。1970年1月1日からの經過時閒(秒)で、strftime() に渡すことができるだらう。|localtime()| と |strftime()| も參照。
ファイル {fname} が見つからなかつた場合には -1 を返す。
|method| としても使用できます:
GetFilename()->getftime()
{fname} で指定されたファイルの種別を示す文字列を返す。
{fname} が存在しないときは空文字列を返す。
ファイルの種別とそれらの結果の表を以下に示す:
通常ファイル | "file" |
ディレクトリ | "dir" |
シンボリックリンク | "link" |
ブロックデバイス | "bdev" |
キャラクタデバイス | "cdev" |
ソケット | "socket" |
FIFO | "fifo" |
それ以外 | "other" |
例:
getftype("/home")
Note:
"link" などの種別はそれをサポートしてゐるシステムでのみ返される。"dir" と "file" しか返らないシステムもある。MS-Windows では、ディレクトリへのシンボリックリンクは "link" の代はりに "dir" を返す。
|method| としても使用できます:
GetFilename()->getftype()
結果は數値で、IMEステータスがアクティブの場合は |TRUE| です。’imstatusfunc’ を參照してください。
指定されたウィンドウのジャンプリスト |jumplist| を返す。
引數なしの場合、カレントウィンドウを使用する。{winnr} のみの場合、現在のタブページのこのウィンドウを使用する。{winnr} には |window-ID| も使用できる。{winnr} と {tabnr} 兩方の場合、指定されたタブページのウィンドウを使ふ。
返されるリストは 2 つのエントリを含む: ジャンプ位置リストと、リスト內の最後に使はれたジャンプ位置番號。ジャンプ位置リスト內のそれぞれの項目は、以下の項目を含む辭書になつてゐる:
bufnr | バッファ番號 |
col | 列番號 |
coladd | ’virtualedit’ 用の列のオフセット |
filename | 利用可能ならばファイル名 |
lnum | 行番號 |
|method| としても使用できます:
GetWinnr()->getjumplist()
{end} が指定されない場合は、カレントバッファの {lnum} 行目の內容を文字列にして返す。例:
getline(1)
{lnum} が數字ではない文字で始まる文字列であつた場合、|line()| によつてその文字列が數字に變換される。よつて、カーソルのある行の文字列を取得するには:
getline(".")
{lnum} が 1 より小さいかバッファの行數よりも大きい數値の場合、空文字列が返される。
{end} が指定された場合は、カレントバッファの {lnum} 行目から {end} 行目までを要素とするリスト |List| を返す。{end} は {lnum} と同樣に解釋される。
存在しない行は省略され、エラーメッセージは表示されない。
{end} が {lnum} より前になる場合は空リスト |List| を返す。 例:
:let start = line('.') :let end = search("^$") - 1 :let lines = getline(start, end)
|method| としても使用できます:
ComputeLnum()->getline()
他のバッファの行を取得するには |getbufline()| を參照。
ウィンドウ {nr} のロケーションリストの全項目からなるリストを返す。{nr} にはウィンドウ番號または |window-ID| が使へる。{nr} に 0 を指定するとカレントウィンドウになる。
ロケーションリストウィンドウに對して使用すると、そこに表示されてゐるロケーションリストが返る。ウィンドウ番號 {nr} が無效な場合は、空リストが返る。それ以外は |getqflist()| と同じ。
オプションの {what} 辭書引數が指定されてゐる場合、{what} にリストされてゐる項目を辭書として返す。{what} のサポートされてゐる項目については、|getqflist()| を參照。
|getqflist()| の {what} でサポートされてゐる項目に加へ、|getloclist()| では次の項目もサポートされてゐる:
filewinid | ロケーションリストからファイルを表示するのに使はれてゐるウィンドウの ID。このフィールドはロケーションリストウィンドウから呼び出されたときのみ適用される。詳細は |location-list-file-window| を參照。 |
|matchadd()| と |:match| によりカレントウィンドウに定義された全てのマッチの |List| を返す。|setmatches()| は |getmatches()| で保存されたマッチのリストを復元できるので、|getmatches()| と |setmatches()| は組み合はせて使ふと便利である。 例:
:echo getmatches() [{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 'pattern': 'FIXME', 'priority': 10, 'id': 2}] :let m = getmatches() :call clearmatches() :echo getmatches() [] :call setmatches(m) :echo getmatches() [{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 'pattern': 'FIXME', 'priority': 10, 'id': 2}] :unlet m
マウスのわかつてゐる最終位置の辭書を返します。これはマウスクリックやポップアップウィンドウ內でのマッピングに使ふことができます。項目の內容は:
screenrow | スクリーンの行 |
screencol | スクリーンの桁 |
winid | クリックのウィンドウ ID |
winrow | "winid" 內の行 |
wincol | "winid" 內の桁 |
line | "winid" 內のテキスト行 |
column | "winid" 內のテキスト桁 |
全ての數値は 1 からはじまります。
もしもウィンドウを超えてゐなければ、例へばコマンド行內のとき、"screenrow" と "screencol" のみが正しく、他のものはゼロです。
ウィンドウ下のステータス行やウィンドウを縱割りした右側にあるときには、行と桁の値はゼロです。
テキストのうしろに位置してゐるときは、"column" は byte によるテキストの長さです。
もしもマウスがポップアップウィンドウの上にあるときは、そのウィンドウが使はれます。
|getchar()| を使用してゐるとき、Vim の變數 |v:mouse_lnum|, |v:mouse_col|, |v:mouse_winid| もまたこれらの値を與へます。
Vim のプロセス ID を數値で返す。Unix と MS-Windows では Vim が終了するまでこれは一意な數値である。MS-DOS では常にゼロである。
{expr} の位置を返す。{expr} として指定できる値については |line()| を參照。カーソル位置を得るには |getcurpos()| を參照。 結果は次の 4 個の要素を持つリスト |List|:
[bufnum, lnum, col, off]
"bufnum" は、’0 や ’A のやうなマークが指定されたときは、そのマークのバッファ番號となる。それ以外では 0 となる。
"lnum" と "col" はバッファ中の位置。桁番號は 1 から始まる。
"off" の値は、’virtualedit’ がオフのときは常に 0 で、オンのときはその文字の始點からの畫面上の桁のオフセットである。つまり、カーソルが <Tab> の中や、その行の最後の文字より後にあるとき意味を持つ。
Note:
ビジュアルモードの ’< と ’> について: ビジュアルモードが "V" (行選擇モード) のとき、’< の桁番號はゼロ、’> の桁番號は大きな値になる。この函數はマークの位置を保存し、復元するために使はれる:
let save_a_mark = getpos("'a") ... call setpos("'a", save_a_mark)|getcurpos()| と |setpos()|も參照。
|method| としても使用できます:
GetMark()->getpos()
現在の全 quickfix エラーのリストを返す。リストの各要素は辭書で、以下の要素を持つ:
bufnr | ファイル名を持つバッファの番號。その名前を取得するには bufname() を使ふ。 |
module | モジュール名 |
lnum | バッファ中の行番號 (最初の行は 1) |
col | 桁番號 (最初の桁は 1) |
vcol | |TRUE|: "col" は畫面上の桁 |FALSE|: "col" はバイトインデックス |
nr | エラー番號 |
pattern | エラーの位置を特定するために使ふ檢索パターン |
text | エラーの說明 |
type | エラーメッセージの種類。’E’, ’1’ など。 |
valid | |TRUE|: エラーメッセージが認識されてゐる |
エラーリストがまつたくないか、空であるときは空リストを返す。存在しないバッファ番號を持つ quickfix リストの項目は "bufnr" を 0 にして返される。
役に立つ應用例: 複數のファイルから正規表現檢索を行ひ、見つかつたものに對してなんらかの操作をする:
:vimgrep /theword/jg *.c :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 リスト內の現在のエントリのインデックス。|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 | リスト內の現在のエントリのインデックス。存在しない場合、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"]})
レジスタ {regname} の中身を文字列にして返す。例:
:let cliptext = getreg('*')
{regname} がセットされてゐないときは、結果は空文字列となる。
getreg(’=’) は最後に評價した式レジスタの値を返す。(マップの中で使用する)。
getreg(’=’, 1) はその式そのものを返す。これを使つて |setreg()| で復元することができる。他のレジスタの場合は、この引數は無視されるので、常に指定してゐても害はない。
{list} が指定され、その値が |TRUE| のときは、戾り値はリスト (|List|) になる。リストの各要素はテキスト 1 行である。これはレジスタの中に値ゼロのバイトが含まれる場合に使用する。{list} を指定しなかつた場合は NL 文字と値ゼロのバイトは兩方とも NL 文字として扱はれる (|NL-used-for-Nul| 參照)。
指定したレジスタがセットされてゐないときは、空のリストが返される。
{regname} を指定しないときは |v:register| が使はれる。
|method| としても使用できます:
GetRegname()->getreg()
レジスタ {regname} の種類を表す文字列を返す。戾り値は次のいづれかとなる:
"v" | 文字單位 |characterwise| の場合 |
"V" | 行單位 |linewise| の場合 |
"<CTRL-V>{width}" | 矩形 |blockwise-visual| の場合 |
"" | 空、または未知のレジスタの場合 |
<CTRL-V> は値 0x16 の 1 文字である。
{regname} を指定しないときは |v:register| が使はれる。
|method| としても使用できます:
GetRegname()->getregtype()
{arg} を指定しないと、すべてのタブページに關する情報がリストとして返される。各リスト項目は辭書である。それ以外の場合、{arg} はタブページ番號を指定し、それに關する情報が返される。タブページが存在しない場合、空のリストが返される。
各リストアイテムは、次のエントリを持つ辭書である:
tabnr | タブページ番號。 |
variables | タブページローカル變數の辭書への參照。 |
windows | タブページの |window-ID| のリスト。 |
|method| としても使用できます:
GetTabnr()->gettabinfo()
タブページ {tabnr} のタブローカル變數 {varname} を取得する。|t:var|
タブの番號は 1 から始まる。
{varname} が空のときは全タブローカル變數からなる辭書を返す。
Note:
指定する變數名は "t:" を除いた名前。タブや變數が存在しないときは {def} または空文字列を返し、エラーメッセージは表示されない。
|method| としても使用できます:
GetTabnr()->gettabvar(varname)
タブページ {tabnr} 內のウィンドウ {winnr} のウィンドウローカル變數 {varname} の値を取得する。
{varname} が空のときは全ウィンドウローカル變數からなる辭書を返す。 {varname} が "&" と等しい場合はすべてのウィンドウローカルオプションの値を辭書に入れて返す。
{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')
すべてのウィンドウローカル變數を取得するには:
gettabwinvar({tabnr}, {winnr}, '&')
|method| としても使用できます:
GetTabnr()->gettabwinvar(winnr, varname)
結果は辭書で、ウィンドウ {nr} のタグスタック。{nr} はウィンドウ番號か |window-ID| が可能。{nr} が指定されてゐない場合は現在のウィンドウが使はれる。ウィンドウ {nr} が存在しない場合は空の辭書が返される。
返される辭書には次の內容が含まれてゐる:
curidx | スタック中の現在のインデックス。スタックの一番上にある場合、(length + 1) を設定するスタックの一番下のインデックスは 1。 |
items | スタック中の項目リスト。それぞれの項目は下記に說明するエントリを含む辭書。 |
length | スタック中のエントリの番號。 |
スタック中のそれぞれの項目は次のやうな內容を持つ辭書になつてゐる:
bufnr | 現在のジャンプのバッファ番號 |
from | タグジャンプ前のカーソル位置。返されたリストのフォーマットについては |getpos()| を參照。 |
matchnr | 現在マッチしてゐるタグ番號。タグのマッチが複數ある場合は、名前が使はれる。 |
tagname | タグの名前 |
タグスタックについての詳細は |tagstack| を參照。
|method| としても使用できます:
GetWinnr()->gettagstack()
ウィンドウに關する情報を、辭書のリストとして返す。
{winid} が與へられた場合、その ID を持つウィンドウに關する情報が返される。ウィンドウが存在しない場合、結果は空のリストになる。
{winid} がなければすべてのタブページのすべてのウィンドウに關する情報が返される。
各 List アイテムは次のエントリを持つ辭書である:
botline | 最後に表示されたバッファ行 |
bufnr | ウィンドウ內のバッファ數 |
height | ウィンドウの高さ (winbar を除く) |
loclist | ロケーションリストを表示してる場合は 1
{Vim が |+quickfix| 機能付きでコンパイルされたときのみ有效} |
quickfix | quickfix またはロケーションリストウィンドウの場合は 1
{Vim が |+quickfix| 機能付きでコンパイルされたときのみ有效} |
terminal | 端末ウィンドウの場合は 1
{Vim が |+terminal| 機能付きでコンパイルされたときのみ有效} |
tabnr | タブページ番號 |
topline | 最初に表示されたバッファ行 |
variables | ウィンドウローカル變數の辭書への參照 |
width | ウィンドウ幅 |
winbar | ウィンドウがツールバーを持つてゐれば 1、さうでなければ 0 |
wincol | ウィンドウの最も左のスクリーン列、|win_screenpos()| の列 |
winid | |window-ID| |
winnr | ウィンドウ番號 |
winrow | ウィンドウの最も上のスクリーン行、|win_screenpos()| の行 |
|method| としても使用できます:
GetWinnr()->getwininfo()
結果は、getwinposx() と getwinposy() の結果が組み合はされた 2 つの數字のリスト:
[x-pos, y-pos]
{timeout} は端末からの應答をどれくらゐ待つかを、ミリ秒單位で指定するのに使はれる。省略された場合は 100 ミリ秒が使用される。
リモート端末にはより長い時閒を指定すること。
10 より小さい値が使用され、かつその時閒內に應答を受け取らなかつた場合、利用可能であれば前に報告された位置が返される。これは位置をポーリングし、同時に何かを行ふ場合に使用することができる:
while 1 let res = getwinpos(1) if res[0] >= 0 break endif " Do some work here endwhile
|method| としても使用できます:
GetTimeout()->getwinpos()
結果は GUI の Vim ウィンドウの左端の、デスクトップ上での X 座標値 (數値)。xterm でも動作する (タイムアウトは 100 ミリ秒が使はれる)。情報が存在しない (コンソールの) 場合は -1 となる。‘:winpos‘ の値が使へる。
結果は GUI の Vim ウィンドウの上端の、デスクトップ上での Y 座標値 (數値)。xterm でも動作する (タイムアウトは 100 ミリ秒が使はれる)。情報が存在しない (コンソールの) 場合は -1 となる。‘:winpos‘ の値が使へる。
カレントタブページに對する |gettabwinvar()| と同樣。
例:
:let list_is_on = getwinvar(2, '&list') :echo "myvar = " . getwinvar(1, 'myvar')
|method| としても使用できます:
GetWinnr()->getwinvar(varname)
{expr} 內のファイル名のワイルドカードを展開する。特殊文字については |wildcards| を參照。
{nosuf} に |TRUE| を指定しない限り、’suffixes’ と ’wildignore’ が適用される。つまり ’wildignore’ のパターンにマッチする名前はスキップされ、’suffixes’ がマッチの順番に影響を與へる。’wildignorecase’ は常に適用される。
{list} が指定されその値が |TRUE| なら、マッチしたすべてのファイルがリストとして返される。リストを使ふことで、改行を含むファイル名があつても結果を正しく受け取ることができる。
さうでない場合は結果は文字列で返される。その場合、複數のマッチがあるときはそれらは文字 <NL> で區切られる。
展開が失敗した場合、空の文字列またはリストが返される。
マッチの數を制限するなど、複雜なことをする必要がある場合にも |readdir()| を使用することができる。
存在しないファイル名は結果に含まれない。シンボリックリンクは、それが存在するファイルを指す場合のみ含まれる。ただし、{alllinks} 引數が存在し、それが |TRUE| である場合はすべてのシンボリックリンクが含まれる。
多くのシステムではバッククォート (「‘」といふ文字のこと) を、外部コマンドの實行結果からファイル名を取得するために使用できる。例:
:let tagfiles = glob("`find . -name tags -print`") :let &tags = substitute(tagfiles, "\n", ",", "g")
バッククォート內のプログラムの實行結果は、一行に 1 つずつの項目が含まれてなければならない。項目內のスペースは許容される。
特殊な Vim の變數を展開するためには |expand()| を參照。外部コマンドの生の出力を得るためには |system()| を參照。
|method| としても使用できます:
GetExpr()->glob()
glob() に使はれるファイルパターンを檢索パターンに變換する。結果はファイル名の文字列とのマッチに使用できる。例へば、
if filename =~ glob2regpat('Make*.mak')
上記は次と同じである:
if filename =~ '^Make.*\.mak$'
{expr} が空文字列の場合、結果は "^$" で、空文字列にマッチする。
Note:
結果はシステムによつて異なることに注意すること。MS-Windows では、バックスラッシュは通常、パス區切りを意味する。
|method| としても使用できます:
GetExpr()->glob2regpat()
{path} の中の全ディレクトリで {expr} に對して |glob()| を實行し、結果を連結します。例:
:echo globpath(&rtp, "syntax/c.vim")
{path} はコンマ區切りのディレクトリのリスト。各ディレクトリを {expr} の前に付加し、|glob()| と同樣にそれを展開する。必要に應じてパスの區切り文字が插入される。
ディレクトリ名の中にコンマを含めるには、バックスラッシュでエスケープすること。
Note:
MS-Windows ではディレクトリ名の末尾にバックスラッシュがつくことがある。その後に區切りのコンマを書くとエスケープと見なされてしまふので、バックスラッシュは削除すること。どれかのディレクトリに對して展開が失敗してもエラーメッセージは表示されない。
{nosuf} に |TRUE| が指定されない限り、オプション ’wildignore’ が適用される。つまり、’wildignore’ のパターンにマッチする名前はスキップされる。
{list} が指定され、その値が |TRUE| なら、マッチしたすべてのファイルがリストとして返る。リストとして受け取る利點は、改行文字を含んだファイル名も正しく扱へることである。{list} を指定しなかつた場合は、戾り値は文字列であり、マッチした複數のファイル名は <NL> 文字で連結されてしまふ。例:
:echo globpath(&rtp, "syntax/c.vim", 0, 1)
{alllinks} は |glob()| の場合と同樣に扱はれる。
"**" を使つてディレクトリツリーを再歸的に檢索することができる。例へば、’runtimepath’ とそれ以下のディレクトリから全ての "README.txt" を探すには次のやうにする:
:echo globpath(&rtp, "**/README.txt")
上向き檢索と、"**" の深さの限界はサポートされてゐない。よつてオプション ’path’ の値をそのまま使ふとうまく動かないことがある。
|method| としても使用でき、ベースは第 2 引數として渡されます:
GetExpr()->globpath(&rtp)
結果は機能 {feature} がサポートされる場合 1、されない場合 0 となる。引數 {feature} は文字列。下記の |feature-list| を參照。|exists()| も參照。
結果は數値で、辭書 |Dictionary| {dict} がキー {key} の要素を持つなら 1、持たないなら 0 となる。
|method| としても使用できます:
mydict->has_key(key)
結果は數値である:
1 | ウィンドウが |:lcd| によつてローカルディレクトリを設定してゐる時 |
2 | タブページが |:tcd| によつてローカルディレクトリを設定してゐる時 |
0 | その他 |
引數が指定されない場合、現在のウィンドウを對象とする。
{winnr} が指定された場合、現在のタブページ內の {winnr} のウィンドウを對象とする。 {winnr} と {tabnr} が指定された場合、{tabnr} のタブページ內の {winnr} のウィンドウを對象とする。
{winnr} にはウィンドウ番號または |window-ID| が使へる。
{winnr} が -1 の場合は無視され、タブページのみが使用される。
もし引數が不正の場合、0 を返す。 例:
if haslocaldir() == 1 " window local directory case elseif haslocaldir() == 2 " tab-local directory case else " global directory case endif " current window :echo haslocaldir() :echo haslocaldir(0) :echo haslocaldir(0, 0) " window n in current tab page :echo haslocaldir(n) :echo haslocaldir(n, 0) " window n in tab page m :echo haslocaldir(n, m) " tab page m :echo haslocaldir(-1, m)
|method| としても使用できます:
GetWinnr()->haslocaldir()
結果は數値。右邊側 (マップした先) の一部分に {what} を含むマッピングが存在し、それが {mode} で指定されたモードのいづれかで定義されてゐるなら 1 を返す。 {abbr} が指定されてゐて |TRUE| のときはマッピングでなく短縮入力の存在を判定する。插入モードまたはコマンドモードを指定することを忘れないやうに。
グローバルマップとバッファローカルマップの兩方をチェックする。
マッピングが 1 個も見つからなかつたときは 0 を返す。 {mode} に對しては以下の文字が利用できる:
n | ノーマルモード |
v | ビジュアルモードおよび選擇モード |
x | ビジュアルモード |
s | 選擇モード |
o | オペレータ待機モード (Operator-pending) |
i | 插入モード |
l | Language-Argument モード ("r", "f", "t" など) |
c | コマンドラインモード |
{mode} が省略されたときは "nvo" となる。
この函數は Vim script の中で、ある函數へのマッピングが既に存在するか判定するために有用である。例:
:if !hasmapto('\ABCdoit') : map <Leader>d \ABCdoit :endif
この例は、"\ABCdoit" へのマッピングが存在しないときだけ "\ABCdoit" へのマッピングを作成する。
|method| としても使用できます:
GetRHS()->hasmapto()
文字列 {item} を履歷 {history} に追加する。履歷 {history} は以下のうちどれか 1 つから選擇:
"cmd" or ":" | コマンドライン履歷 |
"search" or "/" | 檢索パターン履歷 |
"expr" or "=" | タイプされた式の履歷 |
"input" or "@" | input() の履歷 |
"debug" or ">" | デバッグコマンドの履歷 |
empty | 最新もしくは最後に使はれた履歷 |
{history} 文字列はフルネームで指定する必要はありません。頭文字だけでも構ひません。
{item} が履歷內に既に存在する場合、それが最新の項目の位置へシフトされる。
結果は數値: 操作が成功した場合 1、さうでなければ 0
例:
:call histadd("input", strftime("%Y %b %d")) :let date=input("Enter date: ")
サンドボックス |sandbox| の中では利用できない。
|method| としても使用でき、ベースは第 2 引數として渡されます:
GetHistory()->histadd('search')
{history} の內容を削除する。例へば全てのエントリを消すこともできる。{history} の部分に可能な値は |hist-names| を參照。
パラメーター {item} が文字列に評價される場合、これは正規表現として扱はれる。その表現にマッチする全てのエントリが history から削除される (複數あつても)。
"\c" をつけない場合、大文字・小文字が一致しなければならない。|/\c|。
{item} が數値に評價される場合、インデックスとして解釋される。インデックスについては |:history-indexing| を參照。
關聯するエントリ {譯注: The respective entry} も 、存在すれば削除される。
結果は數値: 削除に成功すれば 1 を、さうでなければ 0 が返る。
例:
式レジスタの履歷を削除する:
:call histdel("expr")
檢索履歷から、"*" で始まるエントリを全て削除する:
:call histdel("/", '^\*')
次の 3 つは等價である:
:call histdel("search", histnr("search")) :call histdel("search", -1) :call histdel("search", '^'.histget("search", -1).'$')
最後の檢索パターンを削除し、1 つ前のパターンを "n" コマンド (次のマッチへ移動) と ’hlsearch’ の爲に設定する:
:call histdel("search", -1) :let @/ = histget("search", -1)
|method| としても使用できます:
GetHistory()->histdel()
結果は {history} の第 {index} エントリを表はす文字列。{history} の部分に可能な値は |hist-names| を、{index} については |:history-indexing| を參照。指定されたエントリが存在しない場合は空文字列が返される。{index} が省略された場合には、履歷中の最新のエントリが戾り値として使用される。
例:
2 つ前に行はれた檢索をやり直す:
:execute '/' . histget("search", -2)
|:history| によつて出力される {num} 番目のエントリを、再度實行するための ":H {num}" といふコマンドを定義する。
:command -nargs=1 H execute histget("cmd",0+<args>)
|method| としても使用できます:
GetHistory()->histget()
結果は數値で {history} の現在のエントリ數。{history} の部分に可能な値は |hist-names| を參照。エラーが起こつた場合、-1 が返される。
例:
:let inp_index = histnr("expr")
|method| としても使用できます:
GetHistory()->histnr()
結果は數値で、{name} といふ名のハイライトグループが存在すれば、非ゼロの値が返される。これはなんらかの方法でそのグループが既に定義されてゐる時にのみ起こる。これの爲に實際に何らかのハイライティングアイテムが設定されてゐる必要はなく、單に構文アイテムとしても使はれるだらう。 以前の名前: highlight_exists().
|method| としても使用できます:
GetName()->hlexists()
結果は數値で、{name} といふ名前のハイライトグループの ID 番號。そのハイライトグループが存在しない場合は 0 が返される。これはハイライトグループについての情報を獲得するために使用される。例へば "Comment" グループの背景色を取得するにはこのやうにする:
:echo synIDattr(synIDtrans(hlID("Comment")), "bg")
以前の名前: highlightID()
|method| としても使用できます:
GetName()->hlID()
結果は文字列で、現在 Vim が實行されてゐるマシンの名前。名前が 256 文字を超える場合、超えた部分は切り捨てられる。
文字列 {expr} をエンコーディング {from} からエンコーディング {to} に變換した文字列を返す。
變換が完全に失敗したときは空文字列を返す。一部の文字が變換できなかつた場合、その文字は "?" に置き換はる。
エンコーディング名はライブラリ函數 iconv() が受け付けるものならなんでもよい。":!man 3 iconv" を參照。
ほとんどの變換は、Vim が |+iconv| 機能つきでコンパイルされてゐるときのみ利用可能。|+iconv| つきでないときも UTF-8 から latin1 への變換とその逆は行へる。
オプション ’encoding’ の値に關係なく、特殊な文字を含むメッセージを表示するために使へる。UTF-8 でエンコードされたメッセージを表示するには次のやうにする:
echo iconv(utf8_str, "utf-8", &enc)
Note:
Vim は全ての Unicode エンコーディングに對して UTF-8 を使ふ。UCS-2 との變換を行はうとしても、自動的に UTF-8 との變換に變更される。いづれにせよ、UCS-2 は NUL バイトを含むため、文字列に UCS-2 を使ふことはできない。
|method| としても使用できます:
GetText()->iconv('latin1', 'utf-8')
カレントバッファの {lnum} 行目のインデント量を數値で返す。このインデント量はスペース單位で數へられ、’tabstop’ の値が關係する。{lnum} は |getline()| の場合と同樣に扱はれる。
{lnum} が無效なときは -1 を返す。
|method| としても使用できます:
GetLnum()->indent()
{object} が |List| の場合は、{expr} に等しい要素の最小のインデックスを返す。自動的な變換は行はれないので、文字列の "4" は數値の 4 とは異なると判定される。そして數値の 4 は浮動小數點數の 4.0 とも異なる。’ignorecase’ はここでは適用されず、常に大文字・小文字は區別される。
{object} が |Blob| の場合は、{expr} に等しいバイト値の最小のインデックスを返す。
{start} が指定された場合はインデックス {start} から要素の檢索を始める (負數を指定すると末尾からの相對位置となる)。 {ic} に |TRUE| が指定された場合、大文字・小文字は區別されない。さうでない場合は區別される。
{object} の中に {expr} が見つからない場合は -1 を返す。
例:
:let idx = index(words, "the") :if index(numbers, 123) >= 0
|method| としても使用できます:
GetObject()->index(what)
結果は文字列で、ユーザーがコマンドラインに入力したものが返される。引數 {prompt} にはプロンプト文字列か空文字列を指定する。空文字列の場合はプロンプトなしになる。’\n’ を使つてプロンプトに改行を含めることができる。 |:echohl| によるハイライトの設定がプロンプトに適用される。入力はコマンドラインと同樣に行え、同じ編輯コマンドやキーマップが使用できる。input() に入力された文字列には、他の履歷とは獨立した履歷が與へられる。 例:
:if input("Coffee or beer? ") == "beer" : echo "Cheers!" :endif
省略可能な引數 {text} が與へられ、空でないならば、それが入力の初期値として、ユーザーが入力したのと同じ樣に表示される。例:
:let color = input("Color? ", "white")
省略可能な引數 {completion} はこの入力において利用できる補完の種類を指定する。この引數がないときは補完は行はれない。對應してゐる補完の種類は、ユーザー定義コマンドにおいて引數 "-complete=" で指定するものと同じである。詳しくは |:command-completion| を參照。
例:
let fname = input("File: ", "", "file")
Note:
この函數は GUI モードしか持たないバージョン (例、Win32 GUI) の Vim では、スタートアップファイルの中で使用することはできない。
Note:
マッピングの中から input() を呼ぶと、そのマッピングの殘りの文字が消費される。マッピングは、その文字が入力されたときと同じやうに處理されるためである。これを避けるには、input() の前に |inputsave()| を呼び、input() の後に |inputrestore()| を呼ぶ。もう 1 つの對策は、|:execute| や |:normal| を使ふなどして、そのマッピングでそれ以上文字を續けないやうにすることである。
マッピングと同時に使ふ例:
:nmap \x :call GetFoo()<CR>:exe "/" . Foo<CR> :function GetFoo() : call inputsave() : let g:Foo = input("enter search pattern: ") : call inputrestore() :endfunction
|method| としても使用できます:
GetPrompt()->input()
|input()| と同樣。GUI で動作してゐて、テキストダイアログがサポートされてゐる場合はダイアログを表示してテキストを入力させる。
例:
:let n = inputdialog("value for shiftwidth", shiftwidth()) :if n != "" : let &sw = n :endif
ダイアログがキャンセルされたときは {cancelreturn} を返す。{cancelreturn} が省略されてゐるときは空文字列を返す。<Enter>
を押すと OK ボタンを押すのと同じ動作になる。<Esc>
を押すとキャンセルボタンを押すのと同じ動作になる。
Note:
コマンドライン補完は對應してゐない。
|method| としても使用できます:
GetPrompt()->inputdialog()
{textlist} は文字列のリスト |List| でなければならない。1 行につきリストの要素を 1 個表示し、ユーザーに數字を入力するやう促す。入力された數字を返す。
ユーザーはマウスで文字列をクリックすることでも選擇できる。最初の文字列を選擇すると 0 が返る。最初の文字列より上をクリックすると負數が返る。プロンプト自身をクリックすると {textlist} の長さ +1 が返る。
{textlist} の要素數はオプション ’lines’ の値より少なくなければならない。さうでないと動作しない。最初の要素にメッセージを書き、各文字列の先頭に番號をつけておくとよい。
例:
let color = inputlist(['Select color:', '1. red', \ '2. green', '3. blue'])
|method| としても使用できます:
GetChoices()->inputlist()
前囘の |inputsave()| で保存しておいた先行入力を復元する。inputsave() と同じ回數だけ呼ぶようにしなければならない。しかし多く呼びすぎても害はない。復元するものがなければ 1 を、さうでなければ 0 を返す。
先行入力 (マッピングにより入力された文字も含む) を保存し、クリアすることにより、これ以降のプロンプトがユーザーからの入力を得るやうにする。プロンプトの後で、對應する inputrestore() を呼び出さねばならない。複數回呼ぶこともできる。ただしその場合は同じ回數だけ inputrestore() を呼ばなくてはならない。メモリ不足のときは 1 を、さうでなければ 0 を返す。
|input()| とほぼ同じだが、以下の 2 點が異なる:
a) | ユーザーの入力をアスタリスク ("*") の列として表示し、入力內容を讀めないやうにする。 |
b) | ユーザーの入力が入力履歷 |history| に殘らない。 |
ユーザーの入力內容を文字列として返す。
Note:
コマンドライン補完には對應してゐない。
|method| としても使用できます:
GetPrompt()->inputsecret()
{object} が |List| か |Blob| の場合、それの先頭に {item} を插入する。
{idx} が指定されたときはインデックス {idx} の要素の前に {item} を插入する。{idx} が 0 のときは {idx} を省略した場合と同じ樣に最初の要素の前に插入する。{idx} は負數でもよい (|list-index| 參照)。-1 を指定すると最後の要素の前に插入する。
插入した結果のリスト |List| や |Blob| を返す。例:
:let mylist = insert([2, 3, 5], 1) :call insert(mylist, 4, -1) :call insert(mylist, 6, len(mylist))
最後の例は |add()| を使ふともつと簡單に書ける。
Note:
{item} がリスト |List| の場合は、1個の要素として追加される。リスト |Lists| を連結するには |extend()| を使ふこと。
|method| としても使用できます:
mylist->insert(item)
ビット反轉。引數は數値に變換される。リスト、辭書、浮動小數點數を指定するとエラーになる。例:
:let bits = invert(bits)
|method| としても使用できます:
:let bits = bits->invert()
結果は數値で、{directory} といふ名前のディレクトリが存在すれば |TRUE| となる。{directory} が存在しないか、存在したとしてもディレクトリではなかつた場合には、|FALSE| が返される。文字列として解釋できるのならば {directory} の表現はどのやうなものであつてもかまはない。
|method| としても使用できます:
GetName()->isdirectory()
{expr} が正の無限大の場合は 1、負の無限大の場合は -1 を返し、それ以外の場合は 0 を返す。
:echo isinf(1.0 / 0.0) 1 :echo isinf(-1.0 / 0.0) -1
|method| としても使用できます:
Compute()->isinf()
{|+float| 機能を有效にしてコンパイルしたときのみ有效}
結果は數値で、{expr} がロックされてゐる變數の名前ならば |TRUE| を返す。
{expr} は變數の名前、リスト |List| の要素、辭書 |Dictionary| の要素のいづれかでなければならない。變數そのものを指定しないやうに注意。例:
:let alist = [0, ['a', 'b'], 2, 3] :lockvar 1 alist :echo islocked('alist') " 1 :echo islocked('alist[1]') " 0
{expr} が存在しない變數のときはエラーメッセージが表示される。變數の存在を確認するには |exists()| を使ふ。
|method| としても使用できます:
GetName()->islocked()
{expr} が NaN の値を持つ浮動小數點數ならば |TRUE| を返す。
echo isnan(0.0 / 0.0) 1
|method| としても使用できます:
Compute()->isnan()
{|+float| 機能を有效にしてコンパイルしたときのみ有效}
{dict} の全要素のキー・値のペアからなるリスト |List| を返す。戾り値の各要素はリスト |List| であり、キーと値の 2 個の要素を持つ。戾り値のリスト |List| の要素の順序は不定である。|keys()| と |values()| も參照。
例:
for [key, value] in items(mydict) echo key . ': ' . value endfor
|method| としても使用できます:
mydict->items()
job_ 函數群についてはここに文書化されてゐます: |job-functions-details|
リスト {list} の要素を連結し、1個の文字列にして返す。
{sep} が指定されたときは、要素の閒にそれを插入する。{sep} が指定されなかつたときは 1 個のスペースが使はれる。
Note:
末尾には {sep} がつかない。末尾にもつけたければ以下のやうにする:let lines = join(mylist, "\n") . "\n"
{list} の要素が文字列なら、そのまま使はれる。リスト |Lists| と辭書 |Dictionaries| は |string()| を使つたときと同じやうにして文字列に變換される。この逆を行ふ函數は |split()| である。
|method| としても使用できます:
mylist->join()
|json_decode()| に似てゐるが以下が異なる:
|method| としても使用できます:
ReadObject()->js_decode()
|json_encode()| に似てゐるが以下が異なる:
例へば Vim オブジェクト:
[1,v:none,{"one":1},v:none]
は以下にエンコードされ:
[1,,{one:1},,]
json_encode() であれば以下にエンコードされる:
[1,null,{"one":1},null]
このエンコードは JavaScript では妥當である。特に排列內でオプショナルアイテムを扱ふ場合には JSON より能率的である。
|method| としても使用できます:
GetObject()->js_encode()
これは JSON フォーマットの文字列を解析し、それと同等の Vim の値を返す。JSON と Vim の値の關係は |json_encode()| を參照。 デコードは寬容である:
オブジェクトの重複するキー (rfc7159 では妥當だが) は、正しい Vim タイプの結果でなければならないので、json_decode() によつて受け入れられない。例へば、次のものは失敗する: {"a":"b", "a":"c"}
|method| としても使用できます:
ReadObject()->json_decode()
{expr} を JSON フォーマットの文字列にエンコードし、この文字列を返す。
このエンコード方式の詳細はここに記載されてゐる:
https://tools.ietf.org/html/rfc7159.html
Vim の値は以下の通りに變換される:
數値 |Number| | 10 進數 |
浮動小數點數 |Float| | 浮動小數點數 |
浮動小數點數 nan | "NaN" |
浮動小數點數 inf | "Infinity" |
浮動小數點數 -inf | "-Infinity" |
文字列 |String| | ダブルクォートで括られた文字列 (null 可) |
|Funcref| | 不可、エラー |
リスト |List| | 排列 (null可) 再歸的に使用された場合: [] |
辭書 |Dict| | オブジェクト (null可) 再歸的に使用された場合: {} |
|Blob| | 個々のバイト排列 |
v:false | "false" |
v:true | "true" |
v:none | "null" |
v:null | "null" |
Note:
NaN と Infinity は値として渡されることに注意すること。これは JSON 標準には存在しないが、いくつかの實裝でそれが可能である。さうでない場合、エラーが發生する。
|method| としても使用できます:
GetObject()->json_encode()
{dict} の全キーからなるリスト |List| を返す。リスト |List| の順序は不定である。|items()| と |values()| も參照。
|method| としても使用できます:
mydict->keys()
結果は數値で、引數 {expr} の長さ。{expr} が文字列または數値のときは |strlen()| と同じやうにバイト單位での長さを返す。
{expr} がリスト |List| のときは要素數を返す。
{expr} が |Blob| の場合、バイト數を返す。
{expr} が辭書 |Dictionary| のときは要素數を返す。
それ以外のときはエラーとなる。
|method| としても使用できます:
mylist->len()
ランタイムライブラリ {libname} の函數 {funcname} を、單一の引數 {argument} で呼び出す。
Vim で使ふやうに特別に作つたライブラリの函數を呼ぶために使はれる。引數は 1 個しか指定できないため、普通のライブラリ函數を呼ぶにはかなり制限がある。
結果には、呼び出した函數から返された文字列が返される。呼び出した函數が NULL を返した場合には、Vim には空文字列 "" が戾される。
函數の戾り値が數値である場合には |libcallnr()| を使ふこと!
もしも引數が數値ならば、函數には int 型の引數が 1 つ渡される。引數が文字列の場合には、函數にはヌル終端記號を持つ文字列が引數として渡される。
|restricted-mode| の中で呼ぶと失敗する。
libcall() によつて Vim を再コンパイルすることなく ’plug-in’ と呼ばれる獨自の擴張を行ふことができるやうになる。それは (直接) システムの函數を呼ぶ、といふことではない。システム函數を呼ぶとおそらく Vim がクラッシュするだらう。
Win32 では、あなたが書いた函數を DLL に置かなければならず、また通常の C 呼出し規約を使用しなければならない (Windows のシステム DLL が使ふ Pascal ではない)。函數は正確に 1 つのパラメーター、char 型ポインタもしくは int 型を取らなければならず、戾り値として char 型ポインタか NULL を返さなければならない。
返される char 型ポインタは、函數終了後も有效なポインタ (例へば DLL 內の靜的なデータ) を指さなければならない。(malloc 等で) 割り當てられたメモリを保持してゐた場合、それはリークしてしまふ。DLL 內のスタティックバッファを用ゐる方法は動くかもしれないが、使用濟み DLL がメモリから削除されると同時に解放されてしまふ。
警告:
もしも函數が有效ではないポインタを返すと、Vim はクラッシュしてしまふ。函數が數値を返してしまつた場合、Vim はそれをポインタとして扱つてしまふので、やはりクラッシュが起こる。
Win32 のシステムでは、{libname} は DLL のファイル名の擴張子 ".DLL" を付けてはならない。通常の (パスの通つた) 場所に DLL がない場合には、フルパスで指定する必要がある。
Unix では、獨自のプラグインをコンパイルするときはオブジェクトコードを位置獨立 (’PIC’) としてコンパイルしなければならない。
{Win32 といくつかの Unix で |+libcall| 機能が有效になつてゐるときのみ利用可能}
例:
:echo libcall("libc.so", "getenv", "HOME")
|method| としても使用でき、ベースは第 3 引數として渡されます:
GetValue()->libcall("libc.so", "getenv")
|libcall()| とほぼ同樣だが、文字列でなく int を返す函數に使ふ。{Win32と |+libcall| 機能が有效になつてゐる Unix でのみ利用可能} 例:
:echo libcallnr("/usr/lib/libc.so", "getpid", "") :call libcallnr("libc.so", "printf", "Hello World!\n") :call libcallnr("libc.so", "sleep", 10)
|method| としても使用でき、ベースは第 3 引數として渡されます:
GetValue()->libcallnr("libc.so", "printf")
結果は數値で、{expr} で與へられた位置のファイル內での行番號。受け付けられる位置指定は次の通り:
. | カーソルの位置 |
$ | 現在のバッファの最後の位置 |
’x | マーク x の位置 (マークが設定されてゐない場合、0 が返る) |
w0 | カレントウィンドウの最上行 (ディスプレイがアップデートされてゐない場合は最上行。例へば silent Ex モード中) |
w$ | カレントウィンドウの最下行 (行が見えなければ、これは "w0" 未滿の最下行) |
v | ビジュアルモードでは: ビジュアル選擇領域の開始行 (カーソルがその端)。ビジュアルモード以外ではカーソル位置を返す。すぐに更新される點が |'<| と違ふ。 |
Note:
他のファイルのマークも使へることに注意してください。その場合、戾り値はそのファイルの行番號となります。
桁番號を取得するには |col()| を使ひます。兩方を取得するには |getpos()| を使ひます。
オプションの {winid} 引數を使用すると、カレントウィンドウの代はりにそのウィンドウの値が取得されます。
例:
line(".") | カーソルの行番號 |
line(".", winid) | ウィンドウ "winid" で同上 |
line("’t") | マーク t の位置の行番號 |
line("’" . marker) | マーク marker の位置の行番號 |
ファイルを開くときに最後の既知の位置にジャンプするには、|last-position-jump| を參照してください。
|method| としても使用できます:
GetValue()->line()
バッファの先頭から、{lnum} 行目までのバイト數を返す。これには現在のバッファのオプション ’fileformat’ に從つた、end-of-line (行終端) 文字も含まれてゐる。最初の行においては 1 が返る。バイト數は ’encoding’ に基づく。’fileencoding’ は無視される。次のやうにすることで最終行を含むバイトサイズを獲得することができる:
line2byte(line("$") + 1)
これはバッファの大きさプラス1になる。もし ’fileencoding’ が空ならその値はファイルの大きさプラス 1 に等しい。
{lnum} が無效であるか、|+byte_offset| 機能がコンパイル時に無效にされてゐる場合、-1 が返される。
|byte2line()|、|go| 及び |:goto| も參照。
|method| としても使用できます:
GetLnum()->line2byte()
’lisp’ をオンにしたときと同じ lisp 用のインデント規則に從つた場合の {lnum} 行目のインデント量を返す。
インデント量はスペースで數へられ、’tabstop’ の値は關係ない。{lnum} は |getline()| の場合と同樣に扱はれる。{lnum} が無效な値のときや |+lispindent| 機能なしでコンパイルされてゐるときは -1 を返す。
|method| としても使用できます:
GetLnum()->lispindent()
{list} の各數値を文字列に變換し、それらすべてを連結する。例:
list2str([32]) returns " " list2str([65, 66, 67]) returns "ABC"
以下で同樣のことが(遲く)おこなへる:
join(map(list, {nr, val -> nr2char(val)}), '')
|str2list()| は反對のことをする。
{utf8} が省略されてゐるかゼロの場合、現在の ’encoding’が使用される。{utf8} が 1 の場合は、常に UTF-8 文字列を返す。utf-8 の合成文字は期待通りに動作する:
list2str([97, 769]) returns "á"
|method| としても使用できます:
GetList()->list2str()
バッファ {buf} に變更が加へられたときに呼び出されるコールバック函數を追加する。
{buf} はバッファ名またはバッファ番號を參照する。許容値については、|bufname()| を參照。{buf} を省略すると、現在のバッファが使用される。
|listener_remove()| に渡すことができる一意の ID を返す。
{callback} は 5 つの引數で呼び出される:
a:bufnr | 變更されたバッファ |
a:start | 最初に變更された行番號 |
a:end | 變更された下の最初の行番號 |
a:added | 追加された行數。行が削除された場合は負値 |
a:changes | 變更についての詳細を含む項目のリスト |
例:
func Listener(bufnr, start, end, added, changes) echo 'lines ' .. a:start .. ' until ' .. a:end .. ' changed' endfunc call listener_add('Listener', bufnr)
リストは變更できない。各リスト項目は、次のエントリを持つ辭書である:
lnum | 變更の最初の行番號 |
end | 變更された行の下の行 |
added | 追加された行數。行が削除された場合は負値 |
col | 變更の影響を受けた "lnum" の最初の桁。不明な場合、または行全體が影響を受けた場合は 1。これはバイトインデックスである。最初の文字の値は 1 である。 |
行が插入されたときの値は次のとほり:
lnum | 上に新しい行が追加される行番號 |
end | "lnum" と同じ |
added | 插入された行數 |
col | 1 |
行が削除されたときの値は次のとほり:
lnum | 最初に削除された行番號 |
end | 削除が行はれる前の、最初に削除された行の下の行 |
added | 負値。削除された行數 |
col | 1 |
行が變更されたときの値は次のとほり:
lnum | 最初の變更行 |
end | 最後に變更された行の下の行 |
added | 0 |
col | 變更した最初の桁または 1 |
エントリは變更が行はれた順になつてゐるため、最新の變更は最後になる。行番號はコールバックが呼び出されたときに有效だが、後の變更はそれらを無效にするかもしれない。したがつて、後のためにコピーを保持しても機能しないかもしれない。
{callback} は、|listener_flush()| が呼び出されたとき、または、行數を變更するやうな變更が行はれ、變更リストの行番號が無效になつたときに、畫面が更新される直前に呼び出される。
{callback} はテキストをロックした狀態で呼び出される。|textlock| を參照。バッファを變更する必要がある場合は、後でこれを實行するためのタイマー |timer_start()| を使用すること。
バッファが最初にロードされた時には {callback} は呼び出されない。|BufReadPost| 自動コマンドイベントを使用して、バッファの初期テキストを處理する。
{callback} はバッファがアンロードされたときにも呼び出されない。そのためには |BufUnload| 自動コマンドイベントを使用すること。
|method| としても使用でき、ベースは第 2 引數として渡されます:
GetBuffer()->listener_add(callback)
バッファ {buf} のリスナーコールバックを呼び出す。保留中の變更がない場合は、コールバックは呼び出されない。
{buf} はバッファ名またはバッファ番號を表す。許容値については、|bufname()| を參照。{buf} を省略すると、カレントバッファが使用される。
|method| としても使用できます:
GetBuffer()->listener_flush()
以前に listener_add() で追加されたリスナーを削除します。{id} が見つからないときはゼロを、{id} が削除されたときは 1 を返します。
|method| としても使用できます:
GetListenerId()->listener_remove()
現在の時刻、1970 年 1 月 1 日からの經過秒數を返す。|strftime()| と |getftime()| も參照。
{expr} の自然對數 (底 e) を浮動小數點數 (|Float|) で返す。{expr} は (0, inf] の範圍の浮動小數點數 (|Float|) か數値 (|Number|) でなければならない。 例:
:echo log(10) 2.302585 :echo log(exp(5)) 5.0
|method| としても使用できます:
Compute()->log()
{|+float| 機能を有效にしてコンパイルしたときのみ有效}
浮動小數點數 {expr} の 10 を底とする對數を |Float| で返す。{expr} は |Float| または |Number| に評價されなければならない。 例:
:echo log10(1000) 3.0 :echo log10(0.01) -2.0
|method| としても使用できます:
Compute()->log10()
{|+float| 機能つきでコンパイルされたときのみ有效}
Lua の式 {expr} を評價し、その結果を Vim のデータ構造に變換したものを返す。2 番目の {expr} は、最初の {expr} の中では _A としてアクセスできる追加の引數を保持する。
文字列はそのまま返される。
ブーリアンオブジェクトは數値に變換される。 數値は、vim が |+float| つきでコンパイルされたときは |Float| 値に變換され、さうでなければ數値に變換される。
vim.eval() で取得される辭書とリストはそのまま返される。それ以外のオブジェクトは 0 が返され、エラーにはならない。詳細は |lua-luaeval| を參照。
|method| としても使用できます:
GetExpr()->luaeval()
{|+lua| 機能つきでコンパイルされたときのみ有效}
{expr1} はリスト |List| または辭書 |Dictionary|。
{expr1} の各要素を、{expr2} を評價した結果で置き換へる。{expr2} は文字列 |string| または函數參照 |Funcref| でなければならない。
{expr2} が文字列 |string| の場合、{expr2} の內部では |v:val| が現在の要素の値を保持してゐる。辭書の場合は |v:key| が現在の要素のキーを保持してゐる。リスト |List| の場合は |v:key| が現在の要素のインデックスを保持してゐる。 例:
:call map(mylist, '"> " . v:val . " <"')
これは "mylist" の各要素の前に "> " をつけ、後に " <" をつける。
Note:
{expr2} は式を表す文字列である。バックスラッシュを二重にしなくても濟むやうに |literal-string| を使ふとよいだらう。ただしその場合はシングルクォートを二重にしなければならない。
{expr2} が |Funcref| の場合は、2 つの引數で呼び出される:
函數は、その要素の新しい値を返さなければならない。それぞれの値を "key-value" に置き換へる例:
func KeyValue(key, val) return a:key . '-' . a:val endfunc call map(myDict, function('KeyValue'))
|lambda| を使へばより短く書けます:
call map(myDict, {key, val -> key . '-' . val})
"val" を使はない場合は省略できます:
call map(myDict, {key -> 'item: ' . key})
"key" を使用しない場合は短い名前が使用できます:
call map(myDict, {_, val -> 'item: ' . val})
この操作はその場で (in-place) 行はれる。リスト |List| や辭書 |Dictionary| を變更したくない場合は最初にコピーを作ること:
:let tlist = map(copy(mylist), ' v:val . "\t"')
{expr1} のリスト |List| または辭書 |Dictionary| に式を適用した結果を返す。{expr2} を評價してゐる最中にエラーが發生した場合は、{expr1} 內のそれ以降の要素の處理は行はれない。{expr2} が函數參照の場合、函數が "abort" フラグつきで定義されてゐない限り、函數內のエラーは無視される。
|method| としても使用できます:
mylist->map(expr2)
{dict} が省略されたかゼロのとき: モード {mode} におけるキーマップ {name} の rhs を返す。結果の文字列內の特殊文字は、":map
" コマンドでリスト表示した時のやうに變換される。
{name} といふキーマップが存在しない場合、空文字列が返される。{name} のマッピングが空の場合、"<Nop>" が返される。
{name} には ":map
" コマンドで使用可能な、特殊なキー名が指定できる。
{mode} には次の文字が使用可能:
"n" | ノーマル |
"v" | ビジュアル (選擇含む) |
"o" | オペレータ待機 (Operator-pending) |
"i" | 插入 |
"c" | コマンドライン |
"s" | 選擇 |
"x" | ビジュアル |
"l" | langmap |language-mapping| |
"t" | Terminal-Job |
"" | ノーマル、ビジュアル、及びオペレータ待機 |
{mode} が省略された場合、"" が使用される。
{abbr} が指定され、|TRUE| の場合はマッピングでなく短縮入力を對象とする。
{dict} に |TRUE| が指定されたときはマッピングのすべての情報を含んだ辭書が返る:
"lhs" | マッピングの {lhs} | ||||
"rhs" | マッピングの {rhs} (入力されたまま) | ||||
"silent" | |:map-silent| マッピングなら 1。さうでなければ 0。 | ||||
"noremap" | マッピングの {rhs} が再マップ可能なら 1。 | ||||
"expr" | 式マッピング (|:map-<expr>|) なら 1。 | ||||
"buffer" | バッファローカルマッピング (|:map-local|) なら 1。 | ||||
"mode" | マッピングが定義されてゐるモード。上述のモードに加へ、次の文字が使用される:
| ||||
"sid" | <sid> マッピングで使用されるスクリプトローカル ID (|<SID>|)。 | ||||
"lnum" | "sid" 內の行番號。もしも不明ならば 0 | ||||
"nowait" | 他の長いマッピングを待たない。(|:map-<nowait>|)。 |
まずカレントバッファにローカルなマッピングを探し、次のグローバルマッピングを探す。
この函數を使ふと、あるキーに對して既にマップがされてゐるとき、その動作を行ひつつ、再マップすることができる。槪要:
exe 'nnoremap <Tab> ==' . maparg('<Tab>', 'n')
|method| としても使用できます:
GetKey()->maparg('n')
モード {mode} におけるキーマップ {name} が存在するかチェックする。{name} に指定できる特殊文字は |maparg()| を參照。
{abbr} が指定され、|TRUE| の場合はマッピングでなく短縮入力を對象とする。
マッピングが {name} で始まるとき、またはマッピングが {name} のはじめに等しいときマッチすると見なされる。
マッチするか | "a" | "ab" | "abc" |
---|---|---|---|
mapcheck("a") | yes | yes | yes |
mapcheck("abc") | yes | yes | yes |
mapcheck("ax") | yes | no | no |
mapcheck("b") | no | no | no |
maparg() との違ひは、mapcheck() は {name} にマッチするマップを見つけるが、maparg() はぴつたり {name} に一致するマッピングのみを見つける。
{name} にマッチするキーマップが存在しない時には、空文字列が返される。結果が 1 つならばマップされた RHS が返される。複數見つかつた場合には、それらのうちどれか 1 つの RHS が返される。RHS が空ならば "<Nop>" になるだらう。
まずカレントバッファにローカルなマッピングを探し、次のグローバルマッピングを探す。
この函數はマッピングが曖昧にならないかチェックするために使ふことができる。例:
:if mapcheck("_vv") == "" : map _vv :set guifont=7x13<CR> :endif
これは、"_vv" といふマッピングが "_v" とか "_vvv" といつたマッピングと衝突しないやうに事前にチェックしてゐる。
|method| としても使用できます:
GetKey()->mapcheck('n')
{expr} がリスト |List| の場合は、{pat} にマッチする最初の要素のインデックスを返す。各要素は文字列として扱はれる。リスト |Lists| と辭書 |Dictionaries| は echo したときと同じやうに文字列表現に變換される。
それ以外の場合は、{expr} は文字列として扱はれる。{expr} の中で {pat} にマッチするインデックス (バイト單位のオフセット) を表す數値を返す。
最初の文字またはリスト |List| の最初の要素にマッチしたときは 0 を返す。マッチがないときは -1 を返す。サブマッチを取得するには |matchlist()| を參照。
例:
:echo match("testing", "ing") " 結果は 4 :echo match([1, 'x'], '\a') " 結果は 1
{pat} の扱はれ方については |string-match| を參照。
strpbrk() に相當する函數は Vim に存在しない。しかし同じことを次のやうにしてできる:
:let sepidx = match(line, '[.,;: \t]')
strcasestr() に相當する函數はVimに存在しない。しかし正規表現に "\c" をつければ大文字・小文字の違ひを無視できる:
:let idx = match(haystack, '\cneedle')
{start} が指定されたときは、文字列のバイトインデックス {start} の位置、またはリスト |List| の {start} の要素から檢索を始める。その場合も戾り値は最初の文字/要素から數へたインデックスであることに注意。例:
:echo match("testing", "ing", 2)
の結果は "4"。
:echo match("testing", "ing", 4)
の結果は "4"。
:echo match("testing", "t", 2)
の結果は "3"。
文字列の場合、{start} > 0 のときは、その文字列が {start} バイト後から始まるかのやうに扱はれる。そのため、"^" は {start} の位置にマッチする。ただし {count} が指定されたときは、{start} より前におけるマッチを無視してゐるかのやうに振る舞ふ (これは後方互換性を保つのを少々複雜にしてゐる)。
文字列の場合、{start} < 0 のときは {start} に 0 をセットする。リストの場合は、末尾からインデックスを數へるといふ意味になる。{start} が範圍外の場合 (文字列で {start} > strlen({expr}) となつた場合、リスト |List| で {start} > len({expr}) となつた場合) は -1 を返す。
{count} が指定されたときは {count} 番目のマッチ位置を返す。文字列でマッチが見つかつたとき、次のマッチングは 1 文字先から行はれる。よつて次の例は 1 を返す:
echo match("testing", "..", 0, 2)
リスト |List| の場合は次の要素から檢索を續ける。
Note:
{count} を指定すると、{start} の扱ひ方が變はつてしまふ。前の段落を參照。
受け付ける正規表現については |pattern| を參照。オプション ’ignorecase’ により、大文字・小文字を區別するかどうかを設定できる。’smartcase’ は適用されない。マッチングは常に ’magic’ をオン、’cpoptions’ を空にした狀態で行はれる。
|method| としても使用できます:
GetList()->match('word')
カレントウィンドウで强調表示するパターンを定義する。このパターンのことを「マッチ」と呼ぶ。構文グループ {group} で强調する。戾り値は、マッチを識別する ID である。|matchdelete()| でこの ID を指定してマッチを削除することができる。この ID はウィンドウに紐付けられてゐる。
パターンは大文字小文字を區別し、magic (|/magic|) として解釋される ({pattern} の中で明示的に變更しない限り)。オプションの ’magic’, ’smartcase’, ’ignorecase’ は使用されない。Conceal は特別であり、マッチを隱す作用がある。
省略可能な引數 {priority} はマッチの優先度を指定する。優先度が高いマッチは、より低いマッチの强調を上書きする。
優先度は整數で指定する (負の數も可能)。{priority} が指定されない場合は既定の優先度 10 となる。’hlsearch’ の優先度はゼロで、したがつてゼロより大きい優先度のマッチはすべてそれを上書きする。構文ハイライト (’syntax’ を參照) は獨立したメカニズムであり、優先度がいくつであらうとマッチは構文ハイライトより優先する。
{id} は特定のマッチ ID を返すことを要求する。指定された ID がすでに使はれてゐたら、エラーメッセージが表示され、そのマッチは登錄されない。ID は正の整數を指定する (ゼロは除く)。ID 1, 2, 3 は |:match|, |:2match|, |:3match| 用に豫約されてゐる。{id} が指定されないか -1 のときは、|matchadd()| が自動的に空いてゐる ID を取得する。
省略可能な引數 {dict} はより一層カスタマイズ可能な値を許す。現在、これは |hl-Conceal| でハイライトされたマッチを conceal 文字で表示されるのを明示するために使はれる。この辭書は下記のメンバを持つことができる:
マッチ (|hl-Conceal| のためだけにハイライトされたマッチ、|:syn-cchar| を參照) の代はりに表示する特別な文字
現在のウィンドウの代はりに、この番號もしくはウィンドウ ID のウィンドウを使用する
コマンド |:match| と異なり、マッチの個數に上限はない。
例:
:highlight MyGroup ctermbg=green guibg=green :let m = matchadd("MyGroup", "TODO")
このパターンを削除するには:
:call matchdelete(m)
|matchadd()| と |:match| で定義したマッチのリストは |getmatches()| で取得できる。全てのマッチを削除するのは |clearmatches()| 一發でできる。
|method| としても使用できます:
GetGroup()->matchadd('TODO')
|matchadd()| と同じだが、パターンを指定するのではなく、位置のリスト {pos} を指定する。このコマンドは正規表現を扱ふ必要もなく、畫面更新のためにバッファ行の境界を設定するため、|matchadd()| よりも速い。これは、例へば括弧の對應を强調表示するやうな、マッチの追加と削除を高速に實行したい狀況を想定してゐる。
リスト {pos} は以下のいづれかの値を要素として持つことができる:
指定できる位置は最大で 8 個である。
例:
:highlight MyGroup ctermbg=green guibg=green :let m = matchaddpos("MyGroup", [[23, 24], 34])
パターンの削除:
:call matchdelete(m)
|matchaddpos()| で追加されたマッチは |getmatches()| で取得する際には "pos1", "pos2", ... といふ項目を持つ。それぞれの値は {pos} で指定された値である。
|method| としても使用できます:
GetGroup()->matchaddpos([23, 11])
|:match|, |:2match|, |:3match| によつて設定されてゐるマッチパターンの情報を返す。{nr} が 1 のときは |:match| の情報、2 のときは |:2match| の情報、3 のときは |:3match| の情報を返す。
戾り値は次の 2 個の要素を持つリスト |List| である:
{nr} が 1、2、3 のどれでもないときは空リスト |List| を返す。マッチパターンがセットされてゐないときは [”, ”] を返す。|:match| を保存し、復元するのに便利である。|:match| を使つた强調は 3 個までに限られてゐる。|matchadd()| にはこの制限はない。
|method| としても使用できます:
GetMatch()->matcharg()
|matchadd()| または |:match| で定義したマッチの中で ID が {id} であるものを削除する。成功したときは 0、失敗したときは -1 を返す。|matchadd()| の例を參照。すべてのマッチを削除するのは |clearmatches()| 一發でできる。 {win} が指定されれば、カレントウィンドウではなく指定されたウィンドウあるいはウィンドウ ID を對象にする。
|method| としても使用できます:
GetMatch()->matchdelete()
|match()| と同じだが、返されるのはマッチした部分文字列の終了後のインデックスである。例:
:echo matchend("testing", "ing")
結果は "7"。
Vim には strspn() や strcspn() に相當する函數はないが、matchend() を使へば同じことができる:
:let span = matchend(line, '[a-zA-Z]') :let span = matchend(line, '[^a-zA-Z]')
ただしマッチがないときには -1 を返すところが異なる。
{start} は |match()| の場合と同じ意味を持つ。
:echo matchend("testing", "ing", 2)
結果は "7"。
:echo matchend("testing", "ing", 5)
結果は "-1"。
{expr} がリスト |List| の場合、戾り値は |match()| と等しくなる。
|method| としても使用できます:
GetText()->matchend('word')
|match()| と同じだがリスト |List| を返す。リストの最初の要素は、matchstr() が返すのと同じマッチした文字列。それ以降の要素は |:substitute| における "\1", "\2" のやうなサブマッチである。\1 から \9 までの閒で、指定されなかつたものは空文字列となる。例:
echo matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)')
結果は [’acd’, ’a’, ”, ’c’, ’d’, ”, ”, ”, ”, ”] となる。マッチしなかつたときは空リストを返す。
|method| としても使用できます:
GetList()->matchlist('word')
|match()| と同じだが、マッチした文字列を返す。例:
:echo matchstr("testing", "ing")
結果は "ing"。
マッチしなかつたときは "" を返す。 {start} の意味は |match()| の場合と同じ。
:echo matchstr("testing", "ing", 2)
結果は "ing"。
:echo matchstr("testing", "ing", 5)
結果は ""。
{expr} がリスト |List| のときはマッチした要素を返す。その要素の型は變換されないため、必ずしも文字列であるとは限らない。
|method| としても使用できます:
GetText()->matchstr('word')
|matchstr()| と同じだがマッチした文字列とマッチした開始位置と終了位置を返す。例:
:echo matchstrpos("testing", "ing")
結果は ["ing", 4, 7] である。
マッチが無い場合は ["", -1, -1] が返る。 {start} が指定されてゐる場合は |match()| と同じ意味になる。
:echo matchstrpos("testing", "ing", 2)
結果は ["ing", 4, 7] である。 >
:echo matchstrpos("testing", "ing", 5)
結果は ["", -1, -1] である。
{expr} が リスト |List| の場合、マッチしたアイテム、{pat} でマッチした最初のインデックス、マッチの開始位置と終了位置が返る。
:echo matchstrpos([1, '__x'], '\a')
結果は ["x", 1, 2, 3] である。
型は變更されない。必ずしも文字列である必要はない。
|method| としても使用できます:
GetText()->matchstrpos('word')
{expr} の全要素の値の最大値を返す。{expr} はリストか辭書である。辭書の場合、辭書に含まれるすべての値の最大値を返す。{expr} がリストでも辭書でもなかつたり、要素のどれかが數値に變換できない場合はエラーとなる。空のリスト |List| または辭書 |Dictionary| の場合は 0 を返す。
|method| としても使用できます:
mylist->max()
{expr} の全要素の値の最小値を返す。{expr} はリストか辭書である。辭書の場合、辭書に含まれるすべての値の最小値を返す。{expr} がリストでも辭書でもなかつたり、要素のどれかが數値に變換できない場合はエラーとなる。空のリスト |List| または辭書 |Dictionary| の場合は 0 を返す。
|method| としても使用できます:
mylist->min()
ディレクトリ {name} を作成する。
{path} が "p" のときは必要に應じて途中のディレクトリも作成される。さうでないときは "" にすること。
{prot} は作成するディレクトリの保護ビット。デフォルトは 0755 (rwxr-xr-x: 所有者は讀み書き可能、他の人は讀み込み可能)。
他の人が讀み込めないやうにするには0700とすること。{prot} は {name} の最後の部分にのみ適用される。なので、/tmp/foo/bar を作成すると /tmp/foo は 0755 で作成される。
例:
:call mkdir($HOME . "/tmp/foo/bar", "p", 0700)
|sandbox| の中ではこの函數は使用できない。
もしもディレクトリがすでに存在し、"p" フラグが渡されてゐるなら、エラーは生じない (patch 8.0.1708 以降)。ただし、"p" オプション未指定だと、呼び出しは失敗する。
函數の結果は數値である。呼び出しが成功した場合は1、ディレクトリの作成に失敗したか部分的に失敗した場合は 0 である。
システムによつては利用できない場合がある。これを確認するには次のやうにする:
:if exists("*mkdir")
|method| としても使用できます:
GetName()->mkdir()
現在のモードを示す文字列を返す。
[expr] に 0 でない數値か空でない文字列 (|non-zero-arg|) を指定した場合、フルモードが返される。それ以外の場合は最初の 1 文字だけが返される。
|state()| も參照してください。
n | ノーマル、Terminal-Normal |
no | オペレータ待機 |
nov | オペレータ待機 (强制文字單位 |o_v|) |
noV | オペレータ待機 (强制行單位 |o_V|) |
noCTRL-V | オペレータ待機 (强制ブロック單位 |o_CTRL-V|); CTRL-V は 1 文字である |
niI | |Insert-mode| で |i_CTRL-O| を使用してゐるノーマル |
niR | |Replace-mode| で |i_CTRL-O| を使用してゐるノーマル |
niV | |Virtual-Replace-mode| で |i_CTRL-O| を使用してゐるノーマル |
v | 文字單位ビジュアル |
V | 行單位ビジュアル |
CTRL-V | 矩形ビジュアル |
s | 文字單位選擇 |
S | 行單位選擇 |
CTRL-S | 矩形選擇 |
i | 插入 |
ic | 插入モード補完 |compl-generic| |
ix | 插入モード |i_CTRL-X| 補完 |
R | 置換 |R| |
Rc | 置換モード補完 |compl-generic| |
Rv | 假想置換 |gR| |
Rx | 置換モード |i_CTRL-X| 補完 |
c | コマンドライン編輯 |
cv | Vim Ex モード |gQ| |
ce | ノーマル Ex モード |Q| |
r | Hit-enter プロンプト |
rm | ‘-- more --’ プロンプト |
r? | ある種の |:confirm| 問ひ合はせ |
! | シェルまたは外部コマンド實行中 |
t | Terminal-Job モード: ジョブに渡るキー |
これらはオプション ’statusline’ の中や、|remote_expr()| といつしよに使ふと便利である。他のほとんどの場所では "c" または "n" しか返さない。
Note:
將來的にはより多くのモードとより多くの特殊なモードが追加されるであらうことに注意。文字列全體を比較することよりも文字列を讀み込むことのみの方が良い。
|visualmode()| も參照。
|method| としても使用できます:
DoFull()->mode()
MzScheme の式 {expr} を評價してその結果を Vim の變數に變換した結果を返す。
數値と文字列はそのまま返る。
ペア (リストと不適切なリスト (improper list) を含む) とベクタは Vim のリスト (|Lists|) に變換される。 ハッシュテーブルは Vim の辭書 (|Dictionary|) に變換され、そのキーは文字列に變換される。
その他のすべての型は display 函數を使つて文字列に變換される。
例:
:mz (define l (list 1 2 3)) :mz (define h (make-hash)) (hash-set! h "list" l) :echo mzeval("l") :echo mzeval("h")
|method| としても使用できます:
GetExpr()->mzeval()
{|+mzscheme| 機能を有效にしてコンパイルしたときのみ有效}
{lnum} 行以降 ({lnum} 行を含む) の最初の非空行の行番號を返す。例:
if getline(nextnonblank(1)) =~ "Java"
{lnum} が無效なときや、それ以降に非空行がないときは 0 を返す。|prevnonblank()| も參照。
|method| としても使用できます:
GetLnum()->nextnonblank()
コード {expr} で表される1文字からなる文字列を返す。例:
nr2char(64) | "を"返す |
nr2char(32) | " "を返す |
{utf8} を省略、またはゼロを指定すると、現在の ’encoding’ が適用される。"utf-8" の場合の例:
nr2char(300) | 短音記號つきの I を返す |
{utf8} に 1 を指定すると、常に utf-8 文字が返る。
Note:
Vim 內部では、ファイル中の NUL 文字を改行文字 (0x0A) に變換して保持してゐる。そのため、nr2char(10) とすれば NUL 文字を指定できる。nr2char(0) は眞の NUL 文字 (文字列の終端) となるので、空文字列を返す。
文字の數値のリストを文字列に變換するには:
let list = [65, 66, 67] let str = join(map(list, {_, val -> nr2char(val)}), '')
結果: "ABC"
|method| としても使用できます:
GetNumber()->nr2char()
2 つの引數のビット論理和。引數は數値に變換される。リスト、辭書、浮動小數點數を指定するとエラーになる。
例:
:let bits = or(bits, 0x80)
|method| としても使用できます:
:let bits = bits->or(0x80)
パス {expr} におけるディレクトリ名を短縮して返す。擴張子、ファイル名はそのまま保たれる。パスのその他の構成要素は1文字に縮められる。1 文字目の ’~’ と ’.’ はそのまま保たれる。例:
:echo pathshorten('~/.vim/autoload/myfile.vim') ~/.v/a/myfile.vim
パスが實際に存在するかどうかは關係ない。
|method| としても使用できます:
GetDirectories()->pathshorten()
Perl の式 {expr} をスカラーコンテキストで評價して、結果を Vim のデータ形式にして返す。もし値が變換できない場合、Perl における文字列として返される。
Note:
もし排列かハッシュが必要ならば、{expr} ではそれらへの參照を返す必要がある。例:
:echo perleval('[1 .. 4]') [1, 2, 3, 4]
|method| としても使用できます:
GetExpr()->perleval()
{|+perl| 機能付きでコンパイルされたときのみ利用可能}
popup_ 函數群についてはここに文書化されてゐます: |popup-functions|
{x} の {y} 乘を |Float| で返す。{x} と {y} は |Float| または |Number| に評價されなければならない。
例:
:echo pow(3, 3) 27.0 :echo pow(2, 16) 65536.0 :echo pow(32, 0.20) 2.0
|method| としても使用できます:
Compute()->pow(3)
{|+float| 機能つきでコンパイルされたときのみ有效}
{lnum} 行以前 ({lnum} 行を含む) の最初の非空行の行番號を返す。例:
let ind = indent(prevnonblank(v:lnum - 1))
{lnum} が無效なときや、それ以前に非空行がないときは 0 を返す。|nextnonblank()| も參照。
|method| としても使用できます:
GetLnum()->prevnonblank()
{fmt} にしたがつて組み立てた文字列を返す。{fmt} 中の "%" 變換指示子は、對應する引數の値で置き換へられる。例:
printf("%4d: E%d %.30s", lnum, errno, msg)
結果は次のやうな形になる:
" 99: E42 asdfasdfasdfasdfasdfasdfasdfas"
|method| としても使用でき、ベースは第 2 引數として渡されます:
Compute()->printf("result: %d")
よく使はれる變換指示子は次の通り:
%s | 文字列 |
%6S | 6 表示幅で右揃へした文字列 |
%6s | 6 バイトで右揃へした文字列 |
%.9s | 9 バイトに切り詰めた文字列 |
%c | 1 バイト |
%d | 10 進數値 |
%5d | スペースで埋めて 5 文字にした 10 進數値 |
%x | 16 進數値 |
%04x | 0 で埋めて少なくとも 4 文字にした 16 進數値 |
%X | 16 進數値 (大文字) |
%o | 8 進數値 |
%08b | 最低 8 文字の 0 埋めされた 2 進數 |
%f | 浮動小數點數。12.23, inf, -inf, nan |
%F | 浮動小數點數。12.23, INF, -INF, NAN |
%e | 浮動小數點數。1.23e3, inf, -inf, nan |
%E | 浮動小數點數。1.23E3, INF, -INF, NAN |
%g | 浮動小數點數。値によつて %f または %e となる |
%G | 浮動小數點數。値によつて %F または %E となる |
%% | 文字 % そのもの |
變換指示子は ’%’ で始まり、變換文字で終はる。それ以外の全ての文字はそのままになる。
"%" は變換指示子の開始を意味する。以下の順序で引數を指定できる:
% [flags] [field-width] [.precision] type
0 個以上の以下のフラグを指定できる
# | 値を「代替形式」に變換する。變換指示子 c, d, s に對してはこのオプションは效果を持たない。變換指示子 o に對しては數値の精度を上げ、出力文字列の最初の文字が 0 になる。(明示的な精度0で値0が表示されるときを除く)
變換指示子 b と B に對しては、値が 0 でない場合、文字列 "0b" (變換子 B の場合は "0B") を前につける。 變換指示子 x と X に對しては、値が 0 でない場合、文字列 "0x" (變換子 X の場合は "0X") を前につける。 |
0 (zero) | ゼロパディングする。全ての變換に對し、變換された値の左側を空白でなく 0 で埋める。數値變換 (d, b, B, o, x, X) に對して精度が指定されてゐる場合はフラグ 0 は無視される。 |
- | 負のフィールド幅を示す。變換値がフィールド境界に左揃へされる。變換値の左に空白や 0 がつくのではなく、變換値の右に空白がつく。- と 0 を兩方指定した場合は - が有效になる。 |
’ ’ (space) | 空白。符號付き變換 (d) で作成される正の數値の前に空白が殘る。 |
+ | + 文字。符號付き變換で作成される數値の前に常に符號を付ける。+ と’ ’(space) を兩方指定した場合は + が有效になる。 |
10 進數文字列 (省略可)。最低フィールド幅を指定する。變換値のバイト數がこのフィールド幅より少ない場合、左に空白がついて (左揃へフラグを指定した場合は右に空白がついて) フィールドの幅に合はせられる。
ピリオド ’.’ の次に數字文字列がつづく形式の精度 (省略可)。數字文字列を省略した場合、精度は 0 になる。d, o, x, X 變換における最低桁數を指定する。また、s 變換における最大バイト數を指定する。浮動小數點數の場合は小數點以下の桁數。
變換の型を指定する 1 文字。下記を參照。
フィールド幅と精度には、數字文字列の代はりにアスタリスク ’*’ を指定できる。その場合、對應する數値の引數がフィールド幅または精度となる。負のフィールド幅を指定すると、絕對値がフィールド幅となり、左揃へフラグがオンになる。負の精度を指定すると、完全に無視される。例:
:echo printf("%d: %.*s", nr, width, line)
この例は、テキスト "line" の長さを "width" バイトに制限する。
變換指示子の意味は以下の通り:
dbBoxX | 數値の引數を符號付き 10 進數 (d)、符號なし 2 進數 (b または B)、符號なし 8 進數 (o)、符號なし 16 進數 (x または X) の書式に變換する。x の場合は "abcdef" と小文字を使ひ、X の場合は "ABCDEF" と大文字を使ふ。
精度が指定されてゐれば出力する最小桁數を意味する。變換された値を出力するのにそれ以下しか必要としない場合は、左側にゼロを加へて埋める。 フィールド幅が存在しない場合や小さすぎる場合でも、數値の幅を切り詰めることは決してない。變換結果がフィールド幅より多くの桁を必要とする場合は、十分な幅に廣げられる。 モディファイア ’h’ は引數が 16 ビット引數である事を示す。 モディファイア ’l’ は引數が 32 ビット引數である事を示す。 モディファイア ’L’ は引數が 64 ビット引數である事を示す。 一般的にモディファイアは便利ではない。引數から型が分かる時には無視されてしまふ。 |
i | d のエイリアス |
D | ld のエイリアス |
U | lu のエイリアス |
O | lo のエイリアス |
c | 引數の數値を1バイトに變換し、結果の文字列を書き出す。 |
s | 引數の文字列を出力する。精度を指定した場合、その數値以下のバイト數のみを書き出す。
引數が文字列型ではない場合、" |
S | 引數の文字列を出力する。精度を指定した場合、その數値以下の表示幅のみを書き出す。 |
f F | Float の引數を 123.456 の形式の文字列に變換する。精度は小數點以下の桁數を指定する。精度が 0 のときは小數點以下は省略される。精度を指定しないときは 6 桁となる。とてつもなく大きい數 (範圍外またはゼロによる除算) のときは %f の場合 "inf" または "-inf" となる (%F の場合は "INF" または "-INF")。"0.0 / 0.0" は %f の場合 "nan" になる (%F の場合は "NAN")。
例:
echo printf("%.2f", 12.115) 12.12
|
e E | Float の引數を 1.234e+03 といふ形式 (’E’ のときは 1.234E+03) の文字列に變換する。精度は ’f’ の場合と同じく小數點以下の桁數を指定する。 |
g G | 0.001 (を含む) から 10000000.0 (を除く) の閒の場合は ’f’ の形式で變換し、この閒にない場合は ’g’ は ’e’、’G’ は ’E’ の形式によつて變換する。精度が指定されないときは餘分なゼロ (小數點の直後のゼロ以外) と ’+’ 記號は省かれる。よつて 10000000.0 は 1.0e7 になる。 |
% | 單一の ’%’ を書き出す。引數は變換しない。完全な變換指定は "%%" となる。 |
數値の引數を受け取る變換指示子には文字列を與へることもできる。變換は自動的に行はれる。
浮動小數點數または文字列の引數を受け取る變換指示子には、數値を與へることもできる。變換は自動的に行はれる。
それ以外の型の引數を與へるとエラーメッセージが表示される。
{expr1} 以降の引數の數と "%" 變換指示子の個數がちやうど一致しなければならない。さうでない場合はエラーとなる。引數は最大 18 個まで使へる。
{buf} バッファのためのプロンプトコールバックを {expr} に設定する。{expr} が空文字のとき、コールバックは削除される。{buf} の ’buftype’ が "prompt" に設定されてゐるときのみ效果がある。
コールバックは Enter を押した時に呼び出される。カレントバッファは常にプロンプトバッファになる。プロンプトのための改行は、コールバックが發動する前に追加される。したつて、コールバックが呼び出されてゐるプロンプトは、1 行ではない最後になるだらう。
もしもコールバックがバッファにテキストを追加しようとするなら、最終行の手前に插入されなければならない。そこがカレントプロンプトだから。非同期的に行なへる。
コールバックは 1 つの引數で呼び出される。この引數はプロンプトで入力されたテキストだ。ユーザーが Enter だけを押した時は、空の文字列になる。 例:
call prompt_setcallback(bufnr(), function('s:TextEntered')) func s:TextEntered(text) if a:text == 'exit' || a:text == 'quit' stopinsert close else call append(line('$') - 1, 'Entered: "' . a:text . '"') " Reset 'modified' to allow the buffer to be closed. set nomodified endif endfunc
|method| としても使用できます:
GetBuffer()->prompt_setcallback(callback)
{expr} するためにバッファ {buf} のコールバックを設定する。{expr} が空文字のときはコールバックは削除される。これは {buf} の ’buftype’ に "prompt" が設定されてゐるときのみ效果がある。
このコールバックは插入モードで CTRL-C を押すことで呼び出される。コールバックの設定がないと、Vim はどのやうなバッファであつても、插入モードを拔けるだらう。
|method| としても使用できます:
GetBuffer()->prompt_setinterrupt(callback)
{buf} バッファのためのプロンプトを {text} に設定する。{text} の終はりは 1 つのスペースにしたいに違ひない。
もしも {buf} の ’buftype’ が "prompt" に設定されてゐるなら、結果は可視のものだけである。例:
call prompt_setprompt(bufnr(), 'command: ')
|method| としても使用できます:
GetBuffer()->prompt_setprompt('command: ')
prop_ 函數群についてはここに文書化されてゐます: |text-prop-functions|
ポップアップメニュー (|ins-completion-menu| を參照) が表示されない場合、空の |Dictionary| を返します。それ以外の場合、以下のキーを使用した |Dictionary| を返します。 height nr of items visible width screen cells row top screen row (0 first row) col leftmost screen column (0 first col) size total nr of items scrollbar |TRUE| if scrollbar is visible
The values are the same as in |v:event| during |CompleteChanged|.
ポップアップメニューが表示されてゐるときには非 0 を返す。表示されてゐないときは 0 を返す。|ins-completion-menu| を參照。ポップアップメニューを消してしまふやうな操作を避けるために使はれる。
Python の式 {expr} を評價して、結果を Vim のデータ形式にして返す。
數値と文字列はそのまま返る (ただし文字列はコピーされ、Unicode から ’encoding’ に變換される)。
リストは Vim の |List| 型に變換される。
辭書は Vim の |Dictionary| 型に變換される。辭書のキーは文字列に變換される。
|method| としても使用できます:
GetExpr()->py3eval()
{|+python3| 機能付きでコンパイルされたときのみ利用可能}
Python の式 {expr} を評價して、結果を Vim のデータ形式にして返す。
數値と文字列はそのまま返る (ただし文字列はコピーされる)。
リストは Vim の |List| 型に變換される。
辭書は Vim の |Dictionary| 型に變換される。文字列ではない辭書のキーはエラーになる。
|method| としても使用できます:
GetExpr()->pyeval()
{|+python| 機能付きでコンパイルされたときのみ利用可能}
Python の式 {expr} を評價して、結果を Vim のデータ形式にして返す。
Python 2 または 3 を使用する。|python_x| と ’pyxversion’ を參照。
|method| としても使用できます:
GetExpr()->pyxeval()
以下のやうな數値のリスト |List| を返す。
最大値が開始位置より 1 だけ前のときは空リストを返す。最大値が開始位置より 1 以上前のときはエラーになる。
例:
range(4) " [0, 1, 2, 3] range(2, 4) " [2, 3, 4] range(2, 9, 3) " [2, 5, 8] range(2, -2, -1) " [2, 1, 0, -1, -2] range(0) " [] range(2, 0) " エラー!
|method| としても使用できます:
GetExpr()->range()
{directory} 內のファイル名とディレクトリ名のリストを返す。一致數を制限するなど、複雜なことをする必要がない場合は、|glob()| を使用することもできる。
{expr} が省略されるとすべてのエントリが含まれる。 {expr} が與へられると、それは何をすべきかをチェックするために評價される:
{expr} が評價されるたびに "v:val" がエントリ名に設定される。 {expr} が函數の場合、名前は引數として渡される。例へば、".txt" で終はるファイルのリストを取得するには、次のやうにする:
readdir(dirname, {n -> n =~ '.txt$'})
隱しファイルとバックアップファイルをスキップするには:
readdir(dirname, {n -> n !~ '^\.\|\~$'})
ディレクトリツリーを取得したい場合は:
function! s:tree(dir) return {a:dir : map(readdir(a:dir), \ {_, x -> isdirectory(x) ? \ {x : s:tree(a:dir . '/' . x)} : x})} endfunction echo s:tree(".")
|method| としても使用できます:
GetDirName()->readdir()
ファイル {fname} を讀み込み、各行を要素とするリスト |List| を返す。行は NL 文字で終はるものとする。改行文字が CR である Macintosh のファイルは單一の長い行となる (どこかに NL が現れない限り)。 すべての NUL 文字は NL 文字に置換される。{type} が "b" を含む場合、次のやうにバイナリモードになる:
{type} が "B" を含む場合、ファイルのバイナリデータは變更せずに |Blob| が返される。 バイナリモードでない場合:
{max} を指定すると、讀み込む行數の最大値となる。ファイルの最初の 10 行をチェックするときに役に立つ:
:for line in readfile(fname, '', 10) : if line =~ 'Date' | echo line | endif :endfor
{max} が負の場合は、ファイルの最後から -{max} 行を讀み込んで返す。ファイルが {max} 行以下の場合は全行を返す。{max} が 0 の場合は空リストを返す。
Note:
{max} を指定しない場合はファイル全體をメモリに讀み込む。エンコーディング判定も行はないことに注意。必要ならバッファに讀み込むこと。
ファイルを開けないときはエラーメッセージを表示し、空リストを返す。|writefile()| も參照。
|method| としても使用できます:
GetFileName()->readfile()
實行されてゐるレジスタ名の一文字を返す。實行されてゐるレジスタが無ければ空文字を返す。|@| を參照。
記錄されてゐるレジスタ名の一文字を返す。記錄が無ければ空文字を返す。|q| を參照。
時刻値を表す値を返す。値の形式はシステムに依存する。この値を |reltimestr()| に渡すと文字列に變換でき、|reltimefloat()| に渡すと浮動小數點數に變換できる。
引數を指定しないと現在時刻を返す。1 個の引數を指定すると、その引數で指定された時刻からの經過時閒を返す。2 個の引數を指定すると、{start} と {end} の閒の經過時閒を返す。{start} と {end} は reltime() で返される値でなければならない。
|method| としても使用できます:
GetStart()->reltime()
{|+reltime| 機能付きでコンパイルされたときのみ利用可能}
{time} の値を代はりに浮動小數點で返す。
例:
let start = reltime() call MyFunction() let seconds = reltimefloat(reltime(start))
オーバーヘッドについては reltimestr() の note を參照。|profiling| も參照。
|method| としても使用できます:
reltime(start)->reltimefloat()
{|+reltime| 機能付きでコンパイルされたときのみ利用可能}
時刻値 {time} を表現する文字列を返す。秒、ドット、マイクロ秒といふ形式になる。例:
let start = reltime() call MyFunction() echo reltimestr(reltime(start))
Note:
このコマンドにかかるオーバーヘッドがこの時閒に加算される。精度はシステムに依存する。
文字列をきれいに揃へるために、先頭にスペースが插入される。このスペースを取り除くには split() を使へばよい。
echo split(reltimestr(reltime(start)))[0]
|profiling| も參照。
|method| としても使用できます:
reltime(start)->reltimestr()
{|+reltime| 機能付きでコンパイルされたときのみ利用可能}
{string} を {server} に送信する。{string} は式と見なされ、評價した結果が返つてくる。 戾り値は文字列かリスト |List| でなければならない。リスト |List| の場合は要素を連結して文字列に變換される。要素閒の區切りは改行文字となる (join(expr, "\n") と同樣)。
もしも {idvar} が存在して空でなければ、それは變數名として受け取られれ、後で |remote_read()| で使はれる {serverid} がその變數に保存される。
もしも {timeout} が與へられてゐるなら、讀み込み時閒はその秒數まで待つ。さうでなければ、タイムアウトの時閒は 600 秒になる。
|clientserver| と |RemoteReply| も參照。 |sandbox| の中ではこの函數は利用できない。
{|+clientserver| 機能付きでコンパイルされたときのみ利用可能}
Note:
なんらかのエラーが發生した場合は、ローカルでエラーメッセージが表示され、戾り値は空文字列となる。
函數が現在アクティブであるのとは無關係に、變數はグローバルなスコープで評價されるだらう。デバッグモードを除き、ローカル函數の變數と引數は評價されうる。
例:
:echo remote_expr("gvim", "2+2") :echo remote_expr("gvim1", "b:current_syntax")
|method| としても使用できます:
ServerName()->remote_expr(expr)
サーバー名 {server} の Vim をフォアグラウンドに移動させる。次を實行するのと同樣である:
remote_expr({server}, "foreground()")
ただし、次の點が異なる: Win32 では、OS が必ずしもサーバーが自分自身をフォアグラウンドにすることを許可しないので、對應策としてクライアントが仕事を行ふ。
Note:
foreground() と違ひ、最小化されてゐたウィンドウを復元しない。
|sandbox| の中ではこの函數は利用できない。
|method| としても使用できます:
ServerName()->remote_foreground()
{Win32, Athena, Motif, GTK の GUI 版と Win32 コンソール版でのみ利用可能}
{serverid} から文字列を取得可能ならば正の數値を返す。變數 {retvar} に返信文字列をコピーする。{retvar} は變數の名前を示す文字列でなければならない。 取得できないならば 0 を返す。なんらかの異狀のときは -1 を返す。|clientserver| も參照。
|sandbox| の中ではこの函數は利用できない。
{|+clientserver| 機能付きでコンパイルされたときのみ利用可能}
例:
:let repl = "" :echo "PEEK: ".remote_peek(id, "repl").": ".repl
|method| としても使用できます:
ServerId()->remote_peek()
{serverid} からの返信の中で最も古いものを取り出して返す。取り出した返信はキューから取り除かれる。{timeout} が與へられてゐなければ、返信を取り出せるやうになるまで待機する。|clientserver| も參照。
|sandbox| の中ではこの函數は利用できない。
{|+clientserver| 機能付きでコンパイルされたときのみ利用可能}
例:
:echo remote_read(id)
|method| としても使用できます:
ServerId()->remote_read()
{string} を {server} に送信する。{string} はキー入力として解釋され、この函數の呼び出しは卽座に戾つてくる。Vim サーバーにおいて、受け取つたキー入力はマッピング展開されない。|:map| {idvar} には變數名を指定する。後で remote_read() で使はれる {serverid} がその變數に保存される。|clientserver| と |RemoteReply| も參照。
|sandbox| の中ではこの函數は利用できない。
{|+clientserver| 機能付きでコンパイルされたときのみ利用可能}
Note:
なんらかのエラーが發生すると、サーバー側で報告され、表示が亂れてしまふかもしれない。例:
:echo remote_send("gvim", ":DropAndReply ".file, "serverid"). \ remote_read(serverid) :autocmd NONE RemoteReply * \ echo remote_read(expand("<amatch>")) :echo remote_send("gvim", ":sleep 10 | echo ". \ 'server2client(expand("<client>"), "HELLO")<CR>')
|method| としても使用できます:
ServerName()->remote_send(keys)
サーバー {name} になる。|v:servername| が空でないときに、すでにサーバーとして動作してゐるのであれば失敗する。
|method| としても使用できます:
ServerName()->remote_startserver()
{|+clientserver| 機能付きでコンパイルされたときのみ利用可能}
{end} を指定しなかつた場合: リスト |List| {list} から {idx} 位置の要素を削除し、その要素を返す。
{end} を指定した場合: {idx} から {end} まで (兩端を含む) の要素を削除し、それらの要素からなるリストを返す。
{idx} と {end} が同じ要素を指す場合、1 個の要素からなるリストが返る。{end} が {idx} より前になる場合、エラーとなる。
{idx} と {end} として指定できる値については |list-index| を參照。
例:
:echo "last item: " . remove(mylist, -1) :call remove(mylist, 0, 9)
ファイルを削除するには |delete()| を使ふ。
|method| としても使用できます:
mylist->remove(idx)
{end} を指定しなかつた場合: |Blob| {blob} から {idx} 位置のバイトを削除し、そのバイトを返す。
{end} を指定した場合: {idx} から {end} まで (兩端を含む) のバイトを削除し、それらのバイトを |Blob| で返す。{idx} と {end} が同じバイトを指す場合、1個のバイトからなる |Blob| が返る。{end} が {idx} より前になる場合、エラーとなる。
例:
:echo "last byte: " . remove(myblob, -1) :call remove(mylist, 0, 9)
{dict} からキー {key} を持つ要素を削除して返します。例:
:echo "removed " . remove(dict, "one")
{dict} に {key} がない場合はエラーになります。
ファイルの名前を {from} から {to} へ變へる。ファイルシステムを越えてファイルを移動するのにも使用できる。結果は數値で、成功すれば 0、失敗すれば非ゼロになる。
Note:
ファイル {to} がすでに存在する場合、警告なしに上書きされる。|sandbox| の中ではこの函數は利用できない。
|method| としても使用できます:
GetOldName()->rename(newname)
{expr} を {count} 回繰り返し、連結して返す。例:
:let separator = repeat('-', 80)
{count} が 0 または負のときは空文字列を返す。{expr} がリスト |List| のときは {count} 回連結した結果を返す。例:
:let longlist = repeat(['a', 'b'], 3)
結果は [’a’, ’b’, ’a’, ’b’, ’a’, ’b’] となる。
|method| としても使用できます:
mylist->repeat(count)
MS-Windows では {filename} がショートカット (.lnkファイル) ならばその指す先を單純化した形式で返す。
{filename} がシンボリックリンクまたはジャンクションポイントの場合は、ターゲットへのフルパスを返す。ジャンクションのターゲットが削除されたら、{filename} を返す。
Unix ではパス {filename} の中の全てのシンボリックリンクを解決し、單純化して返す。循環リンクがある場合に備へて、シンボリックリンクの解決は 100 回までに制限されてゐる。
その他のシステムでは {filename} を單純化して返す。單純化の手順は |simplify()| と同じである。resolve() は (結果も相對パスであるならば) カレントディレクトリを表す先頭のパスコンポーネントと、末尾のパス區切り文字をそのままにする。
|method| としても使用できます:
GetName()->resolve()
{object} の要素の順序をその場で (in-place) 反轉させる。{object} は |List| または |Blob| である。{object} そのものを返す。
オブジェクトを變更させないでおくには、最初にコピーを作る:
:let revlist = reverse(copy(mylist))
|method| としても使用できます:
mylist->reverse()
{expr} を最も近い整數に丸め、|Float| を返す。{expr} が 2 つの整數の眞ん中にある場合、大きい方 (0 から遠い方) になる。{譯注: つまり四捨五入になる}
{expr} は |Float| または |Number| に評價されなければならない。 例:
echo round(0.456) 0.0 echo round(4.5) 5.0 echo round(-4.5) -5.0
|method| としても使用できます:
Compute()->round()
{|+float| 機能つきでコンパイルされたときのみ有效}
Ruby の式 {expr} を評價し、その結果を Vim のデータ構造に變換したものを返す。
數値、浮動小數點數、文字列はそのまま返される (文字列はコピーされる)。 排列は Vim の |List| 型に變換される。ハッシュは Vim の |Dictionary| 型に變換される。それ以外のオブジェクトは "Object#to_s" メソッドの結果の文字列として表現される。
|method| としても使用できます:
GetRubyExpr()->rubyeval()
{|+ruby| 機能つきでコンパイルされたときのみ有效}
|screenchar()| と同樣だが、屬性を返す。これは他の位置の屬性と比較するのに利用できるだけの適當な數値である。
|method| としても使用できます:
GetRow()->screenattr(col)
スクリーン上の位置 [row, col] の文字を數値で返す。これは全てのスクリーン位置、ステータスライン、ウィンドウセパレータ、コマンドラインで機能する。左上の位置は行番號が 1、列番號が 1 である。文字は合成文字を除く。2 バイトのエンコーディングでは最初のバイトだけであるかもしれない。
この函數は主にテスト用に使はれる。row か col が範圍外である場合は -1 を返す。
|method| としても使用できます:
GetRow()->screenchar(col)
結果は數値のリスト。最初の數値は |screenchar()| が返す數値と同一。それ以降の數値は基底文字に續く合成文字の數値。
この函數は主にテスト用。
row や col が範圍外である場合は空のリストを返す。
|method| としても使用できます:
GetRow()->screenchars(col)
現在のカーソルのスクリーン列を數値で返す。一番左の列番號は 1。この函數は主にテスト用。
Note:
常に現在のスクリーン列を返す。したがつて、コマンドで使はれた場合 (例へば ":echo screencol()") は、コマンドライン內の列を返す (つまりコマンドが實行されたときその値は 1)。ファイル內でのカーソル位置を取得するには次のやうなマップを使用する:nnoremap <expr> GG ":echom ".screencol()."\n" nnoremap <silent> GG :echom screencol()<CR>
結果は辭書です。バッファの {lnum} 行 と {col} 桁における、{winid} ウィンドウ內のテキスト文字のスクリーンの位置です。{col} は 1 からはじまるバイトのインデックスです。 辭書の內容は次のものです:
row | スクリーン行 |
col | 最初のスクリーン桁 |
endcol | 最後のスクリーン桁 |
curscol | カーソルのスクリン桁 |
もしも指定された位置が不可視なら、すべての値はゼロです。文字が 1 つのスクリーンセルよりも大きいときは、"endcol" の値は "col" とは異なります。例: 1 つのタブ "col" は 1 になり、"endcol" は 8 になります。 "curscol" の値はカーソルが置かれる場所です。1 つのタブは "endcol" と同じになります。一方でダブル幅文字については "col" と同じになります。
|method| としても使用できます:
GetWinid()->screenpos(lnum, col)
現在のカーソルのスクリーン行を數値で返す。一番上の行番號は 1。この函數は主にテスト用。代用として |winline()| を使ふ事ができる。
Note:
|screencol()| と同樣の制約あり。
結果は文字列で、スクリーンの位置 [row, col] の基底文字と合成文字全てを含む。|screenchars()| と似てゐるが文字を文字列として返す。
この函數は主にテスト用。
row や col が範圍外である場合は空文字列を返す。
|method| としても使用できます:
GetRow()->screenstring(col)
正規表現パターン {pattern} を檢索する。檢索はカーソル位置から開始する (檢索位置を指定するには |cursor()| を使へばよい)。
マッチが見つかつた場合はその行番號を返す。マッチがない場合は 0 を返し、カーソルは移動しない。エラーメッセージは表示されない。
{flags} は以下のフラグ文字からなる文字列:
’b’ | 後方 (上方) に檢索する |
’c’ | カーソル位置のマッチを受け入れる |
’e’ | マッチの末尾へ移動する |
’n’ | カーソルを移動させない |
’p’ | 部分パターン (後述) のマッチの番號を返す |
’s’ | 以前のカーソル位置をマーク ’ に記錄する |
’w’ | ファイルの末尾で循環する |
’W’ | ファイルの末尾で循環しない |
’z’ | 0桁目からではなく、カーソル位置の桁から檢索を開始する |
’w’ と ’W’ の兩方とも指定されない場合は ’wrapscan’ が適用される。
フラグ ’s’ が指定された場合、カーソルが移動したときのみマーク ’ が設定される。フラグ ’s’ は ’n’ と組み合はせることはできない。
’ignorecase’, ’smartcase’, ’magic’ が適用される。
フラグ ’z’ が指定されない場合、常に0列目から開始して檢索する。そして、カーソルの前にあるマッチはスキップされる。’cpo’ 內に ’c’ フラグが存在する場合、次の檢索はそのマッチの後から始まる。’cpo’ 內に ’c’ フラグが存在しない場合、次の檢索は現在のカーソル位置から 1 桁進んで始まる。
引數 {stopline} が指定されたときはこの行を檢索した後で檢索を停止する。これは檢索する行を制限するために有用である。例:
let match = search('(', 'b', line("w0")) let end = search('END', '', line("w$"))
{stopline} に 0 でない値が指定されたときは、暗默にファイルの末尾で循環しなくなる。
0 の値は、引數を省略したときと同じになる。
{timeout} が指定された場合、そのミリ秒が經過したところで檢索が停止する。つまり、{timeout} が 500 なら檢索は 500 ミリ秒で停止する。この値は負であつてはならない。0 の値は、引數を省略したときと同じになる。
{|+reltime| 機能つきでコンパイルされたときのみ有效}
フラグ ’p’ を指定すると、戾り値は \(\) によるグループ化のうち最初にマッチしたものの番號プラス 1 となる。パターン全體はマッチしたがどのグループもマッチしなかつたときは 1 を返す。桁番號を取得するには |searchpos()| を使ふ。
フラグ ’n’ が指定されてゐない場合、マッチ位置にカーソルが移動する。
例 (引數リストの全ファイルにわたつて檢索して置換する):
:let n = 1 :while n <= argc() " arglist中の全ファイルに對してループ : exe "argument " . n : " ファイルの最後の文字から開始し、循環してファイルの : " 最初から檢索する : normal G$ : let flags = "w" : while search("foo", flags) > 0 : s/foo/bar/g : let flags = "W" : endwhile : update " 修正されてゐればファイルを保存する : let n = n + 1 :endwhile
フラグの使ひ方の例:
:echo search('\<if\|\(else\)\|\(endif\)', 'ncpe')
このコマンドは、カーソル下の文字以降からキーワード "if", "else", "endif" のいづれかを檢索する。フラグ ’p’ により、どのキーワードが見つかつたかに應じて 1, 2, 3 を返す。見つからなかつたときは 0 を返す。次の行の最初の單語にカーソルをおいて上のコマンドを實行すると:
if (foo == 0) | let foo = foo + 1 | endif
1 が返る。フラグ ’c’ を外すと "endif" にマッチし 3 を返すやうになる。カーソルを "if" の "f" の上におき、フラグ ’e’ を外して實行しても同じく3が返る。フラグ ’n’ によりカーソルは移動しない。
|method| としても使用できます:
GetPattern()->search()
{name} の宣言を檢索する。
{global} が 0 でないときは |gD| と同じやうにファイル中の最初のマッチを探す。さうでないときは |gd| と同じ動作になり、現在の函數內から最初のマッチを探す。
{thisblock} が 0 でないときはカーソル位置より前の位置で閉ぢてゐる {} ブロックを無視し、そのスコープ內でだけ有效な變數宣言にマッチしないやうになる。
マッチを見つけるとその位置へカーソルを移動する。成功すると0を返し、失敗すると非0を返す。
例:
if searchdecl('myvar') == 0 echo getline('.') endif
|method| としても使用できます:
GetName()->searchdecl()
ネストした start・end のペアを檢索する。これを使ふと、"if" に對應する "endif" を見つけることができる。それらの閒にある他の if・endif のペアは無視される。
檢索はカーソル位置から開始する。デフォルトでは下方に檢索する。
{flags} に ’b’ が含まれてゐると上方に檢索する。マッチが見つかると、その位置へカーソルを移動し、行番號を返す。マッチが見つからなかつたときは 0 または -1 を返し、カーソルは移動しない。エラーメッセージは表示されない。
{start}、{middle}、{end} は正規表現である。|pattern| を參照。この正規表現に \( \) のペアを含めてはならない。\%( \) は含めてもよい。{middle} はネストした start・end ペアの中にないときのみマッチする。典型的な使用例:
searchpair('\<if\>', '\<else\>', '\<endif\>')
ここで {middle} を空にすると "else" をスキップするやうになる。
{flags} には |search()| と同樣に ’b’, ’c’, ’n’, ’s’, ’w’, ’W’ が使へる。それに加へて以下のフラグが利用できる。
’r’ | それ以上マッチが見つからなくなるまで繰り返す。つまり最も外側のペアを探す。’W’ も自動的にオンになる。 |
’m’ | マッチ位置の行番號でなくマッチの個數を返す。’r’ を使つてゐるときは > 1 となる。 |
Note:
ほとんど常に ’W’ を使つてファイルの末尾で循環しないやうにするのがよい考へである。
{start}、{middle}、{end} のマッチが見つかると、マッチの開始位置にカーソルを移動し、式 {skip} を評價する。このマッチがコメントや文字列の內側にある場合など、無視したいものであれば式 {skip} が非 0 を返すやうにする。
{skip} を省略した、または空のときはどのマッチも無視しない。
{skip} を評價してゐる最中にエラーが發生すると、檢索は異常終了し -1 を返す。
{skip} は文字列、ラムダ、函數參照、部分適用になることができる。
他のものでは函數が失敗する。
{stopline} と {timeout} については |search()| を參照。
’ignorecase’ の値が適用される。’magic’ の値は無視され、オンのときと同じ樣に動作する。
檢索はカーソル位置から開始する。檢索方向の次の文字における {start}、{middle}、{end} のマッチが最初に見つかる。例:
if 1 if 2 endif 2 endif 1
カーソルが "if 2" の "i" の上にある狀態から下方に檢索を開始すると "endif 2" にマッチする。"if 2" の直前の文字の上から檢索を開始すると "endif 1" にマッチする。これは、"if 2" が最初に見つかり、"if 2" から "endif 2" までがネストしたペアと見なされるためである。
上方檢索で、{end} が 2 文字以上であるときはパターンの最後に "\zs" をつけるとよいかもしれない。するとカーソルが end のマッチの內側にあるとき、對應する start を見つけるやうになる。
例: Vim script の "endif" コマンドを見つけるには:
:echo searchpair('\<if\>', '\<el\%[seif]\>', '\<en\%[dif]\>', 'W', \ 'getline(".") =~ "^\\s*\""')
これを使ふには、マッチを見つけたい "if" の上、またはそれ以降にカーソルを置くこと。
Note:
バックスラッシュを二重にしなくてもよいやうにシングルクォート文字列を使つてゐる。式 skip により、コメントだけの行を無視するやうにしてゐる。コマンドの後のコメントは無視してゐない。また、行の途中の "en" や "if" といふ單語にマッチしてしまふ。
もう 1 つの例: "}" に對應する "{" を檢索する:
:echo searchpair('{', '', '}', 'bW')
これを使ふには、マッチを見つけたい "}" の上、または前にカーソルを置くこと。構文ハイライトにより文字列と見なされるマッチを無視するには次のやうにする:
:echo searchpair('{', '', '}', 'bW', \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')
|searchpair()| と同樣だが、マッチの行番號と桁番號からなるリスト |List| を返す。このリスト |List| の最初の要素は行番號で、次の要素はマッチの桁位置のバイトインデックスである。マッチが見つからなかつた場合は [0, 0] を返す。
:let [lnum,col] = searchpairpos('{', '', '}', 'n')
より大規模で役に立つ例に關しては |match-parens| を參照。
|search()| と同樣だが、マッチの行番號と桁番號からなるリスト |List| を返す。このリスト |List| の最初の要素は行番號で、次の要素はマッチの桁位置のバイトインデックスである。マッチが見つからなかつた場合は [0, 0] を返す。 例:
:let [lnum, col] = searchpos('mypattern', 'n')
フラグ ’p’ を指定すると、戾り値にサブパターンのマッチ番號を示す要素が加はる |search()-sub-match|。例:
:let [lnum, col, submatch] = searchpos('\(\l\)\|\(\u\)', 'np')
この例において、"submatch" は小文字 |/\l| が見つかつたとき2となり、大文字 |/\u| が見つかつたとき 3 となる。
|method| としても使用できます:
GetPattern()->searchpos()
{clientid} に返信文字列を送る。最後に文字列を送つた {clientid} は expand("<client>") で取得できる。
{|+clientserver| 機能付きでコンパイルしたときのみ利用可能}
Note:
この ID は次のコマンドを受け取る前に取得しなければならない。つまり、受け取つたコマンドから戾る前で、入力を待つコマンドを呼ぶ前。|clientserver| も參照。例:
:echo server2client(expand("<client>"), "HELLO")
|method| としても使用できます:
GetClientId()->server2client(string)
利用可能なサーバー名のリストを返す。1 行に 1 つの形式。サーバーが 1 つもないとき、または情報を取得できないときは空文字列を返す。|clientserver| も參照。
{|+clientserver| 機能付きでコンパイルしたときのみ利用可能}
例:
:echo serverlist()
バッファ {expr} の行 {lnum} を {text} に設定します。これは特定のバッファに對し、|setline()| のやうに機能します。
この函數は、ロードされたバッファに對してのみ機能します。必要であれば、最初に |bufload()| を呼び出してください。
行を插入する場合には |appendbufline()| を使用します。{lnum} 內のテキストプロパティはすべて消去されます。
{text} は、1 行を設定する文字列、または複數行を設定する文字列のリストです。リストが最後の行の下にある場合、それらの行が追加されます。
{expr} の使ひ方については、上記の |bufname()| を參照してください。
{lnum} は |setline()| と同じやうに使はれます。{lnum} が最後の行のすぐ下にある場合、{text} は最後の行の下に追加されます。
{expr} が有效なバッファでないか、{lnum} が無效な場合は 1 が返される。成功すると 0 が返される。
|method| としても使用でき、ベースは第 3 引數として渡されます:
GetText()->setbufline(buf, lnum)
バッファ {expr} のオプションまたはローカル變數 {varname} に {val} を代入する。 グローバル・ウィンドウローカルオプションに對しても動作するが、グローバル・ウィンドウローカル變數に對しては動作しない。ウィンドウローカルオプションの場合、グローバルな値は變更されない。{expr} の解釋の仕方については |bufname()| を參照。
Note:
變數名には "b:" をつけてはならない。例:
:call setbufvar(1, "&mod", 1) :call setbufvar("todo", "myvar", "foobar")サンドボックス |sandbox| の中ではこの函數は使用できない。
|method| としても使用でき、ベースは第 3 引數として渡されます:
GetValue()->setbufvar(buf, varname)
現在の文字檢索の情報を {dict} に設定する。この辭書は下記のエントリを 1 以上持つ:
char | 續いて起こる |,| や |;| コマンドで使はれる文字。空文字列の場合、文字檢索を解除する。 |
forward | 文字檢索の方向。1 は前方、0 は後方。 |
until | 文字檢索の種類。1 は |t| もしくは |T| の文字檢索、0 は |f| もしくは |F| の文字檢索。 |
これはユーザーの文字檢索のセーブ/リストアを使ふことができる:
:let prevsearch = getcharsearch() :" ユーザーの檢索に影響を與へるコマンドを實行する。 :call setcharsearch(prevsearch)
|getcharsearch()| も參照。
|method| としても使用できます:
SavedSearch()->setcharsearch()
コマンドラインの {pos} バイトの位置へカーソルを移動する。{pos} は 1 から始まる。現在の位置を取得するには |getcmdpos()| を使ふ。
コマンドラインを編輯してゐる最中のみ機能する。よつて、|c_CTRL-\_e|, |c_CTRL-R_=|, |c_CTRL-R_CTRL-R| + ’=’ と組み合はせて使ふときだけ意味がある。
|c_CTRL-\_e| と |c_CTRL-R_CTRL-R| + ’=’ の場合、コマンドラインにその式をセットした後でカーソルを移動する。
|c_CTRL-R_=| の場合、式を評價した後、結果のテキストを插入する前にカーソルを移動する。
{pos} が大きすぎるときは行末にカーソルを移動する。{pos} が 1 より小さいときの結果は未定義である。成功なら 0、コマンドラインを編輯してゐるとき以外には 1 を返す。
|method| としても使用できます:
GetPos()->setcmdpos()
環境變數 {name} に {val} を設定する。
{val} が |v:null| の場合は、環境變數は削除される。
|expr-env| も參照。
|method| としても使用でき、ベースは第 2 引數として渡されます:
GetPath()->setenv('PATH')
{fname} のファイル許可屬性を {mode} に設定する。 {mode} は 9 文字の文字列でなければならない。形式は "rwxrwxrwx" であり、それぞれはファイルの所有者權限、グループ權限、その他のユーザーを表す "rwx" といふフラグのグループである。文字 "-" は許可屬性がオフであり、その他の文字はオンである。マルチバイト文字はサポートされない。
例へば "‘rw-r-----’" はそのユーザーの讀み書き、グループでは讀み取り專用、その他のユーザーはアクセス不可である。"‘xx-x-----’" は同じ意味となる。
成功するとゼロ以外を返し、失敗するとゼロを返す。
|method| としても使用できます:
GetFilename()->setfperm(mode)
許可屬性の讀み取りについては |getfperm()| を參照。
カレントバッファの {lnum} 行目を {text} にする。行を插入したい場合は |append()| を使ふ。他のバッファの行を設定するには |setbufline()| を使ふ。{lnum} 內のテキストプロパティはすべて消去される。
{lnum} は |getline()| のときと同じやうに解釋される。
{lnum} が最後の行の次の行の場合、最後の行の下に {text} を追加されます。
成功したら 0 を返す。失敗したら (大抵 {lnum} が無效な値のとき) 1 を返す。
例:
:call setline(5, strftime("%c"))
{text} がリスト |List| の場合、{lnum} 行目とそれ以降の行にリストの要素をセットする。例:
:call setline(5, ['aaa', 'bbb', 'ccc'])
上の例は次と同値である:
:for [n, l] in [[5, 'aaa'], [6, 'bbb'], [7, 'ccc']] : call setline(n, l) :endfor
Note:
マーク ’[ と ’] はセットされない。
|method| としても使用でき、ベースは第 2 引數として渡されます:
GetText()->setline(lnum)
ウィンドウ {nr} のロケーションリストを作成・置き換へ・追加する。{nr} にはウィンドウ番號または |window-ID| が使へる。{nr} が 0 のときはカレントウィンドウを對象にする。
ロケーションリストウィンドウの場合、そこに表示してゐるロケーションリストが修正される。ウィンドウ番號 {nr} が無效な場合、-1 を返す。それ以外は |setqflist()| と同じ。
|location-list| も參照。
オプショナル引數の辭書 {what} が提供される場合、{what} で指定されるアイテムのみが設定される。サポートされる {what} の一覽は |setqflist()| を參照。
|method| としても使用でき、ベースは第 2 引數として渡されます:
GetLoclist()->setloclist(winnr)
|getmatches()| で取得したマッチのリストを復元する。成功なら 0、失敗なら -1 を返す。リストを復元するに先立つて、現在のマッチはすべて消去される。|getmatches()| の例を參照。
{win} が指定されれば、カレントウィンドウではなく指定されたウィンドウあるいはウィンドウ ID を對象にする。
|method| としても使用できます:
GetMatches()->setmatches()
{expr} の位置を設定する。{expr} として有效な値は次の通り:
. | カーソル位置 |
’x | マーク x |
{list} は 4 個か 5 個の要素を持つリスト |List| である:
[bufnum, lnum, col, off]
[bufnum, lnum, col, off, curswant]
"bufnum" はバッファ番號。0 にするとカレントバッファを表す。大文字のマークを設定するとき、"bufnum" はマーク位置として用ゐられる。それ以外のマークの場合、"bufnum" はマークを設定するバッファを指定する。函數 |bufnr()| を使つてファイル名をバッファ番號に變換することができる。
カーソルと ’ マークを設定する場合、バッファ番號は無視される。なぜならそれらはバッファではなくウィンドウに關聯付けられてゐるからである。ジャンプリストは變更されない。
"lnum" と "col" はバッファ內の位置。桁番號は1から始まる。"lnum" を 0 にするとそのマークを削除する。"col" が 1 より小さいときは 1 が使はれる。
數値 "off" は ’virtualedit’ がオンのときのみ使はれ、その文字の開始位置からの畫面上の桁のオフセットとなる。例へば、<Tab> の中、または最後の文字より後に設定したいときに使ふ。
"curswant" はカーソル位置を設定するときのみ使はれる。これは縱方向移動の優先的列番號である。"curswant" を指定しなかつた場合は優先値は設定されない。マークの位置を設定するときに "curswant" を指定した場合はその値は使用されない。
Note:
’< と ’> の行番號を變更した場合は ’< が ’> の手前にくるやうに位置が交換される。
位置をセットできたときは 0 を、さうでなければ -1 を返す。{expr} が無效なときはエラーメッセージが出る。
|getpos()| と |getcurpos()| も參照。
縱方向移動の優先的列番號は復元されない。しかしカーソル位置を設定するときにこの値を設定した場合は、|j| や |k| で移動すると以前の列にジャンプやうになるだらう。優先的列番號の設定については |cursor()| も參照。|winrestview()| の "curswant" キーも參照。
|method| としても使用できます:
GetPosition()->setpos('.')
{list} の要素により QuickFix リストを作成・置き換へ・追加する。
{what} が存在しないときは {list} の要素が使はれる。{list} の各要素は辭書であること。辭書でない {list} の要素は無視される。各辭書は以下の要素を持つ:
bufnr | バッファ番號。有效なバッファ番號でなければならない。 |
filename | ファイル名。"bufnr" がないとき、または無效であるときのみ使はれる。 |
module | モジュールの名前; もしも與へられてゐるなら、ファイル名の代はりに quickfix エラーウィンドウで使はれる |
lnum | ファイル中の行番號 |
pattern | エラーの位置を特定するための檢索パターン |
col | 桁番號 |
vcol | 0 でない場合: "col" は表示上の桁 0 の場合: "col" はバイトインデックス |
nr | エラー番號 |
text | エラーの說明 |
type | エラータイプを示す 1 文字。’E’, ’W’ など。 |
valid | 認識されたエラーメッセージ |
辭書の要素 "col", "vcol", "nr", "type", "text" は省略可能である。"lnum" か "pattern" のどちらか一方のみがエラー行を特定するために使はれる。"filename" と "bufnr" の兩方ともない場合、または "lnum" と "pattern" の兩方ともない場合、その要素はエラー行として扱はれない。 "pattern" と "lnum" の兩方があるときは "pattern" が使はれる。
"valid" なエントリが與へられてゐないと、"bufnr" が正しいバッファであるか "filename" が存在した時に、正しいフラグを設定する。
{list} に空のリストを指定すると QuickFix リストはクリアされる。
Note:
このリストは |getqflist()| が返すものと正確に同じではないことに注意。
{action} の値:
’a’ | {list} の要素を既存の quickfix リストに追加する。quickfix リストがまだ存在しない場合は新規に作成される。 |
’r’ | {list} の要素で現在の quickFix リストを置き換へる。これはリストをクリアするのにも使へる:
:call setqflist([], 'r') |
’f’ | quickfix スタックのすべての quickfix リストは解放される。 |
{action} が指定されないとき、または ’ ’ のときは新しい quickfix リストを作成する。新しい quickfix リストはスタックの現在の quickfix リストのうしろに追加され、すべての續くリストは解放される。quickfix リストをスタックの最後に 追加するためには、{what} の "nr" に "$" を設定する。
オプショナル引數の辭書 {what} が提供される場合、{what} で指定されるアイテムのみが設定される。最初の {list} は無視される。{what} では以下のアイテムを指定する事ができる:
context | quickfix リストのコンテキスト。|quickfix-context| を參照 |
efm | "lines" からテキストをパースする時に使はれる errorformat。もしも存在しなければ ’errorformat’ オプションの値が使はれる。|quickfix-index| を參照 |
id | quickfix リストの識別子 |quickfix-ID| |
idx | ’id’ または ’nr’ で指定された quickfix リスト內の現在のエントリのインデックス。’$’ に設定すると、リストの最後のエントリが現在のエントリとして設定される。|quickfix-index| を參照 |
items | quickfix エントリのリスト。{list} 引數と同じ |
lines | 行のリストをパースするために ’errorformat’ を使ふ。その結果は quickfix リスト {nr} もしくは {id} に追加する。リスト |List| の値だけがサポートされる。|quickfix-parse| を參照 |
nr | quickfix スタックでのリスト番號。ゼロは現在の quickfix リストを意味し、"$" は直前の quickfix リストを意味する |
title | quickfix リストのタイトルテキスト。|quickfix-title| を參照 |
{what} 內でのサポートされてゐないキーは無視される。"nr" 番目のアイテムが提供されてゐない場合は現在の quickfix リストが變更される。新しく quickfix リストを作成すると、"nr" は quickfix のスタックサイズよりも大きい値に設定される。quickfix リストが變更されると、リストは正しく變更されることが保證され、リストを特定するために "nr" の代はりに "id" が使はれる。
例 (|setqflist-examples| も參照):
:call setqflist([], 'r', {'title': 'My search'}) :call setqflist([], 'r', {'nr': 2, 'title': 'Errors'}) :call setqflist([], 'a', {'id':qfid, 'lines':["F1:10:L10"]})
成功なら 0、失敗なら -1 を返す。
この函數は ’errorformat’ の設定とは無關係に QuickFix リストを作るために使へる。その最初のエラーへジャンプするには ‘:cc 1
‘ などのコマンドを使ふ。
|method| としても使用でき、ベースは第 2 引數として渡されます:
GetErrorlist()->setqflist()
レジスタ {regname} に {value} をセットする。 {value} には |getreg()| の戾り値ならどんな値でも (リスト |List| でも) 指定できる。 {options} が "a" を含んでゐるとき、または {regname} が大文字のときは、その値に追加する。 {options} は以下のレジスタの種類指定を含んでもよい:
"c" または "v" | |characterwise| モード |
"l" または "V" | |linewise| モード |
"b" または "<CTRL-V>" | |blockwise-visual| モード |
"b" または "<CTRL-V>" の直後に數値を續けると、それが選擇範圍の幅となる。これを指定しない場合、選擇範圍の幅は一番長い行の文字數となる (<Tab> は 1 文字と數へられる)。
{options} にレジスタの設定が何も含まれてゐないときのデフォルト値は文字モードである。ただし、{value} が文字列で末尾が <NL> の場合や {value} がリストの場合は行モードになる。矩形モードは明示的に指定しない限り選擇されない。 成功なら 0、失敗なら非 0 を返す。
Note:
檢索レジスタや式レジスタを設定するときは複數の要素を含んだリスト (|List|) を指定することはできない。空のリストは空文字列と同樣に扱はれる。
例:
:call setreg(v:register, @*) :call setreg('*', @%, 'ac') :call setreg('a', "1\n2\n3", 'b5')
次の例は、この函數を使つてレジスタを退避・復元する例である:
:let var_a = getreg('a', 1, 1) :let var_amode = getregtype('a') .... :call setreg('a', var_a, var_amode)
Note:
|getreg()| の 3 番目の引數を使用せずにレジスタの內容を完全に復元することはできない。改行文字と Nul 文字がどちらも改行文字として表現されてしまふため。|NL-used-for-Nul| 參照。
空文字列を追加すると、レジスタの種類を變更することができる:
:call setreg('a', '', 'al')
|method| としても使用でき、ベースは第 2 引數として渡されます:
GetText()->setreg('a')
タブページ {tabnr} のタブローカル變數 {varname} を {val} に設定する。|t:var|
Note:
自動コマンドがブロックされ、副作用が發生しない可能性があることに注意。例へば、’filetype’ を設定する時。
Note:
指定する變數名は "t:" を除いた名前。
タブの番號は 1 から始まる。 この函數はサンドボックス |sandbox| の中では使へない。
|method| としても使用でき、ベースは第 3 引數として渡されます:
GetValue()->settabvar(tab, name)
ウィンドウ {winnr} のオプションやローカル變數 {varname} の値を {val} にセットする。
タブ番號は 1 から始まる。カレントタブページを對象とする場合は |setwinvar()| を使ふ。 {winnr} にはウィンドウ番號または |window-ID| が使へる。
{winnr} が 0 のときはカレントウィンドウが對象となる。
Note:
自動コマンドがブロックされ、副作用が發生しない可能性があることに注意。例へば、’filetype’ または ’syntax’ を設定する時。
グローバルオプションやバッファローカルオプションを設定することもできるが、グローバル變數やバッファローカル變數を設定することはできない。
バッファローカルオプションを設定した場合、グローバル値は變更されない。
Note:
變數名には "w:" をつけてはならない。
例:
:call settabwinvar(1, 1, "&list", 0) :call settabwinvar(3, 2, "myvar", "foobar")
この函數は |sandbox| の中では使用できない。
|method| としても使用でき、ベースは第 4 引數として渡されます:
GetValue()->settabvar(tab, winnr, name)
{dict} を使用してゐるウィンドウ {nr} のタグスタックを變更する。{nr} はウィンドウ番號か |window-ID| になる。
{dict} でサポートされてゐる項目のリストのために |gettagstack()| を參照する。 {action} もしも {action} が存在しないか ’r’ に設定されてゐる場合、タグスタックは置き換へられる。{action} が ’a’ に設定されてゐる場合、{dict} からの新しい項目はタグスタックの上に積まれる。
成功した場合は 0、失敗した場合は -1 を返す。
例: タグスタックの現在のインデックスを 4 に設定する:
call settagstack(1005, {'curidx' : 4})
ウィンドウ 3 のタグスタックを空にする:
call settagstack(3, {'items' : []})
新規項目をタグスタックの上に積む:
let pos = [bufnr('myfile.txt'), 10, 1, 0] let newtag = [{'tagname' : 'mytag', 'from' : pos}] call settagstack(2, {'items' : newtag}, 'a')
タグスタックを保存し復元する:
let stack = gettagstack(1003) " do something else call settagstack(1003, stack) unlet stack
|method| としても使用でき、ベースは第 2 引數として渡されます:
GetStack()->settagstack(winnr)
|settabwinvar()| と同樣。カレントタブページを對象とする。
例:
:call setwinvar(1, "&list", 0) :call setwinvar(2, "myvar", "foobar")
|method| としても使用でき、ベースは第 3 引數として渡されます:
GetValue()->setwinvar(winnr, name)
{string} の SHA256 チェックサムを 64 文字の 16 進文字列で返します。
|method| としても使用できます:
GetText()->sha256()
{|+cryptv| 機能つきでコンパイルされたときのみ有效}
シェルコマンドの引數として利用できるやうに {string} をエスケープします。MS-Windows では、’shellslash’ が設定されてゐない場合、{string} をダブルクォートで圍み、{string} の中のダブルクォートを全て二重にします。さうでなければ、{string} をシングルクォートで圍み、"’" を "’\”" で置き換へます。
{special} が指定され、0 でない數値または空でない文字列の場合 (|non-zero-arg|)、"!", "%", "#", "<cword>" などの特殊なアイテムの前にはバックスラッシュがつく。コマンド |:!| によつてそのバックスラッシュは再び除かれる。
’shell’ の値の末尾が "csh" である場合、{special} が |non-zero-arg| ならば "!" の文字もエスケープされる。これは、csh と tcsh は シングルクォートの中であつても "!" を履歷置換と解釋するためである。
{special} が |non-zero-arg| である <NL> 文字もエスケープされる。’shell’ の末尾が "csh" である場合、これは 2 回エスケープされる。
|:!| コマンドを使ふ場合の例:
:exe '!dir ' . shellescape(expand('<cfile>'), 1)
これはカーソル下のファイルを dir コマンドで表示する。|system()| を使ふ場合の例:
:call system("chmod +w -- " . shellescape(expand("%")))
|::S| も參照のこと。
|method| としても使用できます:
GetCommand()->shellescape()
實際に使用される ’shiftwidth’ の値を返す。’shiftwidth’ がゼロ以外の場合はその値が返る。ゼロの場合は ’tabstop’ の値が返る。この函數は 2012 年のパッチ 7.3.694 で導入されたので、現在では皆使へるやうになつてゐるに違ひない (しかしながらこれは 8.1.542 まで、オプションの {col} 引數のためには許されてゐない)。
引數に 1 つの {col} がある場合、これは ’shiftwidth’ の値を返すための桁番號として使はれる。これは ’vartabstop’ 機能のためのものである。{list} 引數のためには |cursor()| 函數を參照のこと。もしも ’vartabstop’ 設定が有效になつてゐて、引數 {col} が與へられてゐない場合は、1 桁目と假定する。
|method| としても使用できます:
GetColumn()->shiftwidth()
sign_ 函數群についてはここに文書化されてゐます: |sign-functions-details|
ファイル名を、意味を變へずにできるだけ簡略化する。MS-Windows でのショートカットや Unix でのシンボリックリンクは解決される。{filename} の最初のパスコンポーネントがカレントディレクトリを指す場合、結果にそのまま殘される。末尾のパス區切り文字も取り除かれない。
例:
simplify("./dir/.././/file/") == "./file/"
Note:
"dir/.." の組み合はせは、"dir" が檢索可能なディレクトリであるか、存在しないときのみ取り除かれる。Unix では、"dir" が同じディレクトリ內にあるシンボリックリンクであるときも取り除かれる。パス名を簡略化する前に全てのシンボリックリンクを解決させるには |resolve()| を使ふ。
{expr} の正弦 (サイン) をラジアンで |Float| で返す。{expr} は |Float| または |Number| に評價されなければならない。
例:
:echo sin(100) -0.506366 :echo sin(-4.01) 0.763301
|method| としても使用できます:
Compute()->sin()
{|+float| 機能つきでコンパイルされたときのみ有效}
{expr} の雙曲線正弦 (ハイパボリックサイン) を返す。値は [-inf, inf] の範圍の浮動小數點數 (|Float|)。
{expr} は浮動小數點數 (|Float|) か數値 (|Number|) でなければならない。
例:
:echo sinh(0.5) 0.521095 :echo sinh(-0.9) -1.026517
|method| としても使用できます:
Compute()->sinh()
{|+float| 機能を有效にしてコンパイルしたときのみ有效}
{list} の要素をその場で (in-place) ソートする。{list} を返す。
リストを變更したくない場合は、最初にコピーを作つておくこと:
:let sortedlist = sort(copy(mylist))
{func} が省略されたか空かゼロの場合は、各項目の文字列表現を使つてソートする。數値は文字列より後になり、リスト |Lists| は數値より後になる。カレントバッファのテキストをソートするには |:sort| を使ふ。
{func} が ’1’ か ’i’ なら大文字小文字は區別されない。
{func} が ’n’ ならすべての要素は數値順にソートされる (實裝詳細: 數値の讀み込みには strtod() 函數が使はれる。文字列、リスト、辭書、函數參照は 0 として扱はれる)。
{func} が ’N’ ならすべての要素は數値順にソートされる。これは ’n’ に似てゐるが、數値を含む文字列はその文字列が表す數値として扱はれる。
{func} が ’f’ ならすべての要素は數値順にソートされる。すべての値は數値か浮動小數點數でなければならない。
{func} に |Funcref| または函數名を指定すると、その函數を使つて要素を比較する。その函數は 2 つの要素を引數として受け取り、それらが等しいときは 0、1 番目の引數を 2 番目より後にするなら 1 以上、1 番目の方を前にするなら -1 以下を返す。
{dict} は "dict" 屬性付きの函數と一緖に使ふ。値はローカル變數 "self" として使はれる。|Dictionary-function|
ソートは安定である。(數値または文字列として) 等價な要素は元の順序關係が保持される。例へば數値としてソートした場合、文字列は元の順番通りに隣り合つて竝ぶ。
|method| としても使用できます:
mylist->sort()
|uniq()| も參照のこと。
例:
func MyCompare(i1, i2) return a:i1 == a:i2 ? 0 : a:i1 > a:i2 ? 1 : -1 endfunc let sortedlist = sort(mylist, "MyCompare")
この例の場合、より短く次のやうに書くことができる。ただしオーバーフローは無視される:
func MyCompare(i1, i2) return a:i1 - a:i2 endfunc
すべてのサウンドの再生を停止する。
{|+sound| 機能つきでコンパイルされたときのみ有效}
{name} で識別されるサウンドを再生する。サポートされてゐるイベント名はシステムによつて異なる。XDG のサウンド名がよく使はれる。Ubuntu では、それらは /usr/share/sounds/freedesktop/stereo に見つかるだらう。例:
call sound_playevent('bell')
MS-Windows では、{name} は SystemAsterisk, SystemDefault, SystemExclamation, SystemExit, SystemHand, SystemQuestion, SystemStart, SystemWelcome 等になる。
{callback} が指定されてゐる場合は、サウンドが終了したときに呼び出される。最初の引數はサウンド ID、2 番目の引數はステータスである:
0 | 最後までサウンドが再生された |
1 | サウンドは中斷された |
2 | サウンド開始後にエラーが發生した |
例:
func Callback(id, status) echomsg "sound " .. a:id .. " finished with " .. a:status endfunc call sound_playevent('bell', 'Callback')
MS-Windows: {callback} はこの函數では動作しない。
‘sound_stop()
‘ に渡すことができるサウンド ID を返す。サウンドを再生できなかつた場合はゼロを返す。
|method| としても使用できます:
GetSoundName()->sound_playevent()
{|+sound| 機能つきでコンパイルされたときのみ有效}
‘sound_playevent()
‘ と似てゐるが、サウンドファイル {name} を再生する。{name} はフルパスでなければならない。Ubuntu では、このコマンドで再生するファイルが見つかるかもしれない:
:!find /usr/share/sounds -type f | grep -v index.theme
|method| としても使用できます:
GetSoundPath()->sound_playfile()
{|+sound| 機能つきでコンパイルされたときのみ有效}
サウンド {id} の再生を停止する。{id} は、事前に ‘sound_playevent()
‘ または ‘sound_playfile()
‘ によつて返されたものでなければならない。
MS-Windows では、これは ‘sound_playevent()
‘ によつて開始されるイベントサウンドに對しては機能しない。イベントのサウンドを止めるには ‘sound_clear()
‘ を使用する。
|method| としても使用できます:
soundid->sound_stop()
{|+sound| 機能つきでコンパイルされたときのみ有效}
{word} の soundfold 値を返す。カレントウィンドウの ’spelllang’ で設定された言語のうち、soundfold に對應してゐる最初の言語が使用される。’spell’ がオンでなければならない。soundfold ができない場合は {word} がそのまま返される。
この函數はスペル修正候補の作成に使へる。
Note:
この方法はとても遲くなる可能性がある。
{譯注: phonetic algorithm の一種}
|method| としても使用できます:
GetWord()->soundfold()
引數なしの場合: カーソル下またはカーソル以降のスペルミスした單語を返す。その單語の先頭へカーソルを移動する。カレント行にスペルミスした單語が見つからない場合は空文字列を返し、カーソルは移動しない。
引數ありの場合: {sentence} の中のスペルミスしてゐる最初の單語を返す。スペルミスしてゐる單語がない場合は空文字列を返す。
戾り値は、次の 2 個の要素を持つリスト:
"bad" | スペルミス |
"rare" | 頻度の低い單語 |
"local" | 他の地域でのみ有效な單語 |
"caps" | 大文字で始めるべき單語 |
例:
echo spellbadword("the quik brown fox") ['quik', 'bad']
カレントウィンドウに對するスペリング情報が適用される。オプション ’spell’ がオンでなければならない。’spelllang’ の値が使用される。
|method| としても使用できます:
GetText()->spellbadword()
{word} の正しいスペルの候補のリスト |List| を返す。{max} を指定すると、候補の數の最大値となる。{max} を指定しないと、25 個までの候補を返す。
{capital} に 0 でない値を指定すると、先頭が大文字の候補だけを返す。これは ’spellcapcheck’ とのマッチの後に使ふ。
{word} はスペルの閒違つた單語で、後に他のテキストが續いてもよい。これにより、分割された 2 つの單語を連結することができる。候補もまた續きのテキストを含んでゐるので、これによつて行を置き換へることができる。
{word} は正しい單語でもよい。すると似た單語が返つてくるだらう。{word} 自身は候補に含まれないが、大文字化されたものが含まれてゐることはある。
カレントウィンドウのスペリング情報が使はれる。オプション ’spell’ がオンでなければならず、’spelllang’ と ’spellsuggest’ の値が適用される。
|method| としても使用できます:
GetWord()->spellsuggest()
{expr} を分割して |List| にする。{pattern} を省略した場合、または {pattern} が空文字列の場合は、{expr} を空白文字で區切つた各文字列が要素となる。 {pattern} を指定すると、{pattern} がマッチする位置で文字列を分割する。マッチした文字列は削除される。’ignorecase’ はここでは適用されないので大文字小文字を無視するには \c を使ふ。|/\c|
{keepempty} に非 0 を指定しない限り、最初または最後の要素が空文字列ならばリストから取り除かれる。それ以外の空文字列は、{pattern} が 1 文字以上にマッチすれば、または {keepempty} が非 0 ならばそのままリストの要素となる。
例:
:let words = split(getline('.'), '\W\+')
文字列を各文字に分割するには:
:for c in split(mystring, '\zs')
區切り文字を削除せず、そのままにしておきたい場合は、’\zs’ をパターンの最後で使ふ:
:echo split('abc:def:ghi', ':\zs') ['abc:', 'def:', 'ghi']
最初の要素が空であるかもしれないテーブルを分割するには:
:let items = split(line, ':', 1)
これの逆を行ふ函數は |join()| である。
|method| としても使用できます:
GetString()->split()
浮動小數點數 {expr} の非負平方根を |Float| で返す。{expr} は |Float| または |Number| に評價されなければならない。{expr} が負の場合、結果は NaN (Not a Number) になる。
例:
:echo sqrt(100) 10.0 :echo sqrt(-4.01) nan
"nan" はシステムのライブラリに依存するので、異なるかもしれない。
|method| としても使用できます:
Compute()->sqrt()
{|+float| 機能つきでコンパイルされたときのみ有效}
現在の狀態を示す文字を含む文字列を返します。常に安全であるとは限らないかもしれない作業を行ひたいコールバックで最も有用です。おほよそ次のやうに動作します:
はい: | その後すぐにそれを行ひます |
いいえ: | 作業キューへの追加と |SafeState| および/または |SafeStateAgain| 自動コマンドを追加します (|SafeState| はトップレベルでトリガー、|SafeStateAgain| はメッセージとコールバックの處理後にトリガー)。 |
state()
‘ で作業をすぐに實行できるかどうかを確認し、はいの場合はキューから削除して實行します。キューが空になつた場合、自動コマンドを削除します。
|mode()| も參照してください。
{what} を指定すると、この文字列の文字のみが追加されます。たとへば、これは畫面がスクロールしたかどうかを確認します:
if state('s') == '' " 畫面はスクロールしてゐない
これらの文字は狀態を示し、大槪は何かがビジーであることを示します:
m | マッピングの途中、:normal コマンド、feedkeys() または詰め込まれたコマンド |
o | オペレータ待機またはコマンド引數のための待機中。例へば |f| の後 |
a | 插入モード自動補完がアクティブ |
x | 自動コマンド實行中 |
w | 待機中にブロックされた。例へば json を讀む時の ch_evalexpr(), ch_read() および ch_readraw() |
S | SafeState または SafeStateAgain をトリガーしない |
c | タイマーを含むコールバック呼び出し (再歸呼び出しは "ccc" まで繰り返す) |
s | 畫面がメッセージでスクロールされた |
文字列 {expr} を浮動小數點數に變換する。これは式の中で浮動小數點數を使つてゐるときと同じやうに働く (|floating-point-format| を參照)。しかしこちらの方がゆるやかである。例へばこちらでは "1e40" も許されるが、式の中では "1.0e+40" と書かなければならない。16 進形式の "0x123" も許されるが、バイナリや 8 進數のやうなものは許されない。
數値の後ろにある文字列は默つて無視される。
小數點數はロケールの設定にかかはらず常に ’.’ である。コンマを發見すると、そこで數値は終はりになる。つまり "12,345.67" は 12.0 に變換される。3 桁ごとのコンマ區切りを取り除くには |substitute()| が使へる:
let f = str2float(substitute(text, ',', '', 'g'))
|method| としても使用できます:
let f = text->substitute(',', '', 'g')->str2float()
{|+float| 機能つきでコンパイルされたときのみ有效}
文字列 {expr} の各文字を表す數値を含むリストを返す。例:
str2list(" ") returns [32] str2list("ABC") returns [65, 66, 67]
|list2str()| は反對のことをする。
{utf8} が省略されてゐるかゼロの場合、現在の ’encoding’ が使用される。{utf8} が 1 の場合は、常に utf-8 文字列を返す。utf-8 の合成文字は正しく處理される:
str2list("á") returns [97, 769]
|method| としても使用できます:
GetString()->str2list()
文字列 {expr} を數値に變換する。{base} は變換の底。2, 8, 10, 16 のいづれか。{quoted} が與へられ 0 以外の場合、埋め込まれた單一引用符は無視されるため、"1’000’000" は100萬です。
{base} を省略すると 10 となる。そのため、文字列の先頭に 0 があるとき、デフォルトの文字列・數値變換とは異なり、8 進數とは解釋されない。例:
let nr = str2nr('0123')
{base} が 16 のとき、文字列の先頭の "0x" と "0X" は無視される。それ以外の底の場合は 0 となる。同樣に、{base} が 8 のとき、文字列の先頭の "0" は無視される。そして、{base} が 2 のとき、文字列の先頭の "0b" と "0B" は無視される。
數値の後のテキストは暗默に無視される。
|method| としても使用できます:
GetText()->str2nr()
|strpart()| と同樣だがバイトのインデックスおよび長さではなく文字のインデックスおよび長さを使用する。
文字インデックスが存在しない文字を指す場合、それは 1 文字であるとして扱はれる。例:
strcharpart('abc', -1, 2)
結果は "a" である。
|method| としても使用できます:
GetText()->strcharpart(5)
結果は數値で、文字列 {expr} の文字の數を返す。
{skipcc} を省略またはゼロを指定すると、合成文字は別々にカウントされる。
{skipcc} に 1 を指定すると、合成文字は無視される。
{譯注: 基底文字と結合文字をまとめて 1 としてカウントする}
|strlen()|, |strdisplaywidth()|, |strwidth()| も參照。
{skipcc} は 7.4.755 以降でのみ有效である。それ以前では、ラッパー函數を定義すればよい:
if has("patch-7.4.755") function s:strchars(str, skipcc) return strchars(a:str, a:skipcc) endfunction else function s:strchars(str, skipcc) if a:skipcc return strlen(substitute(a:str, ".", "x", "g")) else return strchars(a:str) endif endfunction endif
|method| としても使用できます:
GetText()->strchars()
結果は數値で、文字列 {expr} が {col} (最初の桁はゼロ) で始まる時のスクリーン上での表示セル幅を返す (first column is zero)。
{col} が省略されたときはゼロが使はれる。{col} には計算を開始するスクリーン上の列の位置を指定する。これはタブ文字の幅の計算に影響する。 計算にはカレントウィンドウのオプションが使用される。’tabstop’ や ’display’ のやうな表示を變更するやうなオプションが影響する。
{expr} に幅が曖昧 (Ambiguous) な東アジアの文字が含まれてゐるときは、文字幅は ’ambiwidth’ の設定に依存する。
|strlen()|, |strwidth()|, |strchars()| も參照。
|method| としても使用できます:
GetText()->strdisplaywidth()
結果は文字列で、{format} に從つて日附や時閒がフォーマットされたものになる。{time} が與へられた場合にはそれを使ふが、省略された場合には現在時刻を使用する。受け付け可能な文字列 {format} は使用するシステムに依存するので、ポータブルとは言へない! フォーマットについては C の函數 strftime() のマニュアルを參照。結果は最大 80 文字に制限される。|localtime()| と |getftime()| も參照。
ここで使はれる言語はコマンド |:language| で變更できる。 例:
:echo strftime("%c") Sun Apr 27 11:49:23 1997 :echo strftime("%Y %b %d %X") 1997 Apr 27 11:53:25 :echo strftime("%y%m%d %T") 970427 11:53:55 :echo strftime("%H:%M") 11:55 :echo strftime("%c", getftime("file.c")) file.cの更新時刻を表示
この函數はどのシステムでも利用できるとは限らない。利用できるかチェックするには次のやうにする:
:if exists("*strftime")
|method| としても使用できます:
GetFormat()->strftime()
{str} 內の {index} 番目の文字インデックスを得る。これは文字のインデックスでありバイトのインデックスではない。合成文字は分割された文字として考慮される。
|strcharpart()| と |strchars()| も參照。
|method| としても使用できます:
GetText()->strgetchar(5)
結果は數値で、{heystack} の中で文字列 {needle} が最初に現れる位置のバイトインデックスを表す。{start} を指定すると、インデックス {start} の位置から檢索を開始する。 2 番目のマッチを探すには次のやうにする:
:let colon1 = stridx(line, ":") :let colon2 = stridx(line, ":", colon1 + 1)
檢索は大文字・小文字を區別する。檢索パターンについては |match()| を使ふ。{haystack} の中に {needle} がないときは-1を返す。|strridx()| も參照。
例:
:echo stridx("An Example", "Example") 3 :echo stridx("Starting point", "Start") 0 :echo stridx("Starting point", "start") -1
stridx() は C の函數 strstr() と同じやうに動作する。{needle} が 1 文字のときは strchr() と同じやうに動作する。
|method| としても使用できます:
GetHaystack()->stridx(needle)
{expr} を文字列に變換して返す。{expr} が數値、浮動小數點數、文字列、Blob、それらの複合の場合は、この戾り値を |eval()| でパースして復元できる。
{expr} 型 | 結果 |
---|---|
文字列 | ’string’ (シングルクォートは二重化される) |
數値 | 123 |
浮動小數點數 | 123.123456 or 1.123456e8 |
Funcref | function(’name’) |
Blob | 0z00112233.44556677.8899 |
リスト | [item, item] |
辭書 | {key: value, key: value} |
リストや辭書に循環參照がある場合、それらは "[...]" や "{...}" に置き換へられる。その結果に對して eval() を使用すると失敗する。
|method| としても使用できます:
mylist->string()
|strtrans()|も參照してください。
結果は數値で、文字列 {expr} のバイト單位での長さ。引數が數値の場合は、まづ文字列に變換される。それ以外の型の場合はエラーとなる。マルチバイト文字の數を數へる場合は |strchars()| を使用する。
|len()|, |strdisplaywidth()|, |strwidth()| も參照。
|method| としても使用できます:
GetString()->strlen()
結果は文字列で、{src} の {start} 番目の文字から始まる、長さ {len} の部分文字列。バイト數ではなく文字數で數へるには |strcharpart()| を用ゐる。
存在しない文字を含むやうに範圍を指定しても、エラーにはならない。單に文字が省略されるだけである。{len} を省略すると、{start} から {src} の末尾までの部分文字列を返す。
strpart("abcdefg", 3, 2) == "de" strpart("abcdefg", -2, 4) == "ab" strpart("abcdefg", 5, 4) == "fg" strpart("abcdefg", 3) == "defg"
Note:
文字列の最初の文字を指定するためには、{start} は 0 でなければならない。カーソルのある位置から3文字を取得する例:strpart(getline("."), col(".") - 1, 3)
|method| としても使用できます:
GetText()->strpart(5)
結果は數値で、{haystack} の中で文字列 {needle} が最後に現れる位置のバイトインデックスとなる。 {start} を指定すると、そのインデックス以降でのマッチは無視される。前のマッチより前にあるものを見つけるには次のやうにする:
:let lastcomma = strridx(line, ",") :let comma2 = strridx(line, ",", lastcomma - 1)
檢索は大文字・小文字を區別する。檢索パターンについては |match()| を使ふ。
{haystack} の中に {needle} がないときは -1 を返す。{needle} が空文字列のときは {haystack} の長さを返す。|stridx()| も參照。例:
:echo strridx("an angry armadillo", "an") 3
{needle} が 1 文字の場合は C の函數 strrchr() と同じやうに動作する。
|method| としても使用できます:
GetHaystack()->strridx(needle)
結果は文字列で、{expr} 內の表示不可能な文字を |'isprint'| で指定される、表示可能な文字に變換したもの。ウィンドウに表示することができるやうになる。例:
echo strtrans(@a)
これはレジスタの中の改行を、改行として表示する代はりに "^@" と表示する。
|method| としても使用できます:
GetString()->strtrans()
結果は數値で、文字列 {expr} のスクリーン上での表示セル幅を返す。タブ文字の幅は 1 として數へられる (タブ文字の幅も考慮したい場合は |strdisplaywidth()| を使ふこと)。
{expr} に幅が曖昧 (Ambiguous) な東アジアの文字が含まれてゐるときは、文字幅は ’ambiwidth’ の設定に依存する。
|strlen()|, |strdisplaywidth()|, |strchars()| も參照。
|method| としても使用できます:
GetString()->strwidth()
|:substitute| コマンドや substitute() 函數の中の式でのみ使はれる。
マッチしたテキストの {nr} 番目の部分マッチを返す。{nr} が 0 のときはマッチしたテキスト全體を返す。
Note:
文字列中の NL 文字は複數行マッチにおける改行文字か、NUL 文字のどちらかである。
|sub-replace-expression| も參照。
{list} に非ゼロの値が指定されたときは submatch() は文字列のリストを返す。|getline()| に 2 つの引數を指定したときの戾り値と同じである。テキスト中の NL 文字は NUL 文字を表す。
|:substitute| で使はれたときのみ複數要素のリストを返す。|substitute()| では、實際の改行はそこにはないので、リストは常に 0 または 1 つの要素である。
substitute() が再歸的に使用された場合、現在の(最も深い)サブマッチのみが取得できる。
例:
:s/\d\+/\=submatch(0) + 1/ :echo substitute(text, '\d\+', '\=submatch(0) + 1', '')
この例は、行の中で最初の數値を檢索し、それに 1 を加へる。改行は改行文字として含まれる。
|method| としても使用できます:
GetNr()->submatch()
結果は文字列で、{expr} 內で最初に {pat} にマッチした部分を {sub} に置換へたコピーになる。
{flags} が "g" なら、{expr} 內の {pat} にマッチした部分をすべて置換する。さうしたくない場合は {flags} は "" にすべきである。
これはコマンド ":substitute
" (一切のフラグ無し) のやうに働く。しかしマッチングは常にオプション ’magic’ が設定され、オプション ’cpoptions’ は空にして實行される (スクリプトをポータブルにするため)。
’ignorecase’ は適用される。’ignorecase’ の設定にかかはらず大文字小文字を區別するかしないか固定するには |/\c| か |/\C| を使ふ。’smartcase’ は適用されない。{pat} がどう扱はれるかについては |string-match| を參照。
また、{sub} 內の "~" は前囘の {sub} に置換されない。
{sub} 內の幾つかのコードには |sub-replace-special| の特殊な意味があることに注意。例へば、何かの文字列をリテラルの "\n" に置換へるためには、"\\\\n" か ’\\n’ を使ふ必要がある。
{pat} が {expr} の何處にもマッチしなければ、{expr} が何の變更も受けずに返される。
例:
:let &path = substitute(&path, ",\\=[^,]*$", "", "")
これはオプション ’path’ の最後のコンポーネントを削除する。
:echo substitute("testing", ".*", "\\U\\0", "")
結果は "TESTING" となる。
{sub} が "\=" で開始してゐる場合は、その後ろの文字列は式として解釋される。|sub-replace-expression| 參照。例:
:echo substitute(s, '%\(\x\x\)', \ '\=nr2char("0x" . submatch(1))', 'g')
{sub} が函數リファレンスの場合、1 個のオプショナル引數と共にその函數が呼び出される。例:
:echo substitute(s, '%\(\x\x\)', SubNr, 'g')
オプショナル引數はマッチ文字列全體と9個のサブマッチが含まれる以下の |submatch()| が返す樣なリストである。例:
:echo substitute(s, '%\(\x\x\)', {m -> '0x' . m[1]}, 'g')
|method| としても使用できます:
GetString()->substitute(pat, sub, flags)
結果は辭書で、スワップファイル {fname} に關する情報を保持してゐる。フィールドには次のやうなものがある:
version | Vim のバージョン |
user | ユーザー名 |
host | ホスト名 |
fname | オリジナルのファイル名 |
pid | スワップファイルを生成した Vim プロセスの PID |
mtime | 秒單位の最終修正時刻 |
inode | オプション: ファイルの INODE 番號 |
dirty | もしも變更されてゐたなら 1、さうでなければ 0 |
Note:
"user" と "host" は 多くても 39 バイトまで切り詰められることに注意。
失敗する場合、根據に "エラー" 項目が追加される:
Cannot open file: | ファイルが見つからないかアクセスができない |
Cannot read file: | 最初のブロックを讀み込むことができない |
Not a swap file: | 正しいブロック ID が含まれてゐない |
Magic number mismatch: | 無效な最初のブロックの情報 |
|method| としても使用できます:
GetFilename()->swapinfo()
結果はバッファ {expr} のスワップファイルへのパス。{expr} の使ひ方は上記の |bufname()| を參照。もしもバッファ {expr} が現在のバッファなら、結果は |:swapname| (スワップファイルがあるのであれば) と同じ。もしもバッファ {expr} がスワップファイルを持たないのであれば、空文字が返される。
|method| としても使用できます:
GetBufname()->swapname()
結果は數値で、現在のウィンドウ內での位置 {lnum} と {col} の位置の構文 ID。
構文 ID は |synIDattr()| と |synIDtrans()| に渡すことで、テキストについての構文情報を取得するのに使用できる。
最左のカラムを指定するには {col} に 1 を、最初の行を指定するには {line} に 1 を指定する。’synmaxcol’ が適用され、長すぎる行では 0 が返つてくる。
Note:
插入モードでカーソル位置を最後の文字より後ろにした場合、synID() は 0 を返す。
{trans} が |TRUE| ならば、透過屬性のアイテムは省略され、實際に表示されてゐるアイテムが評價對象になる。これは實際に有效になつてゐるカラーを知りたい時に役に立つ。
{trans} が |FALSE| ならば、透過屬性のアイテムが返される。これはどの構文アイテムが有效になつてゐるかを知りたい時に役に立つ (例:カッコの中とか)。
警告:
この函數は非常に遲い。ファイルを順方向に走査する時にだけベストなスピードが得られる。
例 (カーソルの下の構文アイテムの名前を表示する):
:echo synIDattr(synID(line("."), col("."), 1), "name")
結果は文字列で、{synID} の屬性 {what} の內容を示す。これは構文アイテムの情報を取得するのに使用できる。 {mode} には取得したいモードの屬性に應じて、"gui" か "cterm" か "term" が指定できる。{mode} が省略されるか、無效な値が指定された場合、現在有效になつてゐるハイライトモードが使用される (GUI、cterm、term のどれか)。
ハイライトグループにリンクされた屬性を取得するには synIDtrans() を使用する。
{what} | 結果 |
---|---|
"name" | 構文アイテムの名前 |
"fg" | 前景色 (GUI: カラー名、cterm: 文字列としてのカラー番號、term: 空文字列) |
"bg" | 背景色("fg" 同樣) |
"font" | フォント名 (GUI でのみ利用可) |highlight-font| |
"sp" | 特殊な色 ("fg" 同樣) |highlight-guisp| |
"fg#" | "fg" 同樣だが、"#RRGGBB" のフォーマットで |
"bg#" | "bg" 同樣だが、"#RRGGBB" のフォーマットで |
"sp#" | "sp" 同樣だが、"#RRGGBB" のフォーマットで |
"bold" | 太字なら "1" |
"italic" | 斜體なら "1" |
"reverse" | 反轉なら "1" |
"inverse" | 反轉 (原文 inverse) なら "1" (reverse と等價) |
"standout" | 强調 (standout) なら "1" |
"underline" | 下線付きなら "1" |
"undercurl" | 波線付きなら "1" |
"strike" | 取り消し線なら "1" |
例 (カーソルの下の構文アイテムのカラーを表示する):
:echo synIDattr(synIDtrans(synID(line("."), col("."), 1)), "fg")
|method| としても使用できます:
:echo synID(line("."), col("."), 1)->synIDtrans()->synIDattr("fg")
結果は數値で、{synID} を構文 ID に變換したもの。キャラクタをハイライト表示してゐる構文グループの ID である。
":highlight link
" によつて與へられるハイライトのリンクはこれに從つてゐる。
|method| としても使用できます:
:echo synID(line("."), col("."), 1)->synIDtrans()->synIDattr("fg")
値は 3 つの項目を持つリスト。
呼び出し | 戾り値 |
---|---|
synconcealed(lnum, 1) | [0, ”, 0] |
synconcealed(lnum, 2) | [1, ’X’, 1] |
synconcealed(lnum, 3) | [1, ’X’, 1] |
synconcealed(lnum, 4) | [1, ’X’, 2] |
synconcealed(lnum, 5) | [1, ’X’, 2] |
synconcealed(lnum, 6) | [0, ”, 0] |
カレントウィンドウの {lnum}, {col} の位置の構文アイテムのスタックを |List| にして返す。このリストの要素は |synID()| が返すのと同じ種類の ID である。 リストの最初の要素が一番外側の領域で、續く要素がその中に內包されてゐる。アイテム全體がハイライトされてゐる、または最後の要素が transparent なアイテムである場合を除き、最後の要素が |synID()| が返すものである。
この函數は構文ファイルをデバッグするのに役に立つ。 例 (カーソル下の構文スタックを表示する):
for id in synstack(line("."), col(".")) echo synIDattr(id, "name") endfor
{lnum} と {col} が不正な場所を指してゐるときは戾り値なし。行の最後の文字の 1 つ後ろと空行の一番目の列は有效な位置である。
シェルコマンド {expr} の實行結果を文字列として得る。リストとして受け取るには |systemlist()| を參照。
{input} に文字列が指定された場合、その文字列はファイルに書き出され、コマンドの標準入力として渡される。この文字列はそのまま (as-is) 書き出されるので、正しい改行文字を使ふよう自分自身で氣をつけなければならない。
{input} にリスト |List| が指定された場合は、|writefile()| の {binary} に "b" を指定したのと同樣にファイルに書き出される (つまり、リストの各要素は改行文字で連結され、要素內の改行文字は NUL 文字に變換される)。
{input} が指定され、それが數値で既存のバッファとして有效な id であるならば、そのバッファの內容が 1 行ずつファイルに書き出される。それぞれの行は NL で終端され、テキスト中の NL は NUL 文字に置き換へられる。
パイプは使用されず、’shelltemp’ オプションは使用されない。
|:silent| が前置されたときは、端末は cooked モードには設定されない。これはユーザー入力を必要としないコマンドを使用することを意味する。これは畫面に不要な文字が表示されるのを防ぐ (|CTRL-L| でそれをクリアする必要がなくなる)。
:silent let f = system('ls *.vim')
Note:
コマンドの引數をエスケープするには、|shellescape()|, |expand()| の |::S| または |fnamemodify()| を使用する。{expr} 內に改行文字があるとコマンドは失敗するだらう。’shellquote’ や ’shellxquote’ 內にある文字も問題を起こすかもしれない。對話的なコマンドを使用することはできない。
戾り値は文字列。例:
:let files = system("ls " . shellescape(expand('%:h'))) :let files = system('ls ' . expand('%:h:S'))
システムに依存しないやうな戾り値にするために、シェルの出力をフィルタリングし、マッキントッシュにおいては <CR> を <NL> に變換し、DOS 系のシステムにおいては <CR><NL> を <NL> に變換してゐる。
文字列が NUL 文字で切れるのを防ぐため、すべての NUL 文字は SOH (0x01) に置換される。
實行されるコマンドはいくつかのオプションを適用して構成される:
’shell’ ’shellcmdflag’ ’shellxquote’ {expr} ’shellredir’ {tmp} ’shellxquote’
({tmp} は自動的に生成されるファイル名)
Unix と OS/2 ではコマンドの連結ができるやうに {expr} の兩側に波括弧が置かれる。
コマンドは「cooked」モードで實行される。そのため CTRL-C でコマンドを中斷できる (少なくとも Unix では)。
エラーコードは |v:shell_error| に格納される。
この函數は |restricted-mode| では失敗する。
Note:
上記のオプションに不正な値が入つてゐると、この函數の呼び出しが失敗する可能性がある。セキュリティエージェントアプリケーションを使つてゐると失敗することがあるとも報告されてゐる。"
:!cmd
" とは違ひ、ファイルが變更されてゐるかのチェックは行はない。明示的にチェックさせるには |:checktime| を使ふ。
|method| としても使用できます:
:echo GetCmd()->system()
|system()| と同じだが行のリスト |List| を返す。行は NL 文字で區切られ、NUL 文字は NL 文字に變換される。出力は |readfile()| の {binary} 引數に "b" を指定したのと同樣である。ただし、結果が NL で終はる場合、餘分な空の項目はない。
Note:
MS-Windows では末尾の CR 文字がつくかもしれないことに注意。
"echo hello" と "echo -n hello" の違ひを確認するには、|system()| および |split()| を使用します:
echo system('echo hello')->split('\n', 1)
エラー時には空文字列が返ります。
|method| としても使用できます:
:echo GetCmd()->systemlist()
カレントタブページ內の各ウィンドウに表示されてゐるバッファの番號を要素とするリスト |List| を返す。
{arg} は對象とするタブページの番號を指定する。省略したときはカレントタブページを對象とする。
{arg} が無效なときは數値 0 を返す。
全タブページ中の全バッファのリストを得るには次のやうにする:
let buflist = [] for i in range(tabpagenr('$')) call extend(buflist, tabpagebuflist(i + 1)) endfor
Note:
1 つのバッファが複數のウィンドウに表示されてゐる場合があることに注意。
|method| としても使用できます:
GetTabpage()->tabpagebuflist()
結果は數値で、カレントタブページの番號。最初のタブページの番號は 1 となる。
省略可能な引數 {arg} に指定できる値は "$" のみであり、最後のタブページの番號 (つまりタブページの個數) を返す。
この番號はコマンド |:tab| で指定できるものと同じである。
|winnr()| と同樣だが、タブページ {tabarg} を對象とする。
{tabarg} は對象とするタブページの番號を指定する。
{arg} は |winnr()| の場合と同じやうに扱はれる。すなはち:
役に立つ例:
tabpagewinnr(1) " タブページ 1 のカレントウィンドウ tabpagewinnr(4, '$') " タブページ 4 內のウィンドウの個數
{tabarg} が無效なときは 0 を返す。
|method| としても使用できます:
GetTabpage()->tabpagewinnr()
カレントバッファにおいて、タグを檢索するときに使ふファイルの名前からなるリスト |List| を返す。オプション ’tags’ を展開したものである。
正規表現 {expr} にマッチするタグのリストを返す。
もし {filename} が省略されると、|:tselect| がするのと同じ方法の結果が優先される。|tag-priority| を參照。{filename} はファイルへのフルパスである必要がある。
そのリストの各要素は辭書であり、少なくとも次の要素を持つ:
name | タグの名前。 |
---|---|
filename | タグの定義があるファイルの名前。カレントディレクトリからの相對パス、またはフルパスである。 |
cmd | そのファイルの中でタグの位置を特定するために使ふ ex コマンド。 |
kind | タグの種類。種類は言語に依存する。この要素は、Exuberant ctags か hdrtag によつて生成されたタグファイルを使つてゐるときのみ使用できる。 |
static | ファイル固有のタグ。より詳しくは |static-tag| を參照。 |
タグファイルの內容によつてはこれ以上の要素が存在することもある。例: アクセス、實裝、繼承、シグネチャ。これらのフィールドについての情報は ctags のドキュメントを參照。C のソースにおいては、フィールド "struct"、"class"、"enum" が現れることがある。これらは、タグを含んでゐるものの名前を示す。
ex コマンド "cmd" は檢索パターンか、行番號か、行番號とバイト番號のいづれかである。
マッチするタグがない場合は空リストを返す。
完全一致するタグを取得するには、{expr} にアンカー ’^’ と ’$’ をつけること。これは函數の動作を速くすることにもなる。タグ檢索の正規表現についてより詳しいことは |tag-regexp| を參照。
Vim が使用するタグファイルについては |'tags'| を參照。樣々な ctags によつて生成されるタグファイルのフォーマットについては |tags-file-format| を參照。
|method| としても使用できます:
GetTagpattern()->taglist()
{expr} の正接 (タンジェント) をラジアンで返す。値は [-inf, inf] の範圍の浮動小數點數 (|Float|)。
{expr} は浮動小數點數 (|Float|) か數値 (|Number|) でなければならない。
例:
:echo tan(10) 0.648361 :echo tan(-4.01) -1.181502
|method| としても使用できます:
Compute()->tan()
{|+float| 機能を有效にしてコンパイルしたときのみ有效}
{expr} の雙曲線正接 (ハイパボリックタンジェント) を返す。値は [-1, 1] の範圍の浮動小數點數 (|Float|)。
{expr} は浮動小數點數 (|Float|) か數値 (|Number|) でなければならない。
例:
:echo tanh(0.5) 0.462117 :echo tanh(-1) -0.761594
|method| としても使用できます:
Compute()->tanh()
{|+float| 機能を有效にしてコンパイルしたときのみ有效}
term_ 函數群についてはここに文書化されてゐます: |terminal-function-details|
test_ 函數群についてはここに文書化されてゐます: |test-functions-details|
結果は文字列で、存在しないファイルのファイル名を示す。これはテンポラリファイルの名前として使用可能である。少なくとも連續 26 回の呼出しまでは違ふ名前を生成することが保證される。例:
:let tmpfile = tempname() :exe "redir > " . tmpfile
Unix では、ファイルはプライベートなディレクトリに置かれる。|tempfile|
MS-Windows では、’shellslash’ がオンのときか ’shellcmdflag’ が ’-’ で始まるときはスラッシュが使はれる。
タイマーに關する情報のリストを返す。
{id} が指定された場合はそのタイマーに關する情報だけが返される。タイマー {id} が存在しない場合は空のリストが返される。
{id} が省略された場合は全てのタイマーに關する情報が返される。
各タイマーの情報は以下の項目を含んだ辭書で格納される:
"id" | タイマーのID |
---|---|
"time" | タイマーが開始してからの時閒 |
"remaining" | タイマーが發火するまでの時閒 |
"repeat" | 何囘タイマーを發火させるかの回數; -1 は無限を意味する |
"callback" | コールバック |
"paused" | タイマーが一時停止中なら 1、それ以外は 0 |
|method| としても使用できます:
GetTimer()->timer_info()
{|+timers| 機能を有效にしてコンパイルしたときのみ有效}
タイマーを一時停止もしくは再開する。一時停止したタイマーは時閒が經過してもコールバックを呼び出さない。タイマーの再開は十分に時閒が經過してゐるなら、すぐさまコールバックが呼び出されるかもしれない。
タイマーの停止は少しの閒、コールバックが呼び出されるのを避けるのに便利である。
{paused} が 0 以外の數値、もしくは空でない文字列で評價される場合にタイマーが停止し、それ以外は再開する。|non-zero-arg| を參照。
|method| としても使用できます:
GetTimer()->timer_pause(1)
{|+timers| 機能を有效にしてコンパイルしたときのみ有效}
タイマーを作成しその ID を返す。
{time} はミリ秒での待機時閒。これはコールバックが呼び出されるまでの最短の時閒である。システムがビジーもしくは Vim が入力待ちでない場合、これは長くなる。
{callback} は呼び出す函數。函數の名前もしくは |Funcref| であつても良い。引數にはタイマー ID の引數が 1 つだけ渡されて呼び出される。コールバックは Vim が入力待ちの場合だけ呼び出される。
{options} は辭書。以下がサポートされてゐる:
"repeat" | コールバックを呼び出す繰り返し回數。-1 は無限を意味する。指定されない場合はコールバックは一度だけ呼び出される。
タイマーが一行で 3 度エラーになつたら、繰り返しは取り消される。すべてはエラーメッセージなので、Vim が制禦不能になるのを防ぐ。 |
例:
func MyHandler(timer) echo 'Handler called' endfunc let timer = timer_start(500, 'MyHandler', \ {'repeat': 3})
これは MyHandler() を 500ms 閒隔で 3 回呼び出す。
|method| としても使用できます:
GetMsec()->timer_start(callback)
サンドボックス|sandbox|の中では利用できない。
{|+timers| 機能を有效にしてコンパイルしたときのみ有效}
タイマーを停止する。タイマーのコールバックは以降呼び出されない。{timer} は timer_start() が返した ID である。よつて數値でなければならない。{timer} が存在しなかつた場合でもエラーは發生しない。
|method| としても使用できます:
GetTimer()->timer_stop()
{|+timers| 機能を有效にしてコンパイルしたときのみ有效}
全てのタイマーを停止する。タイマーのコールバックは以降呼び出されない。タイマーが不作法に振る舞ふ場合に便利である。タイマーが存在しなかつた場合でもエラーは發生しない。
{|+timers| 機能を有效にしてコンパイルしたときのみ有效}
引數の文字列の大文字を小文字に變換してできた文字列を返す (文字列に |gu| を適用するのとちやうど同じ)。
|method| としても使用できます:
GetText()->tolower()
引數の文字列の小文字を大文字に變換してできた文字列を返す (文字列に |gU| を適用するのとちやうど同じ)。
|method| としても使用できます:
GetText()->toupper()
文字列 {src} の中で、{fromstr} に含まれる全ての文字を {tostr} の對應する文字で置き換へた文字列を返す。つまり、{fromstr} の最初の文字が {tostr} の最初の文字に置き換へられる。2 文字目以降も同樣。Unix のコマンド "tr" とちやうど同じである。マルチバイト文字も正しく扱へる。
例:
echo tr("hello there", "ht", "HT")
戾り値は "Hello THere" となる。
echo tr("<blob>", "<>", "{}")
戾り値は "{blob}" となる。
|method| としても使用できます:
GetText()->tr(from, to)
{text} の始めと終はりから、{mask} 內にあるどのやうな文字も削除された文字列として {text} を返す。
もしも {mask} が與へられてゐなければ、{mask} は 0x20 までのすべての文字となる。これは Tab, space, NL や CR を含み、加へて ノーブレークスペースの 0xa0 も含む。
このコードはマルチバイト文字を適切に扱ふ。
例:
echo trim(" some text ")
"some text" を返す。
echo trim(" \r\t\t\r RESERVE \t\n\x0B\xA0") . "_TAIL"
"RESERVE_TAIL" を返す。
echo trim("rm<Xrm<>X>rrm", "rm<>")
"Xrm<>X" (中閒の文字は削除されない) を返す。
|method| としても使用できます:
GetText()->trim()
{expr} をゼロ方向に切りつめた整數を |Float| で返す。
{expr} は |Float| または |Number| に評價されなければならない。
例:
echo trunc(1.456) 1.0 echo trunc(-5.456) -5.0 echo trunc(4.0) 4.0
|method| としても使用できます:
Compute()->trunc()
{|+float| 機能つきでコンパイルされたときのみ有效}
{expr} の型を示す數値を返す。マジックナンバーを使はずに、v:t_ 變數を使ふ方が良い。それぞれの値は以下の通り:
數値: | 0 |v:t_number| |
文字列: | 1 |v:t_string| |
Funcref: | 2 |v:t_func| |
リスト: | 3 |v:t_list| |
辭書: | 4 |v:t_dict| |
浮動小數點數: | 5 |v:t_float| |
眞僞値: | 6 |v:t_bool| (v:false と v:true) |
特殊値: | 7 |v:t_none| (v:null と v:none) |
ジョブ: | 8 |v:t_job| |
チャネル: | 9 |v:t_channel| |
Blob: | 10 |v:t_blob| |
後方互換性のためには、次のやうな使ひ方ができる:
:if type(myvar) == type(0) :if type(myvar) == type("") :if type(myvar) == type(function("tr")) :if type(myvar) == type([]) :if type(myvar) == type({}) :if type(myvar) == type(0.0) :if type(myvar) == type(v:false) :if type(myvar) == type(v:none)
v:t_ 變數が存在するかを判定するにはこれを使ふ:
:if exists('v:t_number')
|method| としても使用できます:
mylist->type()
{name} といふ名前のファイルの保存時に使用されるアンドゥファイルの名前を返す。’undodir’ オプションが使用され、存在するディレクトリが檢索される。アンドゥファイルが存在するかどうかはチェックされない。
{name} は常に絕對パスに展開される (內部では絕對パスを使つてゐるため)。
{name} が空の場合 undofile() は空文字列を返す。ファイル名のないバッファはアンドゥファイルを書かないからである。|:wundo| や |:rundo| と組み合はせて使ふと便利だらう。
|+persistent_undo| オプションを無效にしてコンパイルされた場合はこの函數は常に空文字列を返す。
|method| としても使用できます:
GetFilename()->undofile()
アンドゥツリーの現在の狀態を辭書で返す。辭書の內容は次のとほり:
"seq_last" | 使用されたアンドゥシーケンス番號の最大値。 |
"seq_cur" | アンドゥツリーの現在のシーケンス番號。いくつかの變更がアンドゥされた狀態だと "seq_last" と違ふ値になる。 |
"time_cur" | 最後に |:earlier| 系のコマンドが使はれた時閒。讀みやすい形式に變換するには |strftime()| を使ふ。 |
"save_last" | 最後にファイルが保存された番號。保存がまだならゼロになる。 |
"save_cur" | アンドゥツリー內の現在位置の番號。 |
"synced" | 最後のアンドゥブロックが同期されてゐれば非ゼロ。これはユーザーからの入力を待機してゐるときに起こる。|undo-blocks| 參照。 |
"entries" | アンドゥブロックの情報を表す辭書のリスト。 |
"entries" リストの 1 番目にはもつとも古いアンドゥアイテムが入つてゐる。リストの各アイテムは次のやうな情報を持つた辭書である:
"seq" | アンドゥシーケンス番號。|:undolist| で表示されるものと同じ。 |
"time" | 變更が起こつた時閒。讀みやすい形式に變換するには |strftime()| を使ふ。 |
"newhead" | この項目は最後に追加されたアイテムにのみある。これは最後の變更を示し、次の變更を追加する場所を示す。 |
"curhead" | この項目は最後にアンドゥされたアイテムにのみある。これはアンドゥツリーの現在位置を示し、次にリドゥコマンドによつて使はれるブロックを示す。最後に變更を加へてからアンドゥを一度も實行してゐないときはこの項目はどこにも現れない。 |
"save" | この項目はファイルが保存される前の最後のブロックにのみある。番號は保存回數を示す。最初の保存は 1 で、最後のものは "save_last" と同じ。 |
"alt" | 切り替へエントリ。同じアンドゥブロックのリストが入れ子にされてゐる。それぞれのアイテムはさらに "alt" アイテムを持つてゐることがある。 |
{list} 內の隣接する同じ値の要素の 2 個目以降をその場で (in-place) 削除する。{list} を返す。リストを變更したくない場合は事前にコピーする:
:let newlist = uniq(copy(mylist))
デフォルトの比較函數は各要素の文字列表現を使ふ。{func} と {dict} については |sort()| 參照。
|method| としても使用できます:
mylist->uniq()
{dict} の全ての値からなるリスト |List| を返す。このリストの順序は不定である。|items()| と |keys()| も參照。
|method| としても使用できます:
mydict->values()
結果は數値で、{expr} で與へられるファイルの位置の、スクリーン上での桁の位置を示す。返る値は、指定された位置にある文字の末尾が、スクリーン座標 (の桁) でどこに存在するかである。<Tab> (タブ文字) が指定した位置にあつた場合には、戾り値はそのタブの最後のカラム (桁) 位置になる。具體的に、’ts’ が 8 に設定された狀態で第 1 桁に <Tab> があつた場合、戾り値は 8 になる。|conceal| は無視される。
バイト位置については |col()| を使ふ。
{expr}の解釋の仕方については |col()| を參照。
’virtualedit’ がオンのときは [lnum, col, off] といふリストを指定することもできる。"off" は文字の開始位置からのスクリーン座標でのオフセットである。例へば、<Tab>の中の位置や、行の最後の文字以降の位置を示すために使ふ。"off" が省略された場合はゼロが使はれる。
現在のモードに對して假想編輯がオンのときは、行末を越えた位置が返つてくることもある。|'virtualedit'| 可能な位置指定:
. | カーソルの位置 |
$ | カーソル行の末尾 (カーソル行に表示されてゐる文字數 +1 となる) |
’x | マーク x の位置 (マークが設定されてゐない場合、0 が返る) |
v | ビジュアルモードでは: ビジュアル選擇領域の開始行 (カーソルがその端)。ビジュアルモード以外ではカーソル位置を返す。すぐに更新される點が |'<| と違ふ。 |
Note:
現在のファイルに對して設定されてゐるマークだけが使用可能なことに注意。例:
virtcol(".") "foo^Lbar" の "^L" の位置にカーソル、戾り値 5 virtcol("$") "foo^Lbar" に對し、戾り値 9 virtcol("'t") " there" の 'h' に 't を設定、戾り値 6最初の桁は 1 となる。エラーの場合は 0 が返る。より高度な例 (全ての行の長さの最大値を返す):
echo max(map(range(1, line('$')), "virtcol([v:val, '$'])"))
|method| としても使用できます:
GetPos()->virtcol()
結果は文字列で、カレントバッファ內で最後に使はれたビジュアルモードを敎へてくれる。初期狀態では單に空文字列を返すだけだが、一度でもビジュアルモードが使はれた場合、その種類によつて "v"か "V" か "<CTRL-V>" (CTRL-V の文字が 1 文字で) 返される。これはそれぞれ文字選擇、行選擇、矩形選擇を意味してゐる。
例:
exe "normal " . visualmode()
これは最後に使はれたのと同じビジュアルモードに入る。また、スクリプトの動作を、最後に使はれたビジュアルモードに應じて變更したい場合にも便利だらう。 ビジュアルモードにゐるときは |mode()| を使つてビジュアルモードの種類を取得できます (|:vmap| などの中などで)。{expr} に 0 以外の數値か空文字列以外の文字列を指定した場合は、ビジュアルモードがクリアされ、以前の値を返します。|non-zero-arg| を參照してください。
wildmenu が有效な場合は |TRUE| を返し、さうでなければ |FALSE| を返す。’wildmenu’ と ’wildmode’ を參照。
マッピングの中で ’wildcharm’ オプションを有效に扱ふために使用できる。(|mapmode-c| マッピングの場合のみ意味をなす。)
例へば、wildmode で <c-j> が <down> と同じやうに動作するやうにするには:
:cnoremap <expr> <C-j> wildmenumode() ? "\<Down>\<Tab>" : "\<c-j>"
(
Note:
’wildcharm’ オプションが適切に設定されてゐる必要がある。
)
‘execute()
‘ と似てゐるが、ウィンドウ {id} のコンテキスト內で實行する。自動コマンドを發生させずに、ウィンドウを一時的にカレントウィンドウにする。{command} を實行すると、自動コマンドがトリガーされる。これは豫期しない副作用を引き起こす可能性がある。必要であれば |:noautocmd| を使用すること。
例:
call win_execute(winid, 'set syntax=python')
‘setwinvar()
‘ で同じことをしても自動コマンドはトリガーされず、實際には構文ハイライトは表示されない。
すべてのコマンドがポップアップウィンドウで許可されてゐるわけではありません。ウィンドウ {id} が存在しない場合、エラーは發生しません。
|method| としても使用でき、ベースは第 2 引數として渡されます:
GetCommand()->win_execute(winid)
バッファ {bufnr} が含まれてゐるウィンドウについて |window-ID| のリストを返す。存在しない場合は空のリストになる。
|method| としても使用できます:
GetBufnr()->win_findbuf()
特定のウィンドウに關する |window-ID| を得る。{win} が未指定の時は現在のウィンドウとなる。この {win} はウィンドウ番號である。トップウィンドウは番號 1 を持つ。
{tab} が未指定の場合現在のタブが使用され、{tab} が番號で指定された場合はそのタブとなる。最初のタブ番號は 1 である。ウィンドウが見附からない場合には 0 を返す。
|method| としても使用できます:
GetWinnr()->win_getid()
{expr} の ID で示されるウィンドウへ移動する。これは現在のタブページも移動する。
成功した場合は 1 を、ウィンドウが見附からない場合は 0 を返す。
|method| としても使用できます:
GetWinid()->win_gotoid()
{expr} の ID で示されるタブ番號とウィンドウ番號のリストを返す: [tabnr, winnr]
ウィンドウが見附からなかつた場合は [0, 0] を返す。
|method| としても使用できます:
GetWinid()->win_id2tabwin()
{expr} の ID で示されるウィンドウのウィンドウ番號を返す。現在のタブページ內でそのウィンドウが見附からなかつた場合は 0 を返す。
|method| としても使用できます:
GetWinid()->win_id2win()
2 つの數値を持つリストとしてウィンドウ {nr} のスクリーン位置を返す: [row, col]。最初のウィンドウの位置は常に [1, 1]。タブ行が無いのであれば [2, 1]。
{nr} はウィンドウ番號もしくは |window-ID| になる。
現在のタブページでウィンドウが見つからなければ [0, 0] を返す。
|method| としても使用できます:
GetWinid()->win_screenpos()
ウィンドウ {nr} をウィンドウ {target} の新しい分割に移動します。これは {target} に移動し、|:split| を使用して新しいウィンドウを作成しますが、ウィンドウ {nr} と同じ內容を使用してから、{nr} を閉ぢることに似てゐます。
{nr} と {target} の兩方とも、ウィンドウ番號または |window-ID| です。
成功時は 0、失敗時は非0 を返します。
{options} は、次のオプションエントリを持つ辭書です:
"vertical" | TRUE の場合、|:vsplit| と同樣に分割が垂直に作成されます。 |
"rightbelow" | TRUE の場合、分割は下または右 (垂直の場合) に行はれます。FALSE の場合、上または左 (垂直の場合) に行はれます。未指定の場合、’splitbelow’ および ’splitright’ の値が使用されます。 |
|method| としても使用できます:
GetWinid()->win_splitmove(target)
結果は數値で、{nr} 番目のウィンドウに關聯付けられてゐるバッファの番號。{nr} にはウィンドウ番號または |window-ID| が使へる。
{nr} が 0 の場合、現在のウィンドウに關聯付けられてゐるバッファの番號が返る。
{nr} で存在しないウィンドウを指定した場合には -1 が返る。
例:
:echo "The file in the current window is " . bufname(winbufnr(0))
|method| としても使用できます:
FindWindow()->winbufnr()->bufname()
結果は數値で、ウィンドウの中でカーソルがある位置の假想桁番號を表す。これはウィンドウの左側から數へたスクリーン上の桁である。一番左の桁は 1 となる。
結果は數値で、{nr} で示されるウィンドウの高さ (行數) を示す。{nr} にはウィンドウ番號または |window-ID| が使へる。{nr} が 0 ならば、現在のウィンドウの高さが返る。{nr} といふウィンドウが存在しない場合、-1 が返る。存在してゐるウィンドウは、絕對に 0 かそれ以上の高さを持つてゐる。これはどのやうなウィンドウツールバーも除外する。
例:
:echo "The current window has " . winheight(0) . " lines."
|method| としても使用できます:
GetWinid()->winheight()
結果はタブページ內のウィンドウレイアウトを含む、ネストされたリスト。
{tabnr} を指定しないと現在のタブページが使はれ、さうでなければ番號 {tabnr} のタブページが使はれる。もしもタブページ {tabnr} が見つからなければ、空のリストが返される。
leaf ウィンドウなら、次のものが返る:
['leaf', {winid}]
水平分割したウィンドウなら、桁の方式で次のものが返る:
['col', [{nested list of windows}]]
垂直分割したウィンドウなら、行の方式で次のものが返る:
['row', [{nested list of windows}]]
例:
" タブページにウィンドウが 1 つのみ :echo winlayout() ['leaf', 1000] " 水平分割されたウィンドウが 2 つ :echo winlayout() ['col', [['leaf', 1000], ['leaf', 1001]]] " 3 つの水平分割されたウィンドウで、眞ん中のウィンドウは " 垂直分割されたウィンドウが 2 つある :echo winlayout(2) ['col', [['leaf', 1002], ['row', ['leaf', 1003], ['leaf', 1001]]], ['leaf', 1000]]
|method| としても使用できます:
GetTabnr()->winlayout()
結果は數値で、ウィンドウの最上行から數へた行番號を返す。ウィンドウでの最上行が1となる。
カーソルが移動するとファイルの表示が更新され、それによつてスクロールが引き起こされることがある。
結果は現在のウィンドウを示す數値。最上位のウィンドウは 1 である。
省略可能な引數 {arg} は以下の値をサポートする:
$ | 最後のウィンドウの番號 (ウィンドウ數) |
# | 最後にアクセスしたウィンドウの番號 (|CTRL-W_p| の行き先)。前のウィンドウがないか、別のタブページにある場合は 0 が返される。 |
{N}j | 現在のウィンドウの下 N 番目のウィンドウの番號 (|CTRL-W_j| の行き先)。 |
{N}k | 現在のウィンドウの上 N 番目のウィンドウの番號 (|CTRL-W_k| の行き先)。 |
{N}h | 現在のウィンドウの左 N 番目のウィンドウの番號 (|CTRL-W_h| の行き先)。 |
{N}l | 現在のウィンドウの右 N 番目のウィンドウの番號 (|CTRL-W_l| の行き先)。 |
この番號は |CTRL-W_w| と ":wincmd w
" で使へる。|:wincmd|
|tabpagewinnr()| と |win_getid()| も參照。 例:
let window_count = winnr('$') let prev_window = winnr('#') let wnum = winnr('3k')
|method| としても使用できます:
GetWinval()->winnr()
現在のウィンドウサイズを復元するための一聯の |:resize| コマンドを返す。これが返すコマンドは、ウィンドウを開閉せず、カレントウィンドウとカレントタブページが變更されてゐないときのみ正しく動作する。
例:
:let cmd = winrestcmd() :call MessWithWindowSizes() :exe cmd
|winsaveview()| が返す辭書 |Dictionary| を使つてカレントウィンドウの表示狀態を復元する。
Note:
{dict} は |winsaveview()| の戾り値に含まれる値をすべて持つてゐなくても構はない。値がない場合はその設定は復元されない。次のやうにできる::call winrestview({'curswant': 4})
これは curswant 値 (縱方向移動でカーソルの移動先として使はれる列番號) を列番號 5 に設定する (はいそのとほり。5 です)。ほかの設定値は變更されない。これはカーソル位置を手動で設定したい場合に便利である。
この値を手動で變更した場合、結果は豫測できない。ウィンドウサイズが變更されてゐると、結果は必ずしも元通りにならない。
|method| としても使用できます:
GetView()->winrestview()
カレントウィンドウの表示狀態を復元するための情報を持つ辭書 |Dictionary| を返す。この表示狀態を復元するには |winrestview()| を使ふ。
マッピング內でジャンプして、元の表示狀態を戾したいときに使はれる。
折り疊み情報は保存しない。オプション ’foldenable’ によつて一時的に折り疊みをオフにし、移動中に折り疊みが開かれないやうにすること。これは副作用があるかもしれない。 戾り値は以下のキーを持つ:
lnum | カーソルの行番號 |
col | カーソルの桁番號 (
) |
coladd | カーソル位置の桁オフセット。’virtualedit’ がオンのとき使はれる。 |
curswant 垂直移動するときの桁 | |
topline | ウィンドウの最上行 |
topfill | 削除行。差分モードでのみ |
leftcol | 表示されてゐる最初の桁 |
skipcol | スキップされてゐる桁 |
Note:
オプションの値は保存されない。
結果は數値で、ウィンドウ {nr} の幅。{nr} にはウィンドウ番號または |window-ID| が使へる。
{nr} が 0 のときはカレントウィンドウの幅を返す。ウィンドウ {nr} が存在しないときは -1 を返す。ウィンドウは必ず 0 以上の幅を持つ。
例:
:echo "The current window has " . winwidth(0) . " columns." :if winwidth(0) <= 50 : 50 wincmd | :endif
端末または畫面サイズを取得するには、’columns’ オプション參照。
|method| としても使用できます:
GetWinid()->winwidth()
この結果は現在のバッファのバイト/文字/單語統計情報の辭書である。これは |g_CTRL-G| が提供する情報と同じである。 この値には下記が含まれる:
bytes | バッファ內のバイト數 |
chars | バッファ內の文字數 |
words | バッファ內の單語數 |
cursor_bytes | カーソル位置より前のバイト數 (ビジュアルモードでない) |
cursor_chars | カーソル位置より前の文字數 (ビジュアルモードでない) |
cursor_words | カーソル位置より前の單語數 (ビジュアルモードでない) |
visual_bytes | ビジュアル選擇領域內のバイト數 (ビジュアルモードのみ) |
visual_chars | ビジュアル選擇領域內の文字數 (ビジュアルモードのみ) |
visual_words | ビジュアル選擇領域內の單語數 (ビジュアルモードのみ) |
{object} が |List| の場合、それをファイル {fname} に書き込む。リストの各要素は改行文字 (NL) で區切られる。各要素は文字列か數値でなければならない。
{flags} が "b" を含むときはバイナリモードとなり、最後の要素の後に NL が追加されない。最後の要素が空であると、ファイルの最後の行が NL で終はるやうになる。
{object} が |Blob| の場合、バイトを變更せずにファイル {fname} に書き込む。
{flags} が "a" を含むときは追記モードとなり、ファイルに行が追記される。
:call writefile(["foo"], "event.log", "a") :call writefile(["bar"], "event.log", "a")
{flags} が "s" を含むときはファイルを書き込んだ後に fsync() が呼ばれる。もしも可能ならば、ファイルをディスクにフラッシュする。これには時閒がかかるけれども、例へシステムがクラッシュしたとしても、ファイルを失ふことを囘避する。
{flags} が "S" も "s" も含まないときに ’fsync’ オプションが設定されてゐると fsync() は呼ばれる。
{flags} が "S" を含むときは ’fsync’ が設定されてゐても fsync() は呼ばれない。
NL 文字は NUL 文字に置換される。
CR 文字を加へるには、{list} を writefile() に渡す前に行はねばならない。
既存のファイルは上書きされる (上書き可能ならば)。
書き込みが失敗したときは -1 を返す。さうでなければ 0 を返す。ファイルを作成できないときや、書き込みが失敗したときはエラーメッセージが表示される。
|readfile()| も參照。 バイト單位でファイルをコピーするには次のやうにする:
:let fl = readfile("foo", "b") :call writefile(fl, "foocopy", "b")
|method| としても使用できます:
GetText()->writefile("thefile")
2 つの引數のビット排他的論理和。引數は數値に變換される。リスト、辭書、浮動小數點數を指定するとエラーになる。
例:
:let bits = xor(bits, 0x80)
|method| としても使用できます:
:let bits = bits->xor(0x80)
:if has("cindent")
:if has("gui_running")
:if has("patch-7.4.248")
Note:
249 が適用されてゐても、248 が拔けてゐることもありうるので注意。cherry-pick パッチの時にのみ生じる。
Note:
これはパッチ 7.4.237 以降でのみ機能する。それ以前では上述のやうに v:version を確認する必要がある。例 (6.2.148 以降かどうかを確認する):
:if v:version > 602 || (v:version == 602 && has("patch148"))
ヒント:
Vim がファイル名 (MS-Windows) でバックスラッシュをサポートしてゐるかどうかを調べるには ‘if exists(’+shellslash’)‘ を使用する。
acl | |ACL| をサポート |
all_builtin_terms | 全ての組込みターミナルを有效にしてコンパイル |
amiga | AMIGA バージョン |
arabic | アラビア語をサポート |Arabic| |
arp | ARP をサポート (Amiga) |
autocmd | 自動コマンドをサポート (常に眞) |
autochdir | ’autochdir’ をサポート |
autoservername | 自動的に動作する |clientserver| |
balloon_eval | |balloon-eval| をサポート |
balloon_multiline | 複數行バルーンをサポート |
beos | BeOS バージョン |
browse | |:browse| をサポートし、browse() が動作する |
browsefilter | |browsefilter| をサポート |
bsd | BSD ファミリの OS でコンパイルされてゐる (macOS を除く) |
builtin_terms | 幾つかの組込みターミナルが有效 |
byte_offset | ’statusline’ において ’o’ がサポートされる |
cindent | ’cindent’ をサポート |
clientserver | リモート呼び出しをサポート |clientserver| |
clipboard | ’clipboard’ をサポート |
clipboard_working | ’clipboard’ をサポートし、使用可能 |
cmdline_compl | |cmdline-completion| コマンドライン補完をサポート |
cmdline_hist | |cmdline-history| コマンドライン履歷をサポート |
cmdline_info | ’showcmd’ と ’ruler’ をサポート |
comments | |'comments'| をサポート |
compatible | Vi 互換度を非常に高めてコンパイルされてゐる |
conpty | |ConPTY| を使用できるプラットフォーム |
cryptv | 暗號化をサポート |encryption| |
cscope | |cscope| をサポート |
cursorbind | |'cursorbind'| をサポート (常に true) |
debug | デバッグバージョンである |
dialog_con | コンソールダイアログのサポート |
dialog_gui | GUI ダイアログのサポート |
diff | |vimdiff| と ’diff’ のサポート |
digraphs | ダイグラフをサポート |
directx | DirectX と ’renderoptions’ をサポート |
dnd | レジスタ "~ をサポート |quote_~| |
ebcdic | EBCDIC 文字集合のマシン用 |
emacs_tags | Emacs 式のタグファイルをサポート |
eval | 式評價をサポート (常に眞) |
ex_extra | 今は常に眞 |+ex_extra| |
extra_search | |'incsearch'| と |'hlsearch'| をサポート |
farsi | |farsi| をサポート |
file_in_path | |gf| と |<cfile>| をサポート |
filterpipe | ’shelltemp’ がオフのとき、シェルの讀み込み・書き込み・フィルタコマンドにパイプを使ふ。 |
find_in_path | include ファイル內の檢索をサポート |+find_in_path| |
float | 浮動小數點數 |Float| サポート |
fname_case | ファイル名の大文字小文字が區別される (Amiga, MS-DOS, そして Windows では區別されないので僞) |
folding | |folding| 折り疊みをサポート |
footer | GUI のフッターをサポート |gui-footer| |
fork | system() の代はりに fork()/exec() を用ゐてゐる |
fullscreen | ’fullscreen’ のサポート |
gettext | 飜譯メッセージをサポート |multi-lang| |
gui | GUI が有效である |
gui_athena | Athena の GUI が有效である |
gui_gnome | Gnome サポート (gui_gtk も定義される) |
gui_gtk | GTK+ の GUI が有效である |
gui_gtk2 | GTK+ 2 の GUI が有效である (gui_gtk も定義される) |
gui_gtk3 | GTK+ 3 の GUI が有效である (gui_gtk も定義される) |
gui_mac | マッキントッシュの GUI が有效である |
gui_macvim | MacVim の GUI が有效である。 |
gui_motif | Motif の GUI が有效である |
gui_photon | Photon の GUI が有效である |
gui_running | Vim が GUI モードで起動してゐる、もしくは閒もなくする |
gui_win32 | Win32 の GUI が有效である |
gui_win32s | Win32s の GUI が有效である (Windows 3.1) |
hangul_input | ハングル入力サポート |hangul| |
hpux | HP-UX のバージョン |
iconv | iconv() をサポート |
insert_expand | 插入モード時に CTRL-X の展開がサポートされる (常に眞) |
jumplist | |jumplist| をサポート |
keymap | ’keymap’ をサポート |
lambda | |lambda| をサポート |
langmap | ’langmap’ サポート |
libcall | |libcall()| をサポート |
linebreak | ’linebreak’, ’breakat’, ’showbreak’, ’breakindent’ をサポート |
linux | Linux のバージョン |
lispindent | lisp 式のインデントをサポート |
listcmds | バッファリスト用のコマンド |:files| と引數リスト用のコマンド |arglist| をサポート |
localmap | ローカルなマッピングと短縮入力をサポート |:map-local| |
lua | Lua インターフェイスをサポート |Lua| |
mac | すべてのマッキントッシュ版 Vim。osx を參照 |
macunix | osxdarwin と同義語 |
menu | |:menu| をサポート |
mksession | |:mksession| をサポート |
modify_fname | ファイル名變換子をサポート |filename-modifiers| (常に眞) |
mouse | マウスをサポート |
mouse_dec | DEC のターミナルマウスをサポート |
mouse_gpm | gpm をサポート (Linux のコンソールマウス) |
mouse_gpm_enabled | GPM マウスが動作してゐる |
mouse_netterm | netterm のマウスをサポート |
mouse_pterm | qnx pterm のマウスをサポート |
mouse_sysmouse | sysmouse (*BSD コンソールマウス) をサポート |
mouse_sgr | sgr のマウスをサポート |
mouse_urxvt | urxvt のマウスをサポート |
mouse_xterm | xterm のマウスをサポート |
mouseshape | ’mouseshape’ をサポート |
multi_byte | ’encoding’ をサポート (常に眞) |
multi_byte_encoding | ’encoding’ がマルチバイトエンコーディングになる |
multi_byte_ime | IME による入力をサポート |
multi_lang | 複數言語をサポート |
mzscheme | MzScheme インターフェイスをサポート |mzscheme| |
netbeans_enabled | |netbeans| をサポートし、現在接續してゐる |
netbeans_intg | |netbeans| をサポート |
num64 | 64 ビット數値をサポート |Number| |
odbeditor | |odbeditor| をサポート |
ole | Win32 にて OLE オートメーションをサポート |
osx | macOS 向け。mac を參照 |
osxdarwin | macOS 向け。|mac-darwin-feature| をサポート |
packages | |packages| をサポート |
path_extra | ’path’ と ’tags’ の上方・下方檢索をサポート |
perl | Perl インターフェイスをサポート |
persistent_undo | 永續アンドゥをサポート |
postscript | PostScript ファイルの印刷をサポート |
printer | |:hardcopy| をサポート |
profile | |:profile| をサポート |
python | Python 2.x インターフェイスをサポート |has-python| |
python3 | Python 3.x インターフェイスをサポート |has-python| |
python | Python 2.x インターフェイスを利用できる |has-python| |
python_compiled | Python 2.x インターフェイスでコンパイルされてゐる |has-python| |
python_dynamic | Python 2.x インターフェイスは動的にロードされる |has-python| |
python3 | Python 3.x インターフェイスを利用できる |has-python| |
python3_compiled | Python 3.x インターフェイスでコンパイルされてゐる |has-python| |
python3_dynamic | Python 3.x インターフェイスは動的にロードされる |has-python| |
pythonx | |python_x| インターフェイスをサポート |has-pythonx| |
qnx | QNX バージョン |
quickfix | |quickfix| をサポート |
reltime | |reltime()| をサポート |
rightleft | ’rightleft’ をサポート |
ruby | Ruby インターフェイスをサポート |ruby| |
scrollbind | ’scrollbind’ をサポート (常に眞) |
showcmd | ’showcmd’ をサポート |
signs | |:sign| をサポート |
smartindent | ’smartindent’ をサポート |
sound | サウンド再生をサポート。例へば ‘sound_playevent() ‘ |
spell | スペルチェックをサポート |spell| |
startuptime | |--startuptime| をサポート |
statusline | ’statusline’, ’rulerformat’ そして ’titlestring’ と ’iconstring’ の特殊フォーマットをサポート |
sun | SunOS バージョン |
sun_workshop | Sun |workshop| のサポートは削除されました |
syntax | 構文ハイライト |syntax| をサポート |
syntax_items | 現在のバッファに有效なシンタックスが設定されてゐる |
system | fork()/exec() の代はりに system() が使用されてゐる |
tag_binary | タグファイル內の二分探索 |tag-binary-search| |
tag_old_static | 舊式の靜的 tags のサポートは削除されました |tag-old-static| |
tcl | TCL インターフェイスをサポート |
termguicolors | 端末での true カラーをサポート |
terminal | |terminal| をサポート |
terminfo | termcap の代はりに terminfo をサポート |
termresponse | |t_RV| と |v:termresponse| をサポート |
textobjects | |text-objects| をサポート |
textprop | |text-properties| をサポート |
tgetent | tgetent をサポート。termcap か terminfo ファイルが使用可能 |
timers | |timer_start()| をサポート |
title | ウィンドウタイトルをサポート |'title'| |
toolbar | |gui-toolbar| をサポート |
touchbar | MacVim でのタッチバーをサポート |
transparency | ’transparency’ をサポート |
ttyin | 入力が端末 (tty) である |
ttyout | 出力が端末 (tty) である |
unix | UNIX バージョン |
unnamedplus | ’clipboard’ に "unnamedplus" をサポート |
user_commands | ユーザー定義コマンドをサポート (常に眞) |
vcon | Win32: 假想コンソールが動作するなら ’termguicolors’ を使ふことができる。|+vtp| も參照。 |
vertsplit | ウィンドウの垂直分割をサポート |:vsplit| (常に眞) |
vim_starting | Vim の初期化プロセス中は眞となる。|startup| |
viminfo | viminfo をサポート |
vimscript-1 | Vim script バージョン 1 サポート |
vimscript-2 | Vim script バージョン 2 サポート |
vimscript-3 | Vim script バージョン 3 サポート |
virtualedit | オプション ’virtualedit’ をサポート (常に眞) |
visual | ビジュアルモードをサポート (常に眞) |
visualextra | 擴張ビジュアルモードをサポート |blockwise-operators| (常に眞) |
vms | VMS バージョン |
vreplace | コマンド |gR| と |gr| をサポート (常に眞) |
vtp | |+vtp| をサポートする vcon をコンパイルする (現在のコンソールで動作するなら、見つけるために vcon をチェックする) |
wildignore | オプション ’wildignore’ をサポート |
wildmenu | オプション ’wildmenu’ を指定してコンパイル |
win16 | 古い MS-Windows 3.1 バージョン (常に僞) |
win32 | Win32 バージョン (MS-Windows 95 以上の 32 or 64 ビット) |
win32unix | Win32 バージョン。Unix ファイルを使用 (Cygwin) |
win64 | Win64 バージョン (MS-Windows 64 bit) |
win95 | Win32 バージョン。MS-Windows 95/98/ME 用 (常に僞) |
winaltkeys | オプション ’winaltkeys’ を指定してコンパイル |
windows | 複數ウィンドウをサポート (常に眞) |
writebackup | オプション ’writebackup’ が起動時に on になる |
xfontset | X fontset をサポート |xfontset| |
xim | XIM をサポート |xim| |
xpm | pixmap をサポート |
xpm_w32 | Win32 で pixmap をサポート(後方互換性のためのみ。代はりに "xpm" を使用せよ。) |
xsmp | X セッションマネージメントをサポート |
xsmp_interact | 對話的 X セッションマネージメントをサポート |
xterm_clipboard | xterm のクリップボードサポート |
xterm_save | xterm のスクリーンの保存復歸をサポート |
x11 | X11 をサポート |
|pattern| で說明されてゐる正規表現パターンは通常、バッファ內の行に對してマッチを檢索するために使はれる。
文字列內でマッチを見つけるために使ふときも、ほとんどは同じやうに動作する。違ひは、文字列が 1 つの行であるかのやうに扱はれる事である。
文字列が文字 "\n" だけを含むとき、これは改行とはみなされない。この "\n" はパターン內の "\n" や "." にマッチする。例:
:let a = "aaaa\nxxxx" :echo matchstr(a, "..\n..") aa xx :echo matchstr(a, "a.x") a x
"^" は文字列の最初の文字でだけマッチし、"$" は最後の文字でだけマッチすることに注意。"\n" の前後にはマッチしない。
ユーザーは自分で新しい函數を定義することができる。その函數は組込み函數とまつたく同じやうに呼び出せる。函數は一聯の Ex コマンドを實行する。ノーマルモードコマンドはコマンド |:normal| によつて實行できる。
函數名は組込み函數との混同を避ける爲、大文字で始まらなければならない。他のスクリプトで同じ函數名を使用してしまふことを避ける爲に、露骨に短い名前は避けるべきである。函數名を例へば "HTMLcolor()" のやうに、スクリプトの名前から始めるといふのは良い習慣である。
波括弧變數といふものもある (|curly-braces-names| を參照)。また、オートロード |autoload| 機構を使ふと、函數が呼ばれたときだけ定義することができる。
スクリプトローカルな函數の名前は "s:" で始めなければならない。スクリプトローカルな函數は、そのスクリプトの中の函數から、またはそのスクリプト內で定義されたユーザー定義コマンド、自動コマンドからしか呼ぶことができない。そのスクリプト內で定義されたマッピングにより呼ぶこともできるが、スクリプトの外部でマッピングが展開された場合は "s:" の代はりに |<SID>| をつけなければならない。
ローカル函數はスクリプトローカル函數だけである。バッファローカル函數やウィンドウローカル函數といふものはない。
全ての函數と、その引數を表示する。
函數 {name} の定義を表示する。
{name} は辭書 |Dictionary| の要素の |Funcref| であつてもよい:
:function dict.init
{pattern} にマッチする名前の函數を表示する。"File" で終はる函數を全て表示する例:
:function /File$
’verbose’ が 0 でないとき、これらのコマンドで函數を表示すると、それがどこで定義されたかも表示する。例:
:verbose function SetFileTypeSH function SetFileTypeSH(name) Last set from /usr/share/vim/vim-7.0/filetype.vim
より詳しくは |:verbose-cmd| を參照。
{name} といふ名前で新しい函數を定義する。函數の本體は、宣言の次の行から始まり、對應する |:endfunction| までになる。
函數名はアルファベットと數字と ’_’ からなり、通常の函數はアルファベットの大文字、スクリプトローカル函數は "s:" で始まらなければならない。
Note:
"b:" や "g:" は使用できない (7.4.260 からは函數名にコロンが含まれる場合は E884 エラーが發生する。例 "foo:bar()"。このパッチ以前はエラーにはならない)。
{name} は辭書 |Dictionary| の要素の |Funcref| であつてもよい:
:function dict.init(arg)
"dict" は既に定義されてゐる辭書でなければならない。その要素 "init" がまだ存在しないならば追加される。存在する場合は、既存の函數を上書きするためには [!] をつけなければならない。この値は番號つきの函數を指す |Funcref| である。この函數は |Funcref| を通してのみ呼ぶことができ、そこへの參照がなくなると削除される。
この名前で定義される函數が既に定義濟みで [!] が使用されなかつた場合、エラーとなる。例外が 1 つある: スクリプトを再讀み込みするとき、そのスクリプトで以前に定義された函數は何も言はずに置き換へられる。
[!] が使用されてゐれば、それまで存在していた函數は、速やかに新しいものへ置換へられる。
Note:
賢く使ふこと!氣をつけないで使ふと、意圖せず存在する函數が置き換へられてしまふ。これはひどいバグだ。
引數 {arguments} については |function-argument| を參照。
引數 [range] を追加した場合、函數は「範圍」を管理することができる。「範圍」は "a:firstline" と "a:lastline" によつて渡される。[range] がなかつた場合、":{range}call" が「範圍」を指定されて實行されると、1 行 1 行について、カーソルをその行の先頭に置いた狀態で函數を呼び出すことになる。|function-range-example| を參照。他の Ex コマンドと同樣に、カーソルは選擇範圍の最初の行に移動される。
引數 [abort] を追加すると、函數の實行中にエラーに遭遇し次第、卽函數は中斷される。
引數 [dict] を追加すると、この函數は辭書 |Dictionary| の要素を通してしか呼べなくなる。そしてその辭書にローカル變數 "self" が定義される。|Dictionary-function| を參照。
引數 [closure] を追加すると、函數は外側のスコープの變數と引數をアクセスできるやうになる。これは一般的にクロージャと呼ばれる。以下の例では Bar() は Foo() のスコープの "x" を使用してゐる。それは Foo() から戾つても參照され續ける:
:function! Foo() : let x = 0 : function! Bar() closure : let x += 1 : return x : endfunction : return funcref('Bar') :endfunction
:let F = Foo() :echo F() 1 :echo F() 2 :echo F() 3
函數の實行によつて、最後に使用されたサーチパターン、及び redo コマンドの "." の內容は變更されない。したがつて、函數內で |:nohlsearch| を行つても、函數から戾ると檢索結果のハイライトが元に戾ることになる。
函數定義の終了。[argument] を付けずに 1 行このコマンドのみを書くのがベスト。
[argument] となるのは:
| command | 次を實行するコマンド |
\n command | 次を實行するコマンド |
" comment | 常に無效 |
anything else | 無效。’verbose’ が非ゼロのときは警告が出る |
Vim 8.0.0654 以降で追加されたコマンドがサポートされ、それより以前のコマンドは默つて無視される。
‘:execute‘ コマンドの中で函數と定義するため、|:bar| の代はりに改行を使ふ:
:exe "func Foo()\necho 'foo'\nendfunc"
函數 {name} を削除する。
{name} は辭書 |Dictionary| の要素の |Funcref| であつてもよい:
:delfunc dict.init
この例は "dict" から要素 "init" を削除する。この函數への參照がなくなると、函數は削除される。! を一緖に使ふと、函數が存在しなくてもエラーを生じない。
函數から戾る。"[expr]" が與へられた場合、それは評價され函數の戾り値として呼出し側に渡される。"[expr]" が與へられない場合、數値 0 が呼出し側に渡される。
Note:
函數內に實行されない命令があるかどうかはチェックされないことに留意すること。つまり、たとへ ":return
" 命令の後に何か命令があつたとしても、警告も何も與へられない。
|:try| と |:finally| の閒で ":return
" が實行された場合、":finally
" から對應する |:endtry| までのコマンドがまず實行される。":try
" がネストしてゐる場合、それらの全てに對してこのプロセスが適用される。そして最も外側の ":endtry
" にて函數を拔ける。
引數は、與へられた名前によつて定義される。函數のなかでは "a:name" ("a:" を引數に接頭)のやうにして參照することができる。
引數はコンマで區切ることで、最大 20 まで與へることができる。最後の引數を "..." にすることで、可變長の引數を使用できる。函數の中では "a:1" や "a:2" のやうにして可變長の引數にアクセスできる。"a:0" は可變長引數が幾つあるかを示してゐる (0 であること、つまり引數がそれ以上ないこともある)。"a:000" は全引數を持つリスト |List| を示してゐる。
Note:
"a:1" は "a:000[0]" と同じである。
a: のスコープとこの變數は固定されてをり、變更できない。しかしリスト |List| や辭書 |Dictionary| のやうな複合型が使用された場合は、その內容を變更できる。よつて函數にリスト |List| を渡し、そこに要素を追加させることができる。函數にリスト |List| や辭書 |Dictionary| を變更させたくない場合は |:lockvar| を使ふこと。
函數を引數無しで定義することも可能である。その時でも()は付けなければならない。
函數の中で別の函數を定義することも可能である。
名前付き固定引數にデフォルト値を指定できる。これにより、函數呼び出しではオプションになる。呼び出し時に固定引數が指定されてゐない場合は、デフォルトの式を使用して初期化される。これは ‘:function
‘ で宣言された函數に對してのみ機能し、ラムダ式 |expr-lambda| には機能しない。
例:
function Something(key, value = 10) echo a:key .. ": " .. a:value endfunction call Something('empty') "empty: 10" call Something('key', 20) "key: 20"
引數のデフォルト式は、定義時ではなく函數呼び出し時に評價される。したがつて、函數が定義された瞬閒に無效な式を使用することが可能である。式はまた、呼び出し中に引數が指定されてゐない場合にのみ評價される。
デフォルトの式を使ふために |v:none| を渡すことができる。
Note:
これは、引數にデフォルトの式がある場合、v:none を通常の値として渡すことができないことを意味することに注意。
例:
function Something(a = 10, b = 20, c = 30) endfunction call Something(1, v:none, 3) " b = 20
デフォルト式を持つオプション引數は、必須引數の後になければならない。オプションの名前付き引數すべての後に "..." を使用できる。
後の引數のデフォルトが前の引數を參照することは可能だが、その逆はできない。すべての引數と同樣に、それらには "a:" を前に付ける必要がある。
動作する例:
:function Okay(mandatory, optional = a:mandatory) :endfunction
動作しない例:
:function NoGood(first = a:second, second = 10) :endfunction
"..." が使はれてゐない時は、函數呼び出しの時の引數の數は必須の名前付きの引數の數と一致してゐなければならない。"..." を使つた時には引數の數は大きくなるだらう。
函數の中でローカル變數を使ふこともできる。これらは函數から戾ると消滅する。グローバル變數にアクセスするためには "g:" を付ける必要がある。
例:
:function Table(title, ...) : echohl Title : echo a:title : echohl None : echo a:0 . " items:" : for s in a:000 : echon ' ' . s : endfor :endfunction
この函數は次のやうに呼ぶことができる:
let lines = Table("Table", "line1", "line2") let lines = Table("Empty Table")
1 つ以上の値を返したい場合には、リスト |List| を返すやうにする:
:function Compute(n1, n2) : if a:n2 == 0 : return ["fail", 0] : endif : return ["ok", a:n1 / a:n2] :endfunction
この函數は次のやうに呼ぶことができる:
:let [success, div] = Compute(102, 6) :if success == "ok" : echo div :endif
函數を呼び出す。函數の名前と引數は ‘:function
‘ によつて指定されるものである。引數は最大 20 まで使用可能。戾り値は破毀される。
「範圍」を受け付ける函數に「範圍」を指定しなかつた場合、函數はカーソルの現在位置について一度だけ呼び出される。
「範圍」を受け付けない函數に「範圍」を指定した場合、その範圍の 1 行ずつについて函數が呼び出される。その時カーソルは當該行の先頭に設定される。カーソルは「範圍」の最下行の左端になる(恐らく最後の函數呼出しの結果、動いた先である)。引數は各呼出しについて繰り返し評價される。それは次の例で確かめることができる:
:function Mynumber(arg) : echo line(".") . " " . a:arg :endfunction :1,5call Mynumber(getline("."))
"a:firstline" と "a:lastline" はとにかく定義されるので、「範圍」の最初や最後で何か違つた事をするのにも用ゐることができる。
「範圍」自身を扱つてゐる函數の例:
:function Cont() range : execute (a:firstline + 1) . "," . a:lastline . 's/^/\t\\ ' :endfunction :4,8call Cont()
この函數は「範圍」の最初の行を除いた全ての行の先頭に、繼續のための文字 "\" を插入する。
この函數の戾り値からさらに閒接參照が行はれる場合、その參照先には範圍が渡されない。例:
:4,8call GetDict().method()
GetDict() には範圍が渡されるが、method() には渡されない。
函數の再歸的な使用はオプション |'maxfuncdepth'| によつて制限することができる。
‘:eval
‘ を使用することもできる。範圍はサポートしてゐませんが、メソッドの聯鎖は可能です。例へば:
eval GetList()->Filter()->append('$')
函數は式の評價の一部として、またはメソッドとして使用されるときに呼び出すこともできます:
let x = GetList() let y = GetList()->Filter()
たくさんの函數または巨大な函數を使ふときは、それらが使用されたときだけ自動的に定義されるやうにすることができる。これには 2 つの方法がある: 自動コマンドによる方法と、’runtimepath’ 內の "autoload" ディレクトリによる方法である。
これはユーザーマニュアルのセクション |41.14| で說明されてゐる。
自動コマンドは、長い Vim script ファイルのプラグインに對して有用である。自動コマンドを定義し、すぐに ‘:finish
‘ でそのスクリプトを拔ける。かうすると Vim の起動が速くなる。その後自動コマンドにより ‘:finish
‘ コマンドをスキップする變數を定義し、そのファイルが再び讀み込まれる。
定義すべき函數名にマッチするパターンを指定して自動コマンドイベント FuncUndefined を使ふ。例:
:au FuncUndefined BufNet* source ~/vim/bufnetfuncs.vim
ファイル "~/vim/bufnetfuncs.vim" は "BufNet" で始まる函數を定義しなければならない。|FuncUndefined| も參照。
これはユーザーマニュアルのセクション |41.15| で說明されてゐる。
"autoload" ディレクトリのスクリプトを使ふ方法はより簡單である。しかし完全に正しいファイル名を使ふ必要がある。オートロードされる函數は次のやうな名前を持つ:
:call filename#funcname()
このやうな函數が呼ばれ、それがまだ定義されてゐなかつた場合、Vim は ’runtimepath’ 內の "autoload" ディレクトリから "filename.vim" といふスクリプトファイルを探す。例へば "~/.vim/autoload/filename.vim" のやうに。そしてこのファイルは次のやうな函數を定義してゐなければならない:
function filename#funcname() echo "Done!" endfunction
このファイル名と函數の # の前の部分は完全に一致しなければならない。そして定義された函數は呼ばれた函數と完全に同じ名前でなければならない。
サブディレクトリを使ふこともできる。函數名の中の # はパスのセパレータのやうに解釋される。つまり、次の函數を呼ぶと:
:call foo#bar#func()
Vim は ’runtimepath’ からファイル "autoload/foo/bar.vim" を探す。
これはまだ定義されてゐない變數を參照するときにも使へる:
:let l = foo#bar#lvar
しかしこのオートロードスクリプトがすでに讀み込まれてゐる場合、未知の變數があつてもこのスクリプトは再讀み込みされない。
この變數に値を代入するときは、何も特別なことはない。この方法は、オートロードスクリプトが讀み込まれる前に設定を渡すために使ふことができる:
:let foo#bar#toggle = 1 :call foo#bar#func()
Note:
オートロードスクリプト內で定義されるはずの函數を呼んだがスクリプト內で函數が定義されなかつた場合、その函數を呼ぶたびにそのスクリプトが source される。そして每囘エラーメッセージが表示される。
また、2 つのスクリプト閒で、互ひに自分が定義される前に相手を呼ぶような函數があると、これは動作しない。トップレベルでオートロード機能を使ふのは避けること。
Hint:
たくさんのファイルからなるスクリプトを配布する場合には、|vimball| ユーティリティを使ふとそれらをまとめることができる。ユーザーマニュアルの |distribute-script| も參照。
變數を使用可能なほとんどの文脈では「波括弧」變數を使ふことができる。これは有效な變數名であり、次のやうに、1 個以上の式を波括弧 {} で圍む:
my_{adjective}_variable
Vim はこれを見つけると、まづ波括弧の中の式を評價し、その値をもとの位置に置きかえ、全體を變數名として再解釋する。よつて上の例では、變數 "adjective" に "noisy" が代入されてゐたとすると、この變數は "my_noisy_variable" となる。あるいは、"adjective" に "quiet" が代入されてゐたとすれば "my_quiet_variable" となる。
これの應用の 1 つは、オプション値によつて支配される變數の集合を作ることである。例へば次の文
echo my_{&background}_message
は現在の ’background’ の値に應じて "my_dark_message" か "my_light_message" の中身を表示する。
波括弧を複數使ふこともできる:
echo my_{adverb}_{adjective}_message
ネストさせることもできる:
echo my_{ad{end_of_word}}_message
ここで "end_of_word" は "verb" か "jective" のどちらかである。
しかし、波括弧の中の式を評價した結果が有效な變數名とならなければならない。つまり、次は無效である:
:let foo='a + b' :echo c{foo}d
といふのは、展開の結果が "ca + bd" となるからで、これは有效な名前ではない。
同樣の方法で評價した名前により函數を定義したり呼び出したりできる。
例:
:let func_end='whizz' :call my_func_{func_end}(parameter)
この例は函數 "my_func_whizz(parameter)" を呼びだす。
これらは機能しない:
:let i = 3 :let @{i} = '' " error :echo @{i} " error
內部變數 {var-name} に式 {expr1} の結果をセットする。變數の型は {expr1} によつて決定される。{var-name} といふ變數がまだ存在しない場合、新たに作成される。
リストの要素に式 {expr1} の結果をセットする。{var-name} はリストを參照し、{idx} はそのリストの有效なインデックスでなければならない。ネストしたリストに對してはインデックスを繰り返すことができる。 このコマンドはリスト |List| に要素を追加するためには使へない。文字列の i バイト目をセットするためにも使へない。それには次のやうにする:
:let var = var[0:2] . 'X' . var[4:]
{var-name} が |Blob| の場合、{idx} は blob の長さになる。この場合、1 バイトが追加される。
リスト |List| の一部を式 {expr} の値で置き換へる。{expr} の値は正しい個數の要素を持つリストでなければならない。 {idx1} を省略すると 0 となる。{idx2} を省略するとリストの末尾となる。指定された範圍の一部がリストの末尾を越える場合、要素が追加される。
{var} がセットされてゐないときや、{var} と {expr1} の型が演算子に合はないときは失敗する。
‘.=
‘ は Vim script バージョン2以降ではサポートされてゐない。|vimscript-version| を參照。
環境變數 {env-name} に式 {expr1} の結果をセットする。型は常に文字列。
一部のシステムでは、環境變數を空にすると環境變數が削除されます。多くのシステムは、設定されてゐない環境變數と空の環境變數を區別しません。
環境變數 {env-name} に {expr1} を付け加へる。その環境變數が存在しないときは "=" と同樣に働く。
式 {expr1} の結果をレジスタ {reg-name} に書きこむ。{reg-name} は單一の文字でかつ、書きこむことのできるレジスタでなければならない (|registers| を參照)。"@@" は名前無しレジスタとして使用でき、"@/" はサーチパターンとして使用できる。
{expr1} の結果が <CR> か <NL> で終了してゐた場合、レジスタは行單位で設定され、さうでなければ文字單位で設定される。次のコマンドにより最後に檢索したパターンをクリアすることができる:
:let @/ = ""
これは空文字列を檢索するのとは異なる。空文字列を檢索すると、いたるところでマッチする。
レジスタ {reg-name} に {expr1} を付け加へる。このレジスタが空のときは、そこに {expr1} をセットする。
オプション {option-name} に式 {expr} の値をセットする。文字列や數値の値はそのオプションの型に變換される。 ウィンドウやバッファについてローカルなオプションに對しては、その效果は |:set| コマンドを使つたときと同樣で、ローカルな値とグローバルな値の兩方が變更される。例:
:let &path = &path . ',/usr/local/include'
これは、t_xx 形式の端末コードにも使へる。ただし、英數字の名前に限る。例:
:let &t_k1 = "\<Esc>[234;"
コードが存在してゐなかつたときは端末キーコードとして作成され、エラーは發生しない。
文字列のオプションの場合: その値に {expr} を付け加へる。|:set+=| とは違ひ、コンマを插入しない。
數値または切替のオプションの場合: {expr1} を足す・引く。
上と同樣だが、オプションのローカルな値だけをセットする (ローカルな値があるならば)。|:setlocal| と同樣に働く。
上と同樣だが、オプションのグローバルな値だけをセットする (グローバルな値があるならば)。|:setglobal| と同樣に働く。
{expr1} の値はリスト |List| でなければならない。そのリストの最初の要素が {name1} に代入され、2 番目の要素が {name2} に代入される。以下同樣。 name の個數がリスト |List| の要素の個數に一致しなければならない。
前述のやうに各 name は ":let
" コマンドの要素の1つになることができる。例:
:let [s, item] = GetItem(s)
詳細: 最初に {expr1} が評價され、それから順番に代入が行はれる。{name2} が {name1} に依存するかどうかは問題になる。例:
:let x = [0, 1] :let i = 0 :let [i, x[i]] = [1, 2] :echo x
この結果は[0, 2]となる。
上と同樣だが、リスト |List| の各要素に對し連結・足し算・引き算を行ふ。
|:let-unpack| と同樣だが、リスト |List| の要素數が names の數より多くてもよい。餘つた要素のリストが {lastname} に代入される。要素の餘りがないとき {lastname} は空リストになる。例:
:let [a, b; rest] = ["aval", "bval", 3, 4]
上と同樣だが、リスト |List| の各要素に對して連結・足し算・引き算を行ふ。
內部變數 {var-name} を文字列 {endmarker} で圍まれたテキスト行を含む List に設定する。{endmarker} は空白を含んではならない。 {endmarker} は小文字で始めることができません。
最後の行は {endmarker} 文字列だけで終はり、他の文字は含まれない。{endmarker} の後の空白に氣をつけること!
"trim" がない場合は、テキスト行內の全ての空白文字は保持される。もし {endmarker} の前に "trim" が指定されてゐる場合、インデントが取り除かれるため以下を實行できる:
let text =<< trim END if ok echo 'done' endif END
結果: ["if ok", " echo ’done’", "endif"] マーカーは "let" のインデントと竝ばなければならず、最初の行のインデントは全てのテキスト行から取り除かれる。
具體例: 最初の空でないテキスト行の先頭のインデントと完全に一致する全ての先頭のインデントは入力行から削除される。
‘let
‘ の前の先頭のインデントと完全に一致する先頭のインデントはすべて {endmarker} を含む行から削除される。
Note:
スペースとタブの違ひが重要であることに注意すること。
{var-name} がまだ存在しない場合は作成される。他のコマンドを續けることはできないが、コメントを續けることはできる。
行の繼續が適用されないやうにするには、’cpoptions’ に ’C’ を追加することを檢討してください:
set cpo+=C let var =<< END \ leading backslash END set cpo-=C
例:
let var1 =<< END Sample text 1 Sample text 2 Sample text 3 END let data =<< trim DATA 1 2 3 4 5 6 7 8 DATA
變數 {var-name} の値を一覽表示する。變數の名前を複數指定することができる。以下の特別な名前が認識される:
g: | グローバル變數 |
b: | バッファローカル變數 |
w: | ウィンドウローカル變數 |
t: | タブページローカル變數 |
s: | スクリプトローカル變數 |
l: | 函數ローカル變數 |
v: | Vim の變數 |
全變數の値を一覽表示する。値の前に變數の型が示される:
<nothing> | 文字列 |
# | 數値 |
* | Funcref |
內部變數 {name} を削除する。複數の變數名を指定すると、それらが全て削除される。名前はリスト |List| や辭書 |Dictionary| の要素でもよい。
[!] をつけると存在しない變數に對するエラーメッセージを表示しない。 リスト |List| から 1 個以上の要素を削除することができる:
:unlet list[3] " 4番目の要素を削除 :unlet list[3:] " 4番目から最後までの要素を削除
辭書 |Dictionary| からは一度に 1 個の要素を削除することができる:
:unlet dict['two'] :unlet dict.two
グローバル變數とスクリプトローカル變數をクリーンアップするために特に便利である (これらはスクリプト終了時に檢出されない)。函數ローカルな函數は、その函數から拔けるときに自動的に削除される。
環境變數 {env-name} を削除する。1 つの :unlet
コマンドで {name} と ${env-name} を合はせることができる。變數が存在しない場合は ! がなくてもエラーメッセージを生じない。システムがもしも環境變數の削除をサポートしてゐないのなら、空にします。
|:let| に似てゐるが、加へて、値がセットされたあとに變數がロックされる。これは、ロックされた變數と同じで、|:let| のすぐ後に |:lockvar| を使ふことで變數をロックすることと同義である。したがつて:
:const x = 1
は、以下と同義である:
:let x = 1 :lockvar 1 x
これは、變數が變更されないことを確實にしたいときに便利である。 |:const| は變數の變更をすることができない:
:let x = 1 :const x = 2 " エラー!
Note:
環境變數、オプション値およびレジスタ値はロックできないため、ここでは使用できないことに注意。
もしも引數が與へられてゐないか、もしくは引數が {var-name} のみなら、|:let| と同じ擧動をします。
內部變數 {name} をロックする。ロックすると、それ以降變更ができなくなる(アンロックするまで)。 ロックされた變數を削除することはできる:
:lockvar v :let v = 'asdf' " 失敗! :unlet v
ロックされた變數を變更しようとするとエラーメッセージ
"E741: Value is locked: {name}"
が表示される。
もしも組み込み變數をロック・アンロックしようとすると、エラーメッセージ
"E940: Cannot lock or unlock variable {name}"
が表示される。
[depth] はリスト |List| や辭書 |Dictionary| をロックするときに意味がある。どれだけ深くロックするかを指定する:
[depth] の既定値は 2 であり、{name} がリスト |List| または辭書 |Dictionary| である場合、その値は變更できない。 深さを無限にするには [!] を使ひ、[depth] を省略する。しかしループを捕捉するために深さの最大値は 100 に設定されてゐる。
Note:
2 つの變數が同じリスト |List| を參照してゐる場合、片方の變數をロックすると、もう一方の變數を介してアクセスした場合もロックされてゐる。例:
:let l = [0, 1, 2, 3] :let cl = l :lockvar l :let cl[1] = 99 " 代入できない!これを囘避するにはリストのコピーを作るとよい。|deepcopy()| を參照。
內部變數 {name} をアンロックする。|:lockvar| の逆を行ふ。
{expr1} が非ゼロと評價された場合に、對應する ":else
" か ":endif
" までの命令を實行する。
バージョン 4.5 から 5.0 まで閒の Vim は、":if
" と ":endif
" の閒の全ての Ex コマンドは無視する。この 2 つのコマンドは將來の擴張性を、下位互換と同時に提供するためのものである。ネスティング (入れ子) が可能である。
Note:
":else
" や ":elseif
" は無視され、"else" 部分は一切實行されないことに注意。
あなたはこれを、舊バージョンとの互換性を保つたまま使用することができる:
:if version >= 500 : version-5-specific-commands :endif
しかしそれでも "endif" を見つけるために後續のコマンドをパースする必要がある。古い Vim で新しいコマンドを使ふと問題が起こることがある。例へば ":silent
" が ":substitute
" コマンドと認識されるなど。その場合には、":execute
" を使ふと問題を避けることができる:
:if version >= 600 : execute "silent 1,$delete" :endif
Note:
":append
" と ":insert
" コマンドは ":if" と ":endif" の閒では正しく動かない。
對應する ":if" ブロックが實行されなかつた場合には、これに對應する ":else" か ":endif" までのコマンドが實行される。
":else" ":if" の省略形。":endif" を付け加へる (入れ子にする) 手閒を省くことができる。
{expr1} が非ゼロとして評價される閒、":while" と ":endwhile" の閒のコマンドを繰り返し實行する。 ループの內側でエラーが生じた場合、endwhile の直後から實行が再開される。
例:
:let lnum = 1 :while lnum <= line("$") :call FixLine(lnum) :let lnum = lnum + 1 :endwhile
Note:
":append" や ":insert" コマンドは ":while" ループの內側では正しく動かない。
{object} の各要素に對し、":for" と ":endfor" の閒のコマンドを繰り返す。{object} はリスト |List| または |Blob| である。變數 {var} に各要素の値がセットされる。ループの內側のコマンドでエラーが檢出されたときは "endfor" の後から實行が繼續される。ループの內側で {object} を變更するとどの要素が使はれるかに影響を與へる。それを望まない場合はコピーを作ること:
:for item in copy(mylist)
{object} が |List| でコピーを作らない場合、Vim は現在の要素に對してコマンドを實行する前に、|List| の次の要素への參照を保存する。そのため副作用なしに現在の要素を削除することができる。それ以降の要素を變更すると、それが見つからなくなる。つまり以下の例は動作する (|List| を空にする非效率な方法):
for item in mylist call remove(mylist, 0) endfor
Note:
リスト |List| を竝べ替へる (例へば sort() や reverse() で) と豫期しない結果になることがある。
{object} が |Blob| の場合、Vim は常にコピーを作成して繰り返す。|List| とは異なり、|Blob| を變更しても繰り返しには影響しない。
上の ":for" と同樣だが、{listlist} の各要素がリストでなければならない點が異なる。そのリストの各要素が {var1}, {var2} などに代入される。例:
:for [lnum, col] in [[1, 3], [2, 5], [3, 8]] :echo getline(lnum)[col] :endfor
":while" または ":for" ループの內側で使はれたときは、そのループの開始位置まで戾る。
ループの內側の |:try| と |:finally| の閒で使はれた場合、|:finally| から |:endtry| までの閒のコマンドがまず實行される。
ループの內側で ":try" がネストしてゐる場合、全ての ":try" に對してこのプロセスが適用される。最も外側の ":endtry" の後ループの開始位置まで戾る。
":while" または ":for" ループの內側で使はれたときは、對應する ":endwhile" または ":endfor" の後のコマンドまでスキップする。
ループの內側の |:try| と |:finally| の閒で使はれた場合、":finally" から |:endtry| までの閒のコマンドがまず實行される。
ループの內側で ":try" がネストしてゐる場合、全ての ":try" に對してこのプロセスが適用される。最も外側の ":endtry" の後ループの後までジャンプする。
":try" と ":endtry" の閒のコマンド (":source" コマンド、函數呼び出し、自動コマンド實行を含めた全てのコマンド實行) のエラー制禦を變更する。
エラーや割り込みが檢出された場合、後に |:finally| コマンドがあるならば、":finally" の後から實行が繼續される。さうでなければ、または ":endtry" に達した後は次の動的に圍んでゐる ":try" に對應する ":finally" などが探される。その後スクリプトは實行を停止する。(函數定義に引數 "abort" がついてゐるかどうかは關係ない)
例:
:try | edit too much | finally | echo "cleanup" | endtry :echo "impossible" " 實行されない。上のコマンドによりスクリプトは停止する。
さらに、(動的に) ":try" と ":endtry" の內側にあるエラーや割り込みは例外に變換される。そしてそれは |:throw| コマンドによつて投げたときと同樣に捕捉できる (|:catch| を參照)。この場合はスクリプトの實行は停止しない。
割り込み例外には "Vim:Interrupt" といふ値が使はれる。Vim コマンドにおけるエラーは "Vim({command}):{errmsg}"といふ形式の値に變換される。その他のエラーは "Vim:{errmsg}" といふ形式のエラーに變換される。ここで {command} はコマンドの完全な名前であり、{errmsg} はその例外が捕捉されなかつた場合に表示されるメッセージで、常にエラー番號で始まる。
例:
:try | sleep 100 | catch /^Vim:Interrupt$/ | endtry :try | edit | catch /^Vim(edit):E\d\+/ | echo "error" | endtry
{pattern} にマッチする例外が發生し、より前の |:catch| で捕捉されなかつた場合、このコマンドから次の |:catch|, |:finally|, |:endtry| までのコマンドが實行される。そのやうな例外が發生しなかつた場合、そのコマンドはスキップされる。
{pattern} が省略された場合は全てのエラーが捕捉される。
例:
:catch /^Vim:Interrupt$/ " 割り込み (CTRL-C) を捕捉 :catch /^Vim\%((\a\+)\)\=:E/ " 全 Vim エラーを捕捉 :catch /^Vim\%((\a\+)\)\=:/ " 例外と割り込みを捕捉 :catch /^Vim(write):/ " :write における全エラーを捕捉 :catch /^Vim\%((\a\+)\)\=:E123:/ " エラー E123 を捕捉 :catch /my-exception/ " ユーザー定義例外を捕捉 :catch /.*/ " 全てを捕捉 :catch " /.*/ と同じ
{pattern} を圍むのに/以外の文字を使ふことができる。ただしその文字は特別な意味 (例: ’|’ や ’"’ など)を持つてゐてはならず、{pattern} の內側に現れてはならない。
例外の情報は |v:exception| で得られる。|throw-variables| も參照。
Note:
エラーメッセージの本文によつて ":catch" することは確實ではない。メッセージはロケールによつて異なるからである。
|:try| と ":finally" の閒を拔ける前に必ず、このコマンドから對應する |:endtry| の閒のコマンドが實行される。つまり正常に進んだ場合、|:continue|, |:break|, |:finish|, |:return| を使つた場合、エラー・割り込み・例外が發生した場合 (|:throw| を參照) のいづれの場合でも。
{expr1} を評價し、例外として投げる。|:try| と |:catch| の閒で ":throw" が使はれた場合、{expr1} にマッチする最初の |:catch| までのコマンドはスキップされる。 そのやうな ":catch" がない場合、または ":catch" と |:finally| の閒で ":throw" が使はれた場合、":finally" から |:endtry| までのコマンドが實行される。":throw" が ":finally" の後で實行された場合、":endtry" までのコマンドはスキップされる。
":endtry" において、動的に圍んでゐる次の ":try" (これは函數呼び出しやスクリプト source も含めて探される) から對應する ":catch" までに對しこのプロセスが再び適用される。例外が捕捉されない場合、コマンドの處理は終了する。
例:
:try | throw "oops" | catch /^oo/ | echo "caught" | endtry
Note:
エラーによつて行のパースがスキップされ、"|" によるコマンド區切りが解釋されないやうな場合は "catch" は行を分けて書く必要がある。
各 {expr1} をスペースで區切つて表示する。最初の {expr1} の表示は、常に新しい行から始まる。|:comment| も參照。
改行が必要な場合 "\n" を使用する。カーソルを第 1 桁に持つて行くには "\r" を使用する。色强調を行ふにはコマンド |:echohl| を使用する。コメント文を同じ行に續けることはできない。
例:
:echo "the value of 'shell' is" &shell
このコマンドの後、再描畫を行ふと表示したメッセージが消えてしまふ。Vim は一聯のコマンドが完了するまで再描畫を後回しにするため、この現象は頻繁に發生する。例へば、":echo" より前に實行したコマンドが後で再描畫を引き起こし、メッセージが消えてしまふといふことがある (再描畫はしばしばユーザーが何か入力するまで後回しにされる)。この問題を避けるには、|:redraw| を使つて强制的に再描畫すること。例:
:new | redraw | echo "there is a new window"
改行を付けずに、{expr1} を表示する。|:comment| も參照。色强調を行ふにはコマンド |:echohl| を使用する。コメント文を同じ行に續けることはできない。
例:
:echon "the value of 'shell' is " &shell
Note:
Vim コマンドの ":echo" と、外部のシェルコマンドである ":!echo" との違ひに注意::!echo % --> filename":!" の引數は展開される。|:_%| を參照。
:!echo "%" --> filename or "filename"前の例のやうに働く。ダブルクォートが表示されるかどうかは、使用してゐる ’shell’ に依存する。
:echo % --> 何も表示されない’%’ は式として不當な文字である。
:echo "%" --> %單に文字 ’%’ を表示する。
:echo expand("%") --> filename’%’ を展開するために函數 expand() を呼び出してゐる。
次の |:echo|, |:echon|, |:echomsg| コマンドから、ハイライトグループ {name} を適用する。|input()| のプロンプトに對しても適用される。例:
:echohl WarningMsg | echo "Don't panic!" | echohl None
使用した後にはグループを "None" に戾すことを忘れないやうに。さもないとそれ以降の echo の表示全てがハイライトされてしまふ。
式を本當のメッセージとして表示し、そのメッセージをメッセージ履歷 |message-history| に保存する。|:echo| コマンド同樣に、引數の閒にスペースが插入される。しかし印字不可能な文字は解釋されずに表示される。
|:echo| とはかなり異なり、むしろ |:execute| に近い方法で解析がされる。なんらかを表示する前に、まづ最初に全ての式が數値または文字列に評價されない場合は、string()
を使用して文字列に變換する。
强調を行ふには |:echohl| コマンドを使ふ。
例:
:echomsg "It's a Zizzer Zazzer Zuzz, as you can plainly see."
畫面を再描畫したときメッセージが消去されてしまふのを避ける方法については |:echo-redraw| を參照。
式をエラーメッセージとして表示し、そのメッセージをメッセージ履歷 |message-history| に保存する。スクリプトや函數の中で使用されたときは行番號が付け加へられる。 |:echomsg| コマンドと同樣に引數の閒にスペースが插入される。try 條件文の中で使用されたときは、このメッセージがエラー例外として投げられる。(|try-echoerr| を參照)
例:
:echoerr "This script just failed!"
單にメッセージを强調させたい場合には |:echohl| を使ふこと。ビープを鳴らしたいときには次のやうにする:
:exe "normal \<Esc>"
{expr} を評價し結果を破毀します。例:
:eval Getlist()->Filter()->append('$')
結果の値は使用されないため、式には副作用があると想定されます。この例では、‘append()
‘ 呼び出しはテキスト付きリストをバッファに追加します。これは ‘:call
‘ に似てゐますが、どの式でも動作します。
このコマンドは ‘:ev
‘ や ‘:eva
‘ に短縮できますが、これらは認識しにくいため、使用するべきではありません。
{expr1} の評價結果の文字列を Ex コマンドとして實行する。 複數の引數は連結され、閒にスペースが插入される。餘計なスペースを入れたくない場合は "." オペレータを使つて文字列を連結すること。
{expr1} は處理されたコマンドとして扱はれ、コマンドライン編輯用のキーは認識されない。コメント文を同じ行に續けることはできない。
例:
:execute "buffer" nextbuf :execute "normal" count . "w"
":execute" は ’|’ を受けつけないコマンドに、次のコマンドを續けて實行させるのにも使用できる。例:
:execute '!ls' | echo "theend"
{譯注: 普通の使ひ方では ":!ls" の後には ’|’ を使つて、Ex コマンドを續けることはできない}
また ":execute" は、Vim script 內でコマンド ":normal" の引數に制禦文字を書くことを避けるために役に立つ。
:execute "normal ixxx\<Esc>"
これで <Esc> 文字を表す。|expr-string| を參照。
ファイル名の中の特殊文字を正しくエスケープするやうに注意すること。Vim コマンドに與へるファイル名をエスケープするには |fnameescape()| を使ふ。|:!| コマンドに與へるときは |shellescape()| を使ふ。
例:
:execute "e " . fnameescape(filename) :execute "!ls " . shellescape(filename, 1)
Note:
execute に渡す文字列はいかなるコマンドでも構はないが、"if" や "while"、"for" の開始や終了は常に機能するとは限らない。なぜならコマンドをスキップするときには ":execute" は解釋されないので Vim はブロックの開始や終了を認識することができない。"break" と "continue" も ":execute" で實行すべきではない。 次の例は機能しない。":execute" は評價されず、Vim は "while" を認識しないので、":endwhile" を見つけたときにエラーが發生する::if 0 : execute 'while i > 5' : echo "test" : endwhile :endif文字列の中に完全な "while" や "if" コマンドが含まれることが求められる:
:execute 'while i < 5 | echo i | let i = i + 1 | endwhile'
":execute" や ":echo" そして ":echon" は、同一行に直接コメントを續けることはできない。何故ならそれらのコマンドにとつて ’"’ は文字列の始まりに見えてしまふからである。しかし ’|’ の後にコメントを書くことは可能である。例:
:echo "foo" | "this is a comment
Vim script 言語は例外處理機構を備へてゐる。この節では例外處理をどのやうに行ふかについて說明する。
例外はエラー發生時や割り込み發生時に Vim によつて投げられる。それについては |catch-errors| と |catch-interrupt| を參照。ユーザーはコマンド |:throw| によつて明示的に例外を投げることができる。|throw-catch| を參照。
例外を捕捉したり、例外を引き金として後始末のコードを實行することができる。try 條件文を使ふ事によつて catch 節 (これが例外を捕捉する) や finally 節 (後始末のために實行される) を指定する事ができる。
try 條件文はコマンド |:try| によつて始まり、對應するコマンド |:endtry| によつて終了する。その閒でコマンド |:catch| により catch 節を定めたり、コマンド |:finally| によつて finally 節を定めることができる。catch 節は 1 個もなかつたり、複數個あつてもよい。しかし finally 節は 1 個までしか持てない。finally 節の後に catch 節があつてはならない。catch 節と finally 節の前の部分は try ブロックと呼ばれる。
:try : ... : ... try ブロック : ... :catch /{pattern}/ : ... : ... catch 節 : ... :catch /{pattern}/ : ... : ... catch 節 : ... :finally : ... : ... finally 節 : ... :endtry
try 條件文により、コードから發生する例外を監視したり、適切な對應を取ることができる。try ブロック內で發生した例外は捕捉される。try ブロックと catch 節內で發生した例外は捕捉され、後始末が行はれる。
try ブロックの實行中に例外が發生しなかつた場合は、制禦は (もしあれば) finally 節に移動する。その實行後に、スクリプトは ":endtry" の後の行から實行を繼續する。
try ブロックの實行中に例外が發生した場合は、try ブロックの殘りの行はスキップされる。例外はコマンド ":catch" の引數として指定された正規表現に照合される。最初にマッチした ":catch" の後の catch 節が實行される。他の catch 節は實行されない。catch 節は次に ":catch", ":finally", ":endtry" が現れたところで終了する (どれでもよい)。
":endtry" に達すると、スクリプトは次の行から通常通り實行が續けられる。發生した例外が、コマンド ":catch" で指定されたどの正規表現にもマッチしないとき、その例外はその try 條件文で捕捉されず、どの catch 節も實行されない。finally 節があるならば實行される。finally 節の實行中は例外は後回しにされ、":endtry" のときに實行される。そして ":endtry" の後のコマンドは實行されず、例外は他のどこかで捕捉される。|try-nesting| を參照。
catch 節の實行中に新たな例外が發生した場合は、その catch 節の殘りの行は實行されない。新しい例外は同じtry條件文のどの ":catch" コマンドの正規表現にも照合されず、どの catch 節も實行されない。しかし finally 節があるならばそこが實行され、その閒その例外は保留される。":endtry" の後のコマンドは實行されない。新しい例外は他のどこかで捕捉される。|try-nesting| を參照。
finally 節の實行中に例外が發生した場合は、その finally 節の殘りの行は實行されない。try ブロックやその catch 節のどこかで例外が發生してからその finally 節が實行されてゐた場合は、元の (保留されてゐた) 例外は破毀される。":endtry" の後のコマンドは實行されない。finally 節で發生した例外は傳播し、他のどこかで捕捉される。|try-nesting| を參照。
完全な try 條件文を圍む ":while" ループ內で、try ブロックや catch 節において ":break" や ":continue" が實行されたときも finally 節が實行される。また、函數の中や source されたスクリプト中で、try ブロックや try 條件文の catch 節において ":return" や ":finish" が實行されたときも finally 節が實行される。finally 節の實行中は ":break", ":continue", ":return", ":finish" は保留され、":endtry" に達したとき再開される。しかしこれらは、その finally 節內で例外が發生したときは破毀される。
完全な try 條件節を圍む ":while" ループ內での ":break" や ":continue"、または finally 節內で ":return" や ":finish" に出會つたときは、finally 節の殘りはスキップされ、通常通り ":break", "continue", ":return", "finish" が實行される。もしその finally 節の前に、try ブロックや catch 節內で例外が發生したり、":break", ":continue", ":return", ":finally" が行はれてゐた場合は、それらの保留されてゐた例外やコマンドは破毀される。
例として |throw-catch| と |try-finally| を參照。
try 條件文は任意にネストされられる。つまり、try 條件文の try ブロック・catch 節・finally 節のなかに別の完全な try 條件文を書くことができる。內側の try 條件文が try ブロックで發生した例外を捕捉しなかつたときや、catch 節・finally 節で新たな例外が發生したときは、外側の try 條件文がそのルールにしたがつて例外を捕捉する。內側の try 條件文が外側の條件文の try ブロックの中にある場合は catch 節が判定されるが、さうでない場合は finally 節のみが實行される。これはネストの仕方には關係ない。つまり、內側の try 條件文が直接外側の try 條件文に含まれてゐてもよいし、外側がスクリプトを source したり、內側の try 條件文を含む函數を呼び出してゐてもよい。
有效な try 條件文のどれも例外を捕捉しなかつたときは、それらの finally 節が實行される。その後、スクリプトの實行は停止する。":throw" コマンドにより明示的に投げられた例外が捕捉されなかつた場合は、エラーメッセージが表示される。Vim によつて暗默的に投げられたエラーや割り込み例外については、通常通りエラーメッセージや割り込みメッセージが表示される。
例として |throw-catch| を參照。
例外處理のコードはトリッキーになりがちである。何が起こつてゐるか知りたいときはスクリプトファイルを source するときに ’verbose’ を 13 に設定するか、コマンド修飾子 ":13verbose" を使ふ。すると例外が發生・破毀・捕捉・完了したときには表示されるやうになる。冗長度のレベルを 14 以上にすると、finally 節において保留されてゐるものも表示されるやうになる。この情報はデバッグモードでも表示される (|debug-scripts| を參照)。
任意の數値や文字列を例外として投げることができる。コマンド |:throw| を使ひ、投げられる値を引數に渡す:
:throw 4711 :throw "string"
式を引數に指定することもできる。まづその式が評價され、その結果が投げられる:
:throw 4705 + strlen("string") :throw strpart("strings", 0, 6)
":throw" コマンドの引數を評價してゐる最中に例外が發生することもありうる。その例外が捕捉されない限り、その式の評價は破毀される。よつて、その ":throw" コマンドは例外を投げることができない。
例:
:function! Foo(arg) : try : throw a:arg : catch /foo/ : endtry : return 1 :endfunction : :function! Bar() : echo "in Bar" : return 4710 :endfunction : :throw Foo("arrgh") + Bar()
この例を實行すると "arrgh" が投げられ、Bar() が實行されないため "in Bar" は表示されない。しかし次のやうにすると
:throw Foo("foo") + Bar()
"in Bar" を表示し、4711 を投げる。
式を引數として受け取る他のコマンドでも、式の評價中に捕捉されない例外が發生するとコマンドが破毀される。そして例外はそのコマンドを呼び出した位置へ傳播する。
例:
:if Foo("arrgh") : echo "then" :else : echo "else" :endif
この例で、"then" と "else" のどちらも表示されない。
例外は、1 個以上の |:catch| コマンドを持つ try 條件文で捕捉することができる。これについては |try-conditionals| を參照。各 ":catch" コマンドで捕捉される値は、引數にて正規表現で指定できる。マッチする例外が捕捉されると、その後に續く catch 節が實行される。
例:
:function! Foo(value) : try : throw a:value : catch /^\d\+$/ : echo "Number thrown" : catch /.*/ : echo "String thrown" : endtry :endfunction : :call Foo(0x1267) :call Foo('string')
最初の Foo() の呼び出しは "Number thrown" を表示し、2 番目の呼び出しは "String thrown" を表示する。例外は、順番に ":catch" コマンドに照合される。最初にマッチした catch 節だけが實行される。そのため、より限定的な ":catch" を先に書くべきである。次の順序で書くと無意味になつてしまふ:
: catch /.*/ : echo "String thrown" : catch /^\d\+$/ : echo "Number thrown"
最初の ":catch" は常にマッチするため、2 番目の catch 節は決して實行されない。
一般的な正規表現により例外を捕捉した場合、その正確な値には變數 |v:exception| によりアクセスできる:
: catch /^\d\+$/ : echo "Number thrown. Value is" v:exception
また、どこで例外が發生したかも知りたいだらう。これは |v:throwpoint| に保持されてゐる。
Note:
"v:exception" と "v:throwpoint" は最も直近に捕捉された例外に對し、それが終了するまで有效である。
例:
:function! Caught() : if v:exception != "" : echo 'Caught "' . v:exception . '" in ' . v:throwpoint : else : echo 'Nothing caught' : endif :endfunction : :function! Foo() : try : try : try : throw 4711 : finally : call Caught() : endtry : catch /.*/ : call Caught() : throw "oops" : endtry : catch /.*/ : call Caught() : finally : call Caught() : endtry :endfunction : :call Foo()
上の例は次のやうに表示する
Nothing caught Caught "4711" in function Foo, line 4 Caught "oops" in function Foo, line 10 Nothing caught
實用的な例: 次のコマンド ":LineNumber" は、それが呼び出されたスクリプトや函數中の行番號を表示する:
:function! LineNumber() : return substitute(v:throwpoint, '.*\D\(\d\+\).*', '\1', "") :endfunction :command! LineNumber try | throw "" | catch | echo LineNumber() | endtry
try 條件文によつて捕捉されない例外はそれを圍む try 條件文によつて捕捉することができる:
:try : try : throw "foo" : catch /foobar/ : echo "foobar" : finally : echo "inner finally" : endtry :catch /foo/ : echo "foo" :endtry
內側の try 條件文はこの例外を捕捉せず、finally 節が實行されるだけである。そしてこの例外は外側の try 條件文で捕捉される。この例を實行すると "inner finally" と "foo" が表示される。
例外を捕捉した後、新しい例外を投げて他の catch 節で捕捉させることができる:
:function! Foo() : throw "foo" :endfunction : :function! Bar() : try : call Foo() : catch /foo/ : echo "Caught foo, throw bar" : throw "bar" : endtry :endfunction : :try : call Bar() :catch /.*/ : echo "Caught" v:exception :endtry
これを實行すると "Caught foo, throw bar" と "Caught bar" が表示される。
Vim script 言語には本物の rethrow はないが、代はりに "v:exception" を使ふことができる:
:function! Bar() : try : call Foo() : catch /.*/ : echo "Rethrow" v:exception : throw v:exception : endtry :endfunction
Note:
この方法は Vim のエラーや割り込み例外を "rethrow" するためには使へない。Vim の內部例外を僞裝することはできないからである。それを行はうとするとエラー例外が發生する。その狀況を表す自分自身の例外を投げるべきである。獨自のエラー例外値を含む Vim のエラー例外を發生させたい場合には、コマンド |:echoerr| を使ふことができる::try : try : asdf : catch /.*/ : echoerr v:exception : endtry :catch /.*/ : echo v:exception :endtryこのコードを實行すると次が表示される
Vim(echoerr):Vim:E492: Not an editor command: asdf
しばしばスクリプト中でグローバルな設定を變更し、最後に元の設定を復元することがある。しかしユーザーが CTRL-C を押してスクリプトを中斷すると、設定が一貫しない狀態になつてしまふ。スクリプトの開發段階においても、エラーが發生したり、明示的に例外を投げたが捕捉されなかつた場合に、同じことが起こりうる。この問題は、try 條件文を使つて finally 節で設定を復元することで解決できる。finally 節は、通常の制禦フロー・エラー時・明示的な ":throw" 時・割り込み時に實行されることが保證されてゐる。
Note:
try 條件文の內側で發生したエラーと割り込みは例外に變換される。これらが捕捉されなかつたときには、finally 節の實行の後にスクリプトの實行が停止する。
例: >
:try : let s:saved_ts = &ts : set ts=17 : : " Do the hard work here. : :finally : let &ts = s:saved_ts : unlet s:saved_ts :endtry
函數やスクリプトの一部でグローバルな設定を變更し、その函數・スクリプトの失敗時・通常終了時に設定を復元する必要があるときは、必ず局所的にこの手法を使ふべきである。
":continue", ":break", ":return", ":finish" などによつて try ブロックや catch 節を拔けるときも後始末處理が働く。
例:
:let first = 1 :while 1 : try : if first : echo "first" : let first = 0 : continue : else : throw "second" : endif : catch /.*/ : echo v:exception : break : finally : echo "cleanup" : endtry : echo "still in while" :endwhile :echo "end"
上の例を實行すると "first", "cleanup", "second", "cleanup", "end" と表示される:
:function! Foo() : try : return 4711 : finally : echo "cleanup\n" : endtry : echo "Foo still active" :endfunction : :echo Foo() "returned by Foo"
上の例を實行すると "cleanup" と "4711 returned by Foo" が表示される。finally 節に餘計な ":return" を書く必要はない。(さうすると戾り値が上書きされてしまふ)
finally 節で ":continue", ":break", ":return", ":finish", ":throw" を使ふことは可能である。しかしさうすると try 條件文の後始末を破毀してしまふことになるので推奬されてゐない。しかし、當然、finally 節の中で割り込みとエラー例外が發生することはありうる。
finally 節におけるエラーにより、割り込みが正しく動作しなくなる例:
:try : try : echo "Press CTRL-C for interrupt" : while 1 : endwhile : finally : unlet novar : endtry :catch /novar/ :endtry :echo "Script still running" :sleep 1
失敗する可能性のあるコマンドを finally 節に書く必要があるときは、それらのコマンドにより發生するエラーを捕捉したり無視したりすることについて考へること。|catch-errors| と |ignore-errors| を參照。
特定のエラーを捕捉するには、監視したいコードを try ブロックに入れ、そのエラーメッセージに對する catch 節を加へるだけでよい。try 條件節が存在すると全てのエラーは例外に變換される。そのため、メッセージはまつたく表示されず、|v:errmsg| は設定されない。":catch" コマンドに對する正しい正規表現を作るには、エラー例外のフォーマットがどのやうなものか知つてゐなければならない。
エラー例外は次のフォーマットを持つ:
Vim({cmdname}):{errmsg}
または
Vim:{errmsg}
{cmdname} は失敗したコマンド名である。2番目の形式はコマンド名が不明のとき用ゐられる。{errmsg} は、そのエラーがtry條件文の外で發生したときに通常表示されるエラーメッセージである。エラーメッセージは必ず大文字の "E" で始まり、その後に 2, 3 桁のエラー番號、コロン、スペースが續く。
例:
次のコマンドを實行すると、
:unlet novar
通常次のエラーメッセージが表示される
E108: No such variable: "novar"
これは try 條件文の中では例外に變換される
Vim(unlet):E108: No such variable: "novar"
次のコマンドを實行すると、
:dwim
通常次のエラーメッセージが表示される
E492: Not an editor command: dwim
これは try 條件文の中では例外に變換される
Vim:E492: Not an editor command: dwim
":unlet
" の全てのエラーを次によつて捕捉できる
:catch /^Vim(unlet):/
また、全てのミススペルされたコマンドのエラーは次で捕捉できる
:catch /^Vim:E492:/
複數のコマンドによつて同一のエラーメッセージが表示される場合もある:
:function nofunc
と
:delfunction nofunc
は兩方とも次のエラーメッセージを表示する。
E128: Function name must start with a capital: nofunc
これは try 條件節の中では例外に變換される。それぞれ
Vim(function):E128: Function name must start with a capital: nofunc
または
Vim(delfunction):E128: Function name must start with a capital: nofunc
となる。どのコマンドによつて發生したかに關係なくこのエラーを捕捉するには、次の正規表現を使ふ:
:catch /^Vim(\a\+):E128:/
複數のエラーメッセージを表示するコマンドもある:
:let x = novar
は次のエラーメッセージを表示する:
E121: Undefined variable: novar E15: Invalid expression: novar
最初のエラーメッセージのみが例外の値として使はれる。それが最も限定的なメッセージだからである (|except-several-errors| を參照)。これは次のやうにして捕捉できる
:catch /^Vim(\a\+):E121:/
"nofunc" といふ名前に關係したエラー全てを捕捉するには
:catch /\<nofunc\>/
コマンド ":write
" と ":read
" による全ての Vim エラーを捕捉するには
:catch /^Vim(\(write\|read\)):E\d\+:/
全ての Vim エラーを捕捉するには次の正規表現を使ふ
:catch /^Vim\((\a\+)\)\=:E\d\+:/
Note:
エラーメッセージの本文によつて捕捉しようとしてはならない:catch /No such variable/かうすると英語の環境では動作するが、コマンド |:language| により他の言語を使つてゐるユーザーの環境では動作しなくなる。しかし、コメントとしてメッセージテキストを引用することは役に立つ:
:catch /^Vim(\a\+):E108:/ " No such variable
特定のコマンドで發生したエラーを捕捉すれば、エラーを無視することができる:
:try : write :catch :endtry
しかしこの單純な形は使はないよう强く推奬されてゐる。なぜなら、これはあなたが望むより多くの例外を捕捉してしまふからである。":write
" コマンドを使ふと自動コマンドが實行され、書き込みとは關係ないエラーが發生する可能性がある。例へば:
:au BufWritePre * unlet novar
このやうなエラーの中には、スクリプトの作者が責任を負はないものもある: つまり、スクリプトのユーザーがそのやうな自動コマンドを定義してゐる場合である。その場合、上の例のやうにすると、ユーザーからエラーを隱してしまふことになる。エラーを無視するには、次のやうにした方がよい
:try : write :catch /^Vim(write):/ :endtry
これは書き込みエラーだけを捕捉する。つまり、あなたが意圖的に無視したいエラーだけである。
自動コマンドを發生させないやうな 1 つのコマンドに對しては、":silent!" を使へばエラーを例外に變換すること自體を抑制させることができる:
:silent! nunmap k
これは try 條件文が有效なときも機能する。
有效な try 條件文內では、割り込み (CTRL-C) は例外 "Vim:Interrupt" に變換される。これを他の例外と同樣に捕捉することができる。するとそのスクリプトは停止しない。
例:
:function! TASK1() : sleep 10 :endfunction :function! TASK2() : sleep 20 :endfunction :while 1 : let command = input("Type a command: ") : try : if command == "" : continue : elseif command == "END" : break : elseif command == "TASK1" : call TASK1() : elseif command == "TASK2" : call TASK2() : else : echo "\nIllegal command:" command : continue : endif : catch /^Vim:Interrupt$/ : echo "\nCommand interrupted" : " 例外捕捉。次のプロンプトから繼續する。 : endtry :endwhile
ここで CTRL-C を押すとタスクに割り込むことができる。その後スクリプトは新しいコマンドを要求する。プロンプトで CTRL-C を押すとスクリプトが終了する。
スクリプト中の特定の行で CTRL-C が押されたとき何が起こるかをテストするにはデバッグモードを使ひ、その行の上で |>quit| や |>interrupt| コマンドを使ふ。|debug-scripts| を參照。
次のコマンド
:catch /.*/ :catch // :catch
は全てをエラー例外・割り込み例外・|:throw| コマンドにより明示的に投げられた例外の捕捉する。これは、スクリプトのトップレベルで、豫期しないことを捕捉するために役に立つ。
例:
:try : : " ここで難しいことをする : :catch /MyException/ : : " 既知の問題を制禦する : :catch /^Vim:Interrupt$/ : echo "Script interrupted" :catch /.*/ : echo "Internal error (" . v:exception . ")" : echo " - occurred at " . v:throwpoint :endtry :" スクリプトの終はり
Note:
全てを捕捉すると、期待してゐた以上のものを捕捉してしまふかもしれない。それゆゑ、":catch
" コマンドの引數に正規表現を指定することにより、自分が本當に制禦できる問題だけを捕捉することが强く推奬されてゐる。全てを捕捉してしまふと、CTRL-C を押してスクリプトを中斷することがほぼ不可能になつてしまふことがある。その例:
:while 1 : try : sleep 1 : catch : endtry :endwhile
自動コマンドの實行中に例外を使ふこともできる。例:
:autocmd User x try :autocmd User x throw "Oops!" :autocmd User x catch :autocmd User x echo v:exception :autocmd User x endtry :autocmd User x throw "Arrgh!" :autocmd User x echo "Should not be displayed" : :try : doautocmd User x :catch : echo v:exception :endtry
上の例を實行すると "Oops!" と "Arrgh!" が表示される。
いくつかのコマンドでは、それ自身が實行される前に自動コマンドが實行される。例外が發生し、それが一聯の自動コマンドの中で捕捉されない場合、一聯の自動コマンドと、その引き金となつたコマンドは破毀され、例外がそのコマンドを呼んだ位置へ傳播する。
例:
:autocmd BufWritePre * throw "FAIL" :autocmd BufWritePre * echo "Should not be displayed" : :try : write :catch : echo "Caught:" v:exception "from" v:throwpoint :endtry
ここで ":write
" コマンドは現在編輯してゐるファイルを書き込まない (’modified’ を確認すればわかる)。BufWritePre の自動コマンドで發生した例外により、":write
" が破毀されたためである。そしてその例外は捕捉され、次を表示する:
Caught: FAIL from BufWrite Auto commands for "*"
いくつかのコマンドでは、それ自身が實行された後で自動コマンドが實行される。引き金となつたコマンド自身が失敗して、それが有效な try 條件文の內側にあつた場合、自動コマンドはスキップされ、エラー例外が發生する。その例外は、コマンドを呼んだ位置で捕捉することができる。
例:
:autocmd BufWritePost * echo "File successfully written!" : :try : write /i/m/p/o/s/s/i/b/l/e :catch : echo v:exception :endtry
この例は次を表示する:
Vim(write):E212: Can’t open file for writing (/i/m/p/o/s/s/i/b/l/e)
引き金となつたコマンドが失敗したときでさへも自動コマンドを實行したいといふ場合は、catch 節の中でそのイベントを引き起こすことできる。
例:
:autocmd BufWritePre * set noreadonly :autocmd BufWritePost * set readonly : :try : write /i/m/p/o/s/s/i/b/l/e :catch : doautocmd BufWritePost /i/m/p/o/s/s/i/b/l/e :endtry
":silent!
" を使ふこともできる:
:let x = "ok" :let v:errmsg = "" :autocmd BufWritePost * if v:errmsg != "" :autocmd BufWritePost * let x = "after fail" :autocmd BufWritePost * endif :try : silent! write /i/m/p/o/s/s/i/b/l/e :catch :endtry :echo x
上の例は "after fail" を表示する。
引き金となつたコマンドが失敗しなかつた場合、自動コマンドから發生した例外は、元のコマンドを呼んだ位置から捕捉できる:
:autocmd BufWritePost * throw ":-(" :autocmd BufWritePost * echo "Should not be displayed" : :try : write :catch : echo v:exception :endtry
いくつかのコマンドでは、通常の處理を一聯の自動コマンドで置き換へることができる。そのコマンド列で發生した例外は元のコマンドの呼び出し位置で捕捉できる。
例: ":write
" コマンドでは、例外が發生したとき、呼び出し側は實際にファイルが書き込まれたのかどうかを知ることができない。これを敎へる必要があるときは、なんらかの手段を使はねばならない。
:if !exists("cnt") : let cnt = 0 : : autocmd BufWriteCmd * if &modified : autocmd BufWriteCmd * let cnt = cnt + 1 : autocmd BufWriteCmd * if cnt % 3 == 2 : autocmd BufWriteCmd * throw "BufWriteCmdError" : autocmd BufWriteCmd * endif : autocmd BufWriteCmd * write | set nomodified : autocmd BufWriteCmd * if cnt % 3 == 0 : autocmd BufWriteCmd * throw "BufWriteCmdError" : autocmd BufWriteCmd * endif : autocmd BufWriteCmd * echo "File successfully written!" : autocmd BufWriteCmd * endif :endif : :try : write :catch /^BufWriteCmdError$/ : if &modified : echo "Error on writing (file contents not changed)" : else : echo "Error after writing" : endif :catch /^Vim(write):/ : echo "Error on writing" :endtry
バッファに變更を行つた後でこのスクリプトを數回 source すると、1 囘目は次のやうに表示される
File successfully written!
2 囘目は
Error on writing (file contents not changed)
3 囘目は
Error after writing
以下同樣。
異なるイベントに對する自動コマンドにわたつて try 條件文を展開することはできない。以下のコードは不正である:
:autocmd BufWritePre * try : :autocmd BufWritePost * catch :autocmd BufWritePost * echo v:exception :autocmd BufWritePost * endtry : :write
プログラミング言語の中には例外クラスを階層化したり、例外クラスのオブジェクトに付加的な情報を渡すことができるものがある。これと似たことを Vim でもできる。
階層構造を持つた例外を投げるには、各部分をコロンで區切つた完全なクラス名を投げればよい。例へば、數學ライブラリ內でオーバーフローが發生したときに "EXCEPT:MATHERR:OVERFLOW" を投げる。
例外クラスに付加的な情報を與へたいときは、それを括弧の中に書く。例へば、"myfile" の書き込み中にエラーが發生したときに文字列 "EXCEPT:IO:WRITEERR(myfile)" を投げる。
":catch
" コマンドにおいて適切な正規表現を使へば、階層の基底クラスや派生クラスを捕捉できる。括弧の中の付加情報は、":substitute
" コマンドを使つて |v:exception| から切り出すことができる。
例:
:function! CheckRange(a, func) : if a:a < 0 : throw "EXCEPT:MATHERR:RANGE(" . a:func . ")" : endif :endfunction : :function! Add(a, b) : call CheckRange(a:a, "Add") : call CheckRange(a:b, "Add") : let c = a:a + a:b : if c < 0 : throw "EXCEPT:MATHERR:OVERFLOW" : endif : return c :endfunction : :function! Div(a, b) : call CheckRange(a:a, "Div") : call CheckRange(a:b, "Div") : if (a:b == 0) : throw "EXCEPT:MATHERR:ZERODIV" : endif : return a:a / a:b :endfunction : :function! Write(file) : try : execute "write" fnameescape(a:file) : catch /^Vim(write):/ : throw "EXCEPT:IO(" . getcwd() . ", " . a:file . "):WRITEERR" : endtry :endfunction : :try : : " 計算やI/Oを行ふ : :catch /^EXCEPT:MATHERR:RANGE/ : let function = substitute(v:exception, '.*(\(\a\+\)).*', '\1', "") : echo "Range error in" function : :catch /^EXCEPT:MATHERR/ " catches OVERFLOW and ZERODIV : echo "Math error" : :catch /^EXCEPT:IO/ : let dir = substitute(v:exception, '.*(\(.\+\),\s*.\+).*', '\1', "") : let file = substitute(v:exception, '.*(.\+,\s*\(.\+\)).*', '\1', "") : if file !~ '^/' : let file = dir . "/" . file : endif : echo 'I/O error for "' . file . '"' : :catch /^EXCEPT/ : echo "Unspecified error" : :endtry
エラー時や CTRL-C を押したときに Vim 自身によつて投げられる例外は平坦な階層になつてゐる: つまりこれらは全て "Vim" クラスに入つてゐる。ユーザーは接頭辭 "Vim" をつけた例外を投げることはできない。これらは Vim 用に豫約されてゐる。
Vim のエラー例外は失敗したコマンドの名前 (わかつてゐるならば) といふ付加情報がついてゐる。|catch-errors| を參照。
例外制禦のコンセプトは、例外を引き起こしたコマンドは卽座に異常終了し、制禦が finally 節または catch 節に移るといふ前提に基づいてゐる。
Vim script 言語では、エラーの後もスクリプトや函數が處理を續行する場合がある。"abort" フラグのない函數や、":silent!" をつけて實行されたコマンドでは、制禦は次の行、そして函數の外へ移り、制禦フローは最外側の ":endwhile" や ":endif" の次の行へ移る。一方、エラーは例外と同樣に捕捉できるべきである (つまり、卽座に異常終了することが要求される)。
この問題は、try 條件文が有效なときだけエラーを例外に變換し、(":silent!" で抑制されてゐない限り) 卽座に異常終了することで解決される。(エラー) 例外は有效な try 條件文でのみ捕捉可能であるため、これはなんら制約とはならない。エラーを捕捉せずに卽座に終了してほしいなら、單に catch 節を持たない try 條件文を使へばよい。(finally 節を指定すれば、終了の前に後始末處理を行ふことができる)
有效な try 條件文がないとき、卽座の異常終了でなく、通常の異常終了と繼續が行はれる。これによつて Vim6.1 以前用に書かれたスクリプトの互換性を保證してゐる。
しかし、有效な try 條件文の中から、例外處理コマンドを使つてゐない既存のスクリプトを source する (またはその函數の 1 つを呼ぶ) と、エラー發生時に既存のスクリプトの制禦フローが變はるかもしれない。エラー發生時に卽座に異常終了し、新しい方のスクリプト內でエラーを捕捉できる。しかし source されたスクリプトが ":silent!" コマンドでエラーメッセージを抑制してゐた場合 (それが適切なスクリプトなら |v:errmsg| を見ることでエラーを確認してゐる)、實行パスは變はらない。そのエラーは例外に變換されない (|:silent| を參照)。これが起こる殘りのただ 1 つの原因は、エラーに關心を拂つてゐなく、エラーメッセージを表示させるスクリプトである。おそらく新しいスクリプトからそのやうなコードを使ひたいとは思はないだらう。
例外處理コマンドにおける構文エラーは、それが屬する try 條件文のどの ":catch
" コマンドでも決して捕捉されない。しかし finally 節は實行される。
例:
:try : try : throw 4711 : catch /\(/ : echo "in catch with syntax error" : catch : echo "inner catch-all" : finally : echo "inner finally" : endtry :catch : echo 'outer catch-all caught "' . v:exception . '"' : finally : echo "outer finally" :endtry
上の例を實行すると次が表示される:
inner finally outer catch-all caught "Vim(catch):E54: Unmatched \(" outer finally
元の例外は破毀され、代はりにエラー例外が投げられる。
{譯注: throw 4711 により例外が發生したが、その後の catch /\(/ に構文エラーがあるためエラー例外が發生し、最初の例外は破毀された。}
コマンド ":try", ":catch", ":finally", ":endtry" は 1 行の中に書くことができる。しかし構文エラーがあつたとき "catch" の行を認識するのが難しくなるので、避けた方がよい。
例:
:try | unlet! foo # | catch | endtry
この例は ":unlet!" の後に餘計な文字があるためエラー例外を發生させる。そして":catch" と ":endtry" が認識されないため、この例外は破毀され、"E488: Trailing characters" のメッセージが表示される。
1 つのコマンドにより複數のエラーが發生した場合、普通は最初のエラーメッセージが最も限定的であるため、それがエラー例外に變換される。
例:
echo novar
は次を發生させる:
E121: Undefined variable: novar E15: Invalid expression: novar
try 條件文の中のエラー例外の値は次になる:
Vim(echo):E121: Undefined variable: novar
しかし、同じコマンドにおいて通常のエラーの後に構文エラーが檢出されたときは、構文エラーが例外として投げられる。
例:
unlet novar #
これは次を發生させる:
E108: No such variable: "novar" E488: Trailing characters
try 條件文の中のエラー例外の値は次になる:
Vim(unlet):E488: Trailing characters
この理由は、構文エラーによつてユーザーが豫期してゐない實行パスになつてしまふかもしれないためである。例:
try try | unlet novar # | catch | echo v:exception | endtry catch /.*/ echo "outer catch:" v:exception endtry
これは "outer catch: Vim(unlet):E488: Trailing characters" を表示し、次にエラーメッセージ "E600: Missing :endtry" が表示される。|except-single-line| を參照。
:" 函數 Nr2Bin() は數値の 2 進文字列表現を返す。 :func Nr2Bin(nr) : let n = a:nr : let r = "" : while n : let r = '01'[n % 2] . r : let n = n / 2 : endwhile : return r :endfunc
:" 函數 String2Bin() は文字列中の各文字を2進文字列に變換して、ハイフン(-)で :" 區切つて返す。 :func String2Bin(str) : let out = '' : for ix in range(strlen(a:str)) : let out = out . '-' . Nr2Bin(char2nr(a:str[ix])) : endfor : return out[1:] :endfunc
使ひ方の例:
:echo Nr2Bin(32)
結果: "100000"
:echo String2Bin("32")
結果: "110011-110010"
以下は、指定した比較函數を使つて行をソートする例である。
:func SortBuffer() : let lines = getline(1, '$') : call sort(lines, function("Strcmp")) : call setline(1, lines) :endfunction
ワンライナーにすると次のやうになる:
:call setline(1, sort(getline(1, '$'), function("Strcmp")))
Vim には sscanf() に相當する函數が無い。行の一部を取り出す必要がある場合には、matchstr() や substitute() を使へば實現できる。以下の例は、"foobar.txt, 123, 45" といふやうな行から、ファイル名と行番號とカラム番號を取り出す方法を示してゐる。
:" 正規表現を設定 :let mx='\(\f\+\),\s*\(\d\+\),\s*\(\d\+\)' :" 正規表現全體にマッチする部分を取り出す :let l = matchstr(line, mx) :" マッチ結果から各要素を取り出す :let file = substitute(l, mx, '\1', '') :let lnum = substitute(l, mx, '\2', '') :let col = substitute(l, mx, '\3', '')
入力は變數 "line"、結果は "file" と "lnum" と "col" に格納される (このアイデアは Michael Geddes による)。
コマンド |:scriptnames| により今までに source された全てのスクリプトファイルのリストを取得することができる。これと等價な函數や變數は存在しない (めつたに必要にならないからである)。そのやうな場合には次のコードが利用できる:
" ":scriptnames" の出力を變數scriptnames_outputに入れる。 let scriptnames_output = '' redir => scriptnames_output silent scriptnames redir END
" 出力を行のリストに分割し、各行をパースする。辭書 "scripts" に要素を追加 " する。 let scripts = {} for line in split(scriptnames_output, "\n") " 空行以外に對して實行 if line =~ '\S' " 行內の最初の番號を取得 let nr = matchstr(line, '\d\+') " ファイル名を取得。スクリプト番號" 123: "を削除。 let name = substitute(line, '.\+:\s*', '', '') " 辭書に要素を追加 let scripts[nr] = name endif endfor unlet scriptnames_output
時閒が經つにつれて多くの機能が Vim script に追加された。これには Ex コマンド、關 數、變數タイプなどが含まれる。それぞれの個々の機能は |has()| と |exists()| 函數でチェックできる。
時々、機能の古い構文が Vim をより良くすることを妨げることがある。サポートが奪はれると、これは古い Vim script を壞すだらう。これを明確にするために |:scriptversion| コマンドを使ふことができる。Vim script が古いバージョンの Vim と互換性がない場合、不可解な方法で失敗するのではなく、明示的なエラーを與へる。
これはオリジナルの Vim script であり、|:scriptversion| コマンドを使用してゐないのと同じである。行の範圍について古い構文に戾るために使用することができる。以下でサポートを檢査する:
has('vimscript-1')
"." による文字列連結はサポートされてゐない、代はりに ".." を使用すること。これにより、Dict メンバーアクセスと浮動小數點數に "." を使用することによる曖昧さが囘避される。".5" は數値 0.5 を意味する。
すべての Vim の定義濟變數 |vim-variable| には "v:" といふ接頭辭を付けなければならない。例へば "version" は |v:version| とは違ふので、普通の變數として使ふことができる。"count" やその他のいくつかの分かり切つた名前でも同樣である。
以下でサポートを檢査する:
has('vimscript-3')
先頭が 0 の數字は8進數として認識されません。以前のバージョンでは以下が得られます:
echo 017 " 15 を表示 echo 018 " 18 を表示
script version 4 では:
echo 017 " 17 を表示 echo 018 " 18 を表示
數字の中に一重引用符を使用して讀みやすくすることもできます:
echo 1'000'000
引用符は數字で圍まれてゐる必要があります。
以下でサポートを檢査します:
has('vimscript-4')
コンパイル時に |+eval| 機能が無效とされてゐる場合、全ての式評價 (eval) コマンドは提供されない。その場合、Vim script が全ての種類のエラーを引き起こすことを避ける爲、":if" と ":endif" は解釋される。":if" とそれに對應する ":endif" に挾まれた內容は無視される。":if" の後に續く引數も無視される。この ":if" コマンドはネスティングが可能である。しかし必ず行の先頭に書かれてゐる必要がある。":else" コマンドは認識されない。
|+eval| 機能が存在しなかつた場合、どのやうにコマンドが實行を免れるかの例:
:if 1 : echo "Expression evaluation is compiled in" :else : echo "You will _never_ see this message" :endif
|+eval| 機能が無效になつてゐる場合にのみコマンドを實行するには、2 つの方法がある。最も簡單なのは、スクリプト (または Vim) を途中で終了することである:
if 1 echo "commands executed with +eval" finish endif args " command executed without +eval
スクリプトのロードを中止したくない場合は、次の例に示すやうなトリックを使用することができる:
silent! while 0 set history=111 silent! endwhile
|+eval| 機能が利用可能な場合にコマンドは、"while 0" なのでスキップされる。|+eval| 機能が無效の場合は、"while 0" はエラーになる。これは默つて無視され、コマンドは實行される。
オプション ’foldexpr’, ’formatexpr’, ’includeexpr’, ’indentexpr’, ’statusline’, ’foldtext’ はサンドボックスの中で評價される。これによつて、惡質な副作用を持つ式からの保護がなされてゐる。これによつて、これらのオプションがモードラインから設定された場合にある種の安全性がもたらされてゐる。tags ファイルからのコマンドが實行されたときとコマンドラインでの CTRL-R = に對してもサンドボックスが使はれる。
コマンド |:sandbox| に對してもサンドボックスが使はれる。
サンドボックス內では以下の事が禁止される:
これは 100% 安全と保證するものではない。しかし、ある種の攻擊を防ぐ事はできるはずである。
サンドボックス內で {cmd} を實行する。モードラインから設定された可能性のあるオプションを評價するために使へる。
例: ’foldexpr’
いくつかのオプションは式を含んでゐる。その式を評價するときはセキュリティ上の危險性を囘避するためにサンドボックス內で行はねばならない。しかしサンドボックスには制限があるので、これはそのオプションが安全でない場所で設定されたときのみ行はれる。ここで「安全でない」とは次の場合をいふ:
Note:
サンドボックス內でオプションの値を退避し、それから復元した場合、そのオプションはやはりサンドボックス內で設定されたものとマークされる。
いくつか狀況においては、バッファを變更する・他のウィンドウへジャンプするなど、Vim の現在の處理を混亂させたり破壞してしまふやうな動作は禁止される。これは Vim が實際に他の何かをしてゐるときに起こることに對して當てはまる。例へば、’balloonexpr’ の評價は、マウスカーソルがある位置に留まつてゐるどんなときにでも起こりうる。
テキストロックが有效になつてゐるときは、以下の事が禁止される: