Skip to content

Commit c314d64

Browse files
committed
Update #2 (Blob!)
1 parent 00d9818 commit c314d64

File tree

2 files changed

+195
-62
lines changed

2 files changed

+195
-62
lines changed

doc/eval.jax

Lines changed: 104 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,11 @@ Funcref 関数への参照 |Funcref|。
6969

7070
チャネル チャネルに使われる。|ch_open()|を参照。 *Channel* *Channels*
7171

72+
*Blob*
73+
Blob バイナリラージオブジェクト。任意のバイトシーケンスを格納する。
74+
例: 0zFF00ED015DAF
75+
0z は空のBlobである。
76+
7277
数値と文字列は文脈に応じて相互に変換される。
7378

7479
数値から文字列への変換は数字のASCII表現によって行われる。例:
@@ -118,7 +123,8 @@ Note: " " と "0" も空文字列ではないので、TRUE と見なされる。
118123
または Float は数値または文字列ではないため、FALSE と評価される。
119124

120125
*E745* *E728* *E703* *E729* *E730* *E731* *E908* *E910* *E913*
121-
リスト、辞書、Funcref、ジョブ、チャネルは自動的に変換されない。
126+
*E974* *E975* *E976*
127+
リスト、辞書、Funcref、ジョブ、チャネル、Blobは自動的に変換されない。
122128

123129
*E805* *E806* *E808*
124130
数値と浮動小数点数をまぜると浮動小数点数になる。それ以外には浮動小数点数への自
@@ -978,13 +984,20 @@ expr1aが省略されたときは0となる。expr1bが省略されたときは
978984
:let s = s[:-3] " 最後の2文字を削除する
979985
<
980986
*slice*
981-
expr8がリストならば、インデックスexpr1aとexpr1bの間の要素からなる新しいリスト
987+
expr8が |List| ならば、インデックスexpr1aとexpr1bの間の要素からなる新しい |List|
982988
となる。すぐ上で説明した文字列の場合と同様である。部分リスト|sublist|も参照の
983989
こと。例: >
984990
:let l = mylist[:3] " 最初の4個の要素
985991
:let l = mylist[4:4] " 1個の要素からなるリスト
986992
:let l = mylist[:] " リストの浅いコピー
987993

994+
expr8が |Blob| ならば、インデックスexpr1aとexpr1bのバイト数を含む新しい |Blob|
995+
となる。
996+
例: >
997+
:let b = 0zDEADBEEF
998+
:let bs = b[1:2] " 0zADBE
999+
:let bs = b[] " 0zDEADBEEF のコピー
1000+
9881001
|Funcref|に対してexpr8[expr1]やexpr8[expr1a : expr1b]を使うとエラーになる。
9891002

9901003
部分リストでスコープと変数に続くコロンとの混乱に注意してください: >
@@ -1115,6 +1128,14 @@ Note "\xff" は値255の1バイトとなる。これはエンコーディング
11151128
Note "\000" と "\x00" は強制的に文字列の終端として扱われる。
11161129

11171130

1131+
blobリテラル *blob-literal* *E973* *E977* *E978*
1132+
------------
1133+
1134+
0zまたは0Zで始まる任意のバイト数の16進数。
1135+
シーケンスは偶数個の16進数文字でなければならない。例:
1136+
:let b = 0zFF00ED015DAF
1137+
1138+
11181139
リテラル文字列 *literal-string* *E115*
11191140
--------------
11201141
'string' 文字列定数 *expr-'*
@@ -1856,6 +1877,8 @@ v:t_none 特殊値型の値。読出し専用。 参照: |type()|
18561877
v:t_number 数値型の値。読出し専用。 参照: |type()|
18571878
*v:t_string* *t_string-variable*
18581879
v:t_string 文字列型の値。読出し専用。 参照: |type()|
1880+
*v:t_blob* *t_blob-variable*
1881+
v:t_blob Blob型の値。読出し専用。 参照: |type()|
18591882

18601883
*v:termresponse* *termresponse-variable*
18611884
v:termresponse termcapのエントリ|t_RV|で端末から返されるエスケープシーケン
@@ -2044,12 +2067,14 @@ ch_logfile({fname} [, {mode}]) なし チャネルの挙動ログ出力を開始
20442067
ch_open({address} [, {options}])
20452068
チャネル {address} へのチャネルを開く
20462069
ch_read({handle} [, {options}]) 文字列 {handle} から読み込む
2070+
ch_readblob({handle} [, {options}])
2071+
Blob {handle} からBlobを読み込む
20472072
ch_readraw({handle} [, {options}])
20482073
文字列 {handle} から生の文字列を読み込む
20492074
ch_sendexpr({handle}, {expr} [, {options}])
20502075
任意 {expr}をJSONチャネル{handle}に送る
2051-
ch_sendraw({handle}, {string} [, {options}])
2052-
任意 {string}をrawチャネル{handle}に送る
2076+
ch_sendraw({handle}, {expr} [, {options}])
2077+
任意 {expr}をrawチャネル{handle}に送る
20532078
ch_setoptions({handle}, {options})
20542079
なし {handle}にオプションを設定する
20552080
ch_status({handle} [, {options}])
@@ -2194,8 +2219,8 @@ hlID({name}) 数値 highlight group {name}のID
21942219
hostname() 文字列 vimが動作しているマシンの名前
21952220
iconv({expr}, {from}, {to}) 文字列 {expr}のエンコーディングを変換する
21962221
indent({lnum}) 文字列 行{lnum}のインデントを取得
2197-
index({list}, {expr} [, {start} [, {ic}]])
2198-
数値 {list}中に{expr}が現れる位置
2222+
index({object}, {expr} [, {start} [, {ic}]])
2223+
数値 {object}中に{expr}が現れる位置
21992224
input({prompt} [, {text} [, {completion}]])
22002225
文字列 ユーザーからの入力を取得
22012226
inputdialog({prompt} [, {text} [, {completion}]])
@@ -2204,7 +2229,8 @@ inputlist({textlist}) 数値 ユーザーに選択肢から選ばせる
22042229
inputrestore() 数値 先行入力を復元する
22052230
inputsave() 数値 先行入力を保存し、クリアする
22062231
inputsecret({prompt} [, {text}]) 文字列 input()だがテキストを隠す
2207-
insert({list}, {item} [, {idx}]) リスト {list}に要素{item}を挿入 [{idx}の前]
2232+
insert({object}, {item} [, {idx}])
2233+
リスト {object}に要素{item}を挿入 [{idx}の前]
22082234
invert({expr}) 数値 ビット反転
22092235
isdirectory({directory}) 数値 {directory}がディレクトリならば|TRUE|
22102236
islocked({expr}) 数値 {expr}がロックされているなら|TRUE|
@@ -2295,7 +2321,7 @@ py3eval({expr}) 任意 |python3| の式を評価する
22952321
pyxeval({expr}) 任意 |python_x| の式を評価する
22962322
range({expr} [, {max} [, {stride}]])
22972323
リスト {expr}から{max}までの要素のリスト
2298-
readfile({fname} [, {binary} [, {max}]])
2324+
readfile({fname} [, {type} [, {max}]])
22992325
リスト ファイル{fname}から行のリストを取得
23002326
reg_executing() 文字列 実行中のレジスタ名を取得する
23012327
reg_recording() 文字列 記録中のレジスタ名を取得する
@@ -2524,8 +2550,9 @@ winrestview({dict}) なし 現在のウィンドウのビューを復元
25242550
winsaveview() 辞書 現在のウィンドウのビューを保存
25252551
winwidth({nr}) 数値 ウィンドウ{nr}の幅を取得
25262552
wordcount() 辞書 バイト/文字/単語の統計情報を取得
2527-
writefile({list}, {fname} [, {flags}])
2528-
数値 行のリストをファイル{fname}に書き込む
2553+
writefile({object}, {fname} [, {flags}])
2554+
数値 行の |Blob| または |list| をファイルに
2555+
書き込む
25292556
xor({expr}, {expr}) 数値 ビット排他的論理和
25302557

25312558

@@ -3155,6 +3182,12 @@ ch_read({handle} [, {options}]) *ch_read()*
31553182
|channel-more| を参照。
31563183
{|+channel| 機能付きでコンパイルされたときのみ有効}
31573184

3185+
ch_readblob({handle} [, {options}]) *ch_readblob()*
3186+
ch_read() と同様に動作するが、バイナリデータを読み込んでBlobを
3187+
返す。
3188+
|channel-more| を参照。
3189+
{|+channel| 機能付きでコンパイルされたときのみ有効}
3190+
31583191
ch_readraw({handle} [, {options}]) *ch_readraw()*
31593192
ch_read() と同様に動作するが JS や JSON の場合でもメッセージは
31603193
デコードされない。NL チャネルの場合、NL を受信するまで待つこと
@@ -3171,8 +3204,8 @@ ch_sendexpr({handle}, {expr} [, {options}]) *ch_sendexpr()*
31713204

31723205
{|+channel| 機能付きでコンパイルされたときのみ有効}
31733206

3174-
ch_sendraw({handle}, {string} [, {options}]) *ch_sendraw()*
3175-
{handle} を {string} に送る。
3207+
ch_sendraw({handle}, {expr} [, {options}]) *ch_sendraw()*
3208+
文字列またはBlob {expr} を {handle} に送る。
31763209
|ch_sendexpr()| と同様に動作するが、リクエストをエンコードした
31773210
り応答をデコードしたりはしない。呼び出しは正しいコンテンツで
31783211
ある事が保証される。また NL モードでは改行が行われるが、ここ
@@ -5247,17 +5280,31 @@ indent({lnum}) カレントバッファの{lnum}行目のインデント量を
52475280
{lnum}が無効なときは-1を返す。
52485281

52495282

5250-
index({list}, {expr} [, {start} [, {ic}]]) *index()*
5251-
リスト|List| {list}の中で、{expr}に等しい要素の最小のインデッ
5283+
index({object}, {expr} [, {start} [, {ic}]]) *index()*
5284+
If {object} is a |List| return the lowest index where the item
5285+
has a value equal to {expr}. There is no automatic
5286+
conversion, so the String "4" is different from the Number 4.
5287+
And the number 4 is different from the Float 4.0. The value
5288+
of 'ignorecase' is not used here, case always matters.
5289+
5290+
If {object} is |Blob| return the lowest index where the byte
5291+
value is equal to {expr}.
5292+
5293+
index({object}, {expr} [, {start} [, {ic}]]) *index()*
5294+
{object}が |List| の場合は、{expr}に等しい要素の最小のインデッ
52525295
クスを返す。自動的な変換は行われないので、文字列の "4" は数値
52535296
の 4 とは異なると判定される。そして数値の 4 は浮動小数点数の
52545297
4.0 とも異なる。'ignorecase' はここでは適用されず、常に大文字・
52555298
小文字は区別される。
5299+
5300+
{object}が |Blob| の場合は、{expr}に等しいバイト値の最小のイン
5301+
デックスを返す。
5302+
52565303
{start}が指定された場合はインデックス{start}から要素の検索を始
52575304
める(負数を指定すると末尾からの相対位置となる)。
52585305
{ic}に|TRUE|が指定された場合、大文字・小文字は区別されない。
52595306
そうでない場合は区別される。
5260-
{list}の中に{expr}が見つからない場合は-1を返す。
5307+
{object}の中に{expr}が見つからない場合は-1を返す。
52615308
例: >
52625309
:let idx = index(words, "the")
52635310
:if index(numbers, 123) >= 0
@@ -5358,13 +5405,16 @@ inputsecret({prompt} [, {text}]) *inputsecret()*
53585405
ユーザーの入力内容を文字列として返す。
53595406
NOTE: コマンドライン補完には対応していない。
53605407

5361-
insert({list}, {item} [, {idx}]) *insert()*
5362-
リスト|List| {list}の初めに{item}を挿入する。
5408+
insert({object}, {item} [, {idx}]) *insert()*
5409+
{object}が |List| か |Blob| の場合、それの先頭に{item}を挿入す
5410+
る。
5411+
53635412
{idx}が指定されたときはインデックス{idx}の要素の前に{item}を挿
53645413
入する。{idx}が0のときは{idx}を省略した場合と同じ様に最初の要
53655414
素の前に挿入する。{idx}は負数でもよい(|list-index|参照)。-1を
53665415
指定すると最後の要素の前に挿入する。
5367-
挿入した結果のリストを返す。例: >
5416+
5417+
挿入した結果の |List| か |Blob| を返す。例: >
53685418
:let mylist = insert([2, 3, 5], 1)
53695419
:call insert(mylist, 4, -1)
53705420
:call insert(mylist, 6, len(mylist))
@@ -5590,8 +5640,9 @@ json_decode({string}) *json_decode()*
55905640
- 配列やオブジェクトの末尾コンマは無視される、例えば
55915641
"[1, 2, ]" と "[1, 2]" は同じである。
55925642
- 多くの浮動小数点数を認識する。例えば "1." は "1.0" となり、
5593-
"001.2" は "1.2" となる。特別な浮動小数点の値、"Infinity" お
5594-
よび "NaN" (大文字は無視される) は受け付けられる。
5643+
"001.2" は "1.2" となる。特別な浮動小数点の値、"Infinity",
5644+
"-Infinity" および "NaN" (大文字は無視される) は受け付けられ
5645+
る。
55955646
- 整数値の先頭に付く 0 は無視される、例えば "012" は "12" とな
55965647
り、"-012" は "-12" となる。
55975648
- null、true および false の大文字は無視される、例えば "NULL"
@@ -5621,12 +5672,14 @@ json_encode({expr}) *json_encode()*
56215672
浮動小数点数 浮動小数点数
56225673
浮動小数点数 nan "NaN"
56235674
浮動小数点数 inf "Infinity"
5675+
浮動小数点数 -inf "-Infinity"
56245676
文字列 ダブルクォートで括られた文字列(null可)
56255677
Funcref 不可、エラー
56265678
リスト 配列(null可)
56275679
再帰的に使用された場合: []
56285680
辞書 オブジェクト(null可)
56295681
再帰的に使用された場合: {}
5682+
Blob 個々のバイト配列
56305683
v:false "false"
56315684
v:true "true"
56325685
v:none "null"
@@ -6753,16 +6806,18 @@ range({expr} [, {max} [, {stride}]]) *range()*
67536806
range(2, 0) " エラー!
67546807
<
67556808
*readfile()*
6756-
readfile({fname} [, {binary} [, {max}]])
6809+
readfile({fname} [, {type} [, {max}]])
67576810
ファイル{fname}を読み込み、各行を要素とするリスト|List|を返す。
67586811
行はNL文字で終わるものとする。改行文字がCRであるMacintoshのファ
67596812
イルは単一の長い行となる(どこかにNLが現れない限り)。
67606813
すべての NUL 文字は NL 文字に置換される。
6761-
{binary}が "b" を含む場合、次のようにバイナリモードになる:
6814+
{type}が "b" を含む場合、次のようにバイナリモードになる:
67626815
- 最後の行がNLで終わるときは、リストの末尾に余分な空文字列が追
67636816
加される。
67646817
- CR文字を除去しない。
6765-
バイナリモードでない場合:
6818+
{type}が "B" を含む場合、ファイルのバイナリデータは変更せずに
6819+
|Blob| が返される。
6820+
その他の場合:
67666821
- NLの前に現れるCR文字を除去する。
67676822
- 最後の行がNLで終わるかどうかは関係ない。
67686823
- 'encoding' がUnicodeのときは UTF-8 のバイトオーダーマークは
@@ -6928,6 +6983,16 @@ remove({list}, {idx} [, {end}]) *remove()*
69286983
例: >
69296984
:echo "last item: " . remove(mylist, -1)
69306985
:call remove(mylist, 0, 9)
6986+
remove({blob}, {idx} [, {end}])
6987+
{end}を指定しなかった場合: |Blob| {blob}から{idx}位置のバイト
6988+
を削除し、そのバイトを返す。
6989+
{end}を指定した場合: {idx}から{end}まで(両端を含む)のバイトを
6990+
削除し、それらのバイトを |Blob| で返す。{idx}と{end}が同じバイ
6991+
トを指す場合、1個のバイトからなる |Blob| が返る。
6992+
{end}が{idx}より前になる場合、エラーとなる。
6993+
例: >
6994+
:echo "last byte: " . remove(myblob, -1)
6995+
:call remove(mylist, 0, 9)
69316996
remove({dict}, {key})
69326997
{dict}からキー{key}を持つ要素を削除する。例: >
69336998
:echo "removed " . remove(dict, "one")
@@ -6965,9 +7030,11 @@ resolve({filename}) *resolve()* *E655*
69657030
にする。
69667031

69677032
*reverse()*
6968-
reverse({list}) {list}の要素の順序をその場で(in-place)反転させる。{list}そのも
6969-
のを返す。
6970-
リストを変更させないでおくには、最初にコピーを作る: >
7033+
reverse({object})
7034+
{object}の要素の順序をその場で(in-place)反転させる。
7035+
{object}は |List| または |Blob| である。
7036+
{object}そのものを返す。
7037+
オブジェクトを変更させないでおくには、最初にコピーを作る: >
69717038
:let revlist = reverse(copy(mylist))
69727039

69737040
round({expr}) *round()*
@@ -9248,6 +9315,7 @@ type({expr}) {expr}の型を示す数値を返す。
92489315
特殊値: 7 |v:t_none| (v:null と v:none)
92499316
ジョブ: 8 |v:t_job|
92509317
チャネル: 9 |v:t_channel|
9318+
Blob: 10 |v:t_blob|
92519319
後方互換性のためには、次のような使い方ができる: >
92529320
:if type(myvar) == type(0)
92539321
:if type(myvar) == type("")
@@ -9582,12 +9650,17 @@ wordcount() *wordcount()*
95829650
(ビジュアルモードのみ)
95839651

95849652
*writefile()*
9585-
writefile({list}, {fname} [, {flags}])
9586-
|List| {list}をファイル{fname}に書き込む。リストの各要素は改行
9587-
文字(NL)で区切られる。各要素は文字列か数値でなければならない。
9653+
writefile({object}, {fname} [, {flags}])
9654+
{object}が |List| の場合、それをファイル{fname}に書き込む。リ
9655+
ストの各要素は改行文字(NL)で区切られる。各要素は文字列か数値で
9656+
なければならない。
95889657
{flags}が "b" を含むときはバイナリモードとなり、最後の要素の後
95899658
にNLが追加されない。最後の要素が空であると、ファイルの最後の行
95909659
がNLで終わるようになる。
9660+
9661+
{object}が |Blob| の場合、バイトを変更せずにファイル{fname}に
9662+
書き込む。
9663+
95919664
{flags}が "a" を含むときは追記モードとなり、ファイルに行が追記
95929665
される。 >
95939666
:call writefile(["foo"], "event.log", "a")
@@ -10256,7 +10329,8 @@ Vimはこれを見つけると、まず波括弧の中の式を評価し、そ
1025610329
文字列の i バイト目をセットするためにも使えない。それ
1025710330
には次のようにする: >
1025810331
:let var = var[0:2] . 'X' . var[4:]
10259-
<
10332+
< {var-name}が |Blob| の場合、{idx}はblobの長さになる。
10333+
この場合、1バイトが追加される。
1026010334

1026110335
*E711* *E719*
1026210336
:let {var-name}[{idx1}:{idx2}] = {expr1} *E708* *E709* *E710*

0 commit comments

Comments
 (0)