From 5e1efa04cde753c37802c82a542c10257f899c41 Mon Sep 17 00:00:00 2001 From: h-east Date: Sat, 8 Mar 2025 02:15:42 +0900 Subject: [PATCH 1/7] Change style to normal: vim9 --- doc/vim9.jax | 292 ++++++++++++++++++++++++--------------------------- 1 file changed, 140 insertions(+), 152 deletions(-) diff --git a/doc/vim9.jax b/doc/vim9.jax index 6e0546175..0605335a3 100644 --- a/doc/vim9.jax +++ b/doc/vim9.jax @@ -6,8 +6,8 @@ Vim9 script のコマンドと文法 *Vim9* *vim9* -ほとんどの文法については |eval.txt| で解説されています。このファイルには Vim9 -script の新しい文法と機能について書かれています。 +ほとんどの文法については |eval.txt| で解説されている。このファイルには Vim9 +script の新しい文法と機能について書かれている。 1. Vim9 script とは |Vim9-script| @@ -25,190 +25,181 @@ script の新しい文法と機能について書かれています。 1. Vim9 script とは *Vim9-script* -Vim script は、互換性の維持に気を配りながら成長してきました。そのため、古い悪 -しき仕様を変更できないことが多いほか、Vi との互換性に制約を受けて、より良い解 -決策を採用できなくなっています。処理は遅く、実行するたびに各行のパースが行われ -ています。 +Vim script は、互換性の維持に気を配りながら成長してきた。そのため、古い悪しき +仕様を変更できないことが多い他、Vi との互換性に制約を受けて、より良い解決策を +採用できなくなっている。処理は遅く、実行するたびに各行のパースが行われている。 -Vim9 script の主な目的は劇的な性能の向上です。これは、コマンドをより効率よく実 -行できる命令にコンパイルすることで実現しています。これにより、10倍から100倍の -実行速度の向上が期待できます。 +Vim9 script の主な目的は劇的な性能の向上である。これは、コマンドをより効率よく +実行できる命令にコンパイルすることで実現している。これにより、10 倍から 100 倍 +の実行速度の向上が期待できる。 -第2の目的は、Vim script 特有の文法を回避し、より一般的に使われる JavaScript や -TypeScript、Java のようなプログラミング言語に近づけることです。 +第 2 の目的は、Vim script 特有の文法を回避し、より一般的に使われる JavaScript +や TypeScript、Java のようなプログラミング言語に近づけることである。 パフォーマンスの向上は、100% の下位互換性を捨てることによってのみ達成しうるも -のです。例えば、関数の引数を辞書 "a:" から利用できるようにするためには、かなり -のオーバーヘッドが必要になります。そのため、Vim9 script では、この辞書が利用で -きなくなりました。その他の違いは、エラーの処理方法など、より微細なものです。 +のである。例えば、関数の引数を辞書 "a:" から利用できるようにするためには、かな +りのオーバーヘッドが必要になる。そのため、Vim9 script では、この辞書が使用でき +なくなった。その他の違いは、エラーの処理方法など、より微細なものである。 -Vim9 script は以下の場所で使用することができます: +Vim9 script は以下の場所で使用することができる: - コマンド `:def` で定義された関数の中 - コマンド `vim9script` で始まるスクリプトファイルの中 - 上記のコンテキストで定義された自動コマンド - コマンド修飾子 `vim9cmd` が先頭に付いたコマンド -Vim9 script ファイルの中でコマンド `:function` で関数を定義すると、その中では -旧来の Vim script の記法が、最新の |scriptversion| とともに有効になります。し -かし、これは混乱を招く可能性があるため、推奨できません。 +Vim9 script ファイル内で `:function` を使用する場合、最高の |scriptversion| を +持つ旧来の構文が使用される。ただし、これは混乱を招く可能性があるため、推奨され +ない。 -Vim9 script と旧来の Vim script は同時に利用できます。古いスクリプトを書き換え -なくとも、以前と同様に実行することが可能です。高速化が必要なコードには、`:def` -で定義する関数を使ったほうが良いかもしれません。 +Vim9 script と旧来の Vim script を混在させることができる。古いスクリプトを書き +直す必要はなく、以前と同じように動作する。高速化が必要なコードには、いくつかの +`:def` 関数を使用するとよいだろう。 :vim9[cmd] {cmd} *:vim9* *:vim9cmd* *E1164* - Vim9 script の文法と方式を使用して {cmd} を評価、実行します。 - コマンドを入力する時と、旧来のスクリプトや関数内で使用する時に - 便利です。 + Vim9 script の構文とセマンティクスを使用して {cmd} を評価、実 + 行する。コマンドを入力する時や、旧来のスクリプトまたは関数内で + 便利である。 :leg[acy] {cmd} *:leg* *:legacy* *E1189* *E1234* - 旧来の Vim script の文法と方式を利用して {cmd} を評価、実行し - します。これは Vim9 script、あるいは `:def` で定義する関数での - み便利です。 - Note {cmd} は旧来の Vim script の式として解釈されるため、{cmd} - ではローカル変数 {訳注: Vim9 script におけるローカル変数} を用 - いることはできない。 - -|52.6| の Vim9 script の例を参照してください。 + 旧来のスクリプト構文とセマンティクスを使用して {cmd} を評価、 + 実行する。Vim9 script または :def 関数内でのみ便利である。 + Note {cmd} は旧来の式構文で解析されるため、ローカル変数を使用 + できないことに注意。 + +|52.6| の Vim9 script の例を参照。 ============================================================================== 2. 旧来の Vim script からの変更点 *vim9-differences* 概要 ~ *E1146* -Vim9 script と `:def` で定義する関数を使用する際に最もよく遭遇する変更点の概要 -は以下のとおりです: -- コメントは " ではなく、# で始めます: > +Vim9 スクリプトと :def 関数を使用するときに最も頻繁に遭遇する違いの簡単な概要。 +詳細は以下の通り: +- コメントは " ではなく、# で始める: > echo "hello" # コメント -- 行継続文字 (\) はほとんどの場合、必要ありません: > +- 行継続にバックスラッシュを使用する必要はほとんどない: > echo "hello " .. yourName .. ", how are you?" -- 可読性を上げるため、多くの場所にスペースが必要になります。 -- 値の代入には `:let` *E1126* を使用せず、変数の宣言には `:var` を使用します: > +- 読みやすさを向上させるために、多くの場所で空白が必要である。 +- `:let` *E1126* を使用せずに値を代入し、`:var` を使用して変数を宣言する: > var count = 0 count += 3 -- `:final` と `:const` を使用して、定数を宣言できます: > +- `:final` と `:const` を使用して、定数を宣言できる: > final matches = [] # 後でこのリストに追加する const names = ['Betty', 'Peter'] # 変更できない -- `:final` は `:finally` の略語として使用することはできません。 -- 変数と関数のスコープは、明示しない限りスクリプトローカルです。 -- 関数を引数の型、戻り値の型とともに宣言します: > +- `:final` は `:finally` の略語として使用することはできない。 +- 変数と関数は、デフォルトではスクリプトローカルである。 +- 関数は引数の型と戻り値の型で宣言される: > def CallMe(count: number, message: string): bool -- 関数は `:call` なしで呼び出します: > +- `:call` なしで関数を呼び出す: > writefile(['done'], 'file.txt') -- 古い Exコマンドは使用できません: +- 古い Ex コマンドは使用できない: `:Print` `:append` `:change` - `:d` 直接 'd' か 'p' かが続いているもの。 + `:d` の直後に 'd' または 'p' が続く。 `:insert` `:k` `:mode` `:open` - `:s` フラグのみ与えて使用されたとき + `:s` とフラグのみ `:t` `:xit` -- 一部のコマンド、特に制御構文として使われるコマンドは、省略することはできませ - ん。例えば、`:throw` を `:th` と書くことはできません。 *vim9-no-shorten* -- 波括弧変数は使用できません。 -- コマンドの前に範囲指定を置くときは、コロン (:) を前置しなくてはなりません: > +- 一部のコマンド、特にフロー制御に使用されるコマンドは短縮できない。 + 例えば、`:throw` を `:th` と書くことはできない。 *vim9-no-shorten* +- 波括弧変数は使用できない。 +- コマンドの前の範囲にはコロンを前に付ける必要がある: > :%s/this/that -- "@r" としてレジスタを実行することはできません。コロン (:) を前置するか、 - `:exe` を使ってください: > +- "@r" でレジスタを実行しても機能しない。先頭にコロンを追加するか、`:exe` を使 + 用する: > :exe @a -- 特に指定しない限り、最新の |scriptversion| が使われます。 -- 式による指定のマッピングを定義する際は、その式はそのマッピングが定義されたス - クリプトのコンテキストで評価されます。 -- 文字列にインデックスを付ける場合、インデックスはバイト数ではなく文字数でカウ - ントされます: |vim9-string-index| -- 予想外の違いがいくつかあるかもしれません: |vim9-gotchas|. +- 特に指定がない限り、最高の |scriptversion| が使用される。 +- 式のマッピングを定義すると、式は定義されたスクリプトのコンテキストで評価され + る。 +- 文字列をインデックスする場合、インデックスはバイトではなく文字数でカウントさ + れる: + |vim9-string-index| +- 予想外の相違点がいくつかある: |vim9-gotchas|. # から始まるコメント ~ -旧来の Vim script のコメントは、ダブルクォーテーションで始めます。Vim9 script -のコメントは # で始めます。 > +旧来の Vim script ではコメントは、ダブルクォーテーションで始める。Vim9 script で +はコメントは # で始める。 > # 宣言 var count = 0 # 出現回数 -これは、ダブルクォーテーションは文字列の開始を表す文字でもあるからです。多くの -場所、特に改行を含む式の途中では、文字列とコメントの両方が現れるため、どちらを -意味しているのかわかりにくくなってしまいます。この混乱を避けるために、Vim9 -script では、# のみをコメントとして認識します。このコメント形式はシェルスクリ -プトやPythonのコードと同じです。 +理由は、ダブルクォーテーションは文字列の始まりにもなり得るからである。多くの場 +所、特に式の途中で改行がある場合、文字列とコメントの両方の後に任意のテキストが +続く可能性があるため、意味がわかりにくくなる。混乱を避けるために、# コメントの +みが認識される。これは、シェルスクリプトや Python プログラムの場合と同じであ +る。 -Vi において # は行番号付きでテキストを表示します。Vim9 script では、代わりに -`:number` を使用します。 > +Vi では、# は数字付きのテキストをリストするコマンドである。Vim9 script では、 +そのために `:number` を使用できる。 > :101 number -可読性を向上するために、コマンドと #、コメント文の間にはスペースをおいてくださ -い: > +読みやすさを向上させるには、コマンドとコメントを開始する # の間にスペースが必 +要である: > var name = value # コメント var name = value# エラー! < *E1170* -コメントを #{ で始めてはいけません。旧来の Vim script の辞書リテラルと似てお -り、どちらか判別がつきにくいところではエラーになるからです。折り畳みの開始に使 -える #{{ や #{{{ はコメントの始まりになっても良いです。 +コメントを #{ で始めてはならない。これは旧来の辞書リテラルに似ており、混乱を招 +く可能性がある場合にエラーが発生する。#{{ または #{{{ は問題ない。これらは折り +たたみを開始するために使用できる。 -スクリプトファイルの先頭では、Vim は `vim9script` コマンドが見つかるまでそのス -クリプトが |Vim9| script かを知るすべがありません。なのでその行までは旧来のコ -メントを使う必要があります。: > +スクリプトファイルの読み込みを開始すると、Vim は `vim9script` コマンドが見つか +るまではそれが |Vim9| スクリプトであることを認識しない。その時点までは、旧来の +コメントを使用する必要がある: > " 旧来のコメント vim9script # Vim9 のコメント -これは不恰好なので、`vim9script` を一番最初の行に書くのが良いでしょう: > +これは見た目が悪いので、`vim9script` を最初の行に置いた方がよい: > vim9script # Vim9 コメント -旧来の Vim script では # は代替ファイル名としても使われます。Vim9 script で -は、代わりに %% を使う必要があります。## の代わりに %%% を使います。(すべての -引数を意味します) +旧来の Vim script では、# は代替ファイル名としても使用される。Vim9 script では、代わりに %% を使用する必要がある。## の代わりに %%% (すべての引数を表す) を使用する。 Vim9 関数 ~ *E1099* -`:def` で定義された関数はコンパイルされます。処理の実行は多くの場合、通常の関 -数に比べて10倍から100倍ほど速くなります。 - -多くのエラーは関数が実行される前に、コンパイルされる段階で検出されます。読みや -すく理解しやすいコードを強制するために、構文は厳密に定められています。 - -コンパイルは以下のいずれかのタイミングで実行されます: -- 関数が最初に呼び出されるとき -- 関数が定義された後ろの位置で、スクリプト中に `:defcompile` コマンドが見つ - かったとき -- 関数に対してコマンド `:disassemble` が実行されたとき -- コンパイルされた関数から呼び出されたり、関数リファレンスとして使用されたとき - (引数と戻り値の型をチェックできるようにするため) +`:def` で定義された関数はコンパイルされる。実行速度が何倍も速くなり、多くの場 +合 10 から 100 倍になる。 + +関数が実行される前に、コンパイル時にすでに多くのエラーが見つかる。構文は厳密 +で、読みやすく理解しやすいコードが強制される。 + +コンパイルは、以下のいずれかに遭遇した時に実行される: +- 関数が初めて呼び出されたとき +- 関数が定義された後にスクリプト内で `:defcompile` コマンドが見つかったとき +- 関数に `:disassemble` が使用されるとき +- コンパイルされた関数が関数を呼び出すか、関数参照として使用するとき (引数と戻 + り値の型をチェックできるようにするため) *E1091* *E1191* -もし関数のコンパイルに失敗した場合は、次その関数が呼ばれたときも再度コンパイル -を試みることはなく、代わりに "E1091: Function is not compiled: {name}" という -エラーを発生させます。{訳注: 日本語メッセージの場合: "E1091: 関数はコンパイル -されていません: {name}"} -コンパイルはまだ作成されていないユーザーコマンドと遭遇したときに失敗するでしょ -う。この場合は `execute()` を使うことでエラーを関数の実行時に発生するようにす -ることができます。 > +コンパイルが失敗した場合、次回の呼び出しでは再試行されず、代わりに次のエラーが +表示される: "E1091: Function is not compiled: {name}" +まだ作成されていないユーザーコマンドに遭遇すると、コンパイルは失敗する。この場 +合、`execute()` を呼び出して実行時に呼び出すことができる。 > def MyFunc() execute('DefinedLater') enddef -`:def` は `:function` が持っているようなオプションを持っていません: -"range"、"abort"、"dict" や "closure" のこと。`:def` で定義される関数は常にエ -ラーが発生し次第、実行を中断します (`:silent!` がコマンドに対して使われた場合 -やエラーが `:try` ブロック内で捕捉された場合でない限り) 。また与えられた「範 -囲」も受け取らず、"dict" 属性を持つ関数になることもできません。そして常にク -ロージャとなれます。 +`:def` には、`:function` のようなオプションはない: "range"、"abort"、"dict"、 +"closure"。`:def` 関数は、エラーが発生すると常に中止する (コマンドに `:silent!` +が使用されている場合、またはエラーが `:try` ブロックでキャッチされた場合を除 +く)。範囲は渡されず、"dict" 関数になることはできず、常にクロージャになることが +できる。 *vim9-no-dict-function* *E1182* -「辞書関数」の代わりに Vim9 クラス (|Vim9-class|) を使用できます。辞書を明示的 -に渡すこともできます: > +"dict 関数" の代わりに Vim9 クラス (|Vim9-class|) を使用できる。辞書を明示的に +渡すこともできる: > def DictFunc(self: dict, arg: string) echo self[arg] enddef var ad = {item: 'value', func: DictFunc} ad.func(ad, 'item') -一方、旧来の辞書関数を呼ぶことはできます: > +ただし、旧来の辞書関数を呼ぶことはできる: > func Legacy() dict echo self.value endfunc @@ -217,53 +208,51 @@ Vim9 関数 ~ d.func() enddef < *E1096* *E1174* *E1175* -引数の型と戻り値の型を指定する必要があります。型には "any" を指定することがで -き、型のチェックは旧来の関数と同様に実行時に行われます。 +引数の型と戻り値の型を指定する必要がある。"any" 型を使用することができ、その場 +合は旧来の関数と同様に実行時に型チェックが行われる。 *E1106* -引数を参照する際は、他のプログラミング言語と同様、"a:" をつけずに名前だけで指定 -することができます。 -引数辞書 "a:" と 引数リスト "a:000" はありません。 +引数は、他の言語と同様に、"a:" なしで名前でアクセスされる。"a:" 辞書や "a:000" +リストはない。 *vim9-variable-arguments* *E1055* *E1160* *E1180* -可変長引数を定義する場合は TypeScript のように、最後の引数として名前とlist型で -定義します。例えば、数値の可変長引数の例は以下のとおりです: > +可変引数は最後の引数として定義され、名前を持ち、TypeScript と同様にリスト型を +持つ。例えば、数値のリストは次のようになる: > def MyFunc(...itemlist: list) for item in itemlist ... -関数の引数が任意 (引数に既定値が指定されている場合) のときは、その引数に -`v:none` を渡すことでその既定値を使うことができます。これは既定値を使いたい引数 -の後ろの引数に値を指定したいときに便利です。例: > +関数の引数が任意 (デフォルト値を持つ) の場合、引数として `v:none` を渡すとデ +フォルト値が使用される。これは、デフォルト値を使用する引数の後に来る引数の値を +指定する場合に便利である。例: > def MyFunc(one = 'one', last = 'last') ... enddef MyFunc(v:none, 'LAST') # 第 1 引数は既定値の 'one' を使う < *vim9-ignored-argument* *E1181* -引数 "_" (アンダースコア) は引数を無視するのに使えます。これは使わないが呼び出 -す際に一致するように引数を与えないといけないようなコールバックにおいて一番便利 -です。例えば、map() を使っていて、キーと値の 2 つの引数が与えられる時に引数の -キーを無視するには: > +引数 "_" (アンダースコア) は、引数を無視するために使用できる。これは引数は必要 +ではないが、呼び出しに一致する引数を与える必要があるコールバックで最も役立つ。 +例えば、map() を使用する場合、キーと値の 2 つの引数が渡され、キーを無視するに +は: > map(numberList, (_, v) => v * 2) -引数に "_" を複数回使ってもエラーにはなりません。また、型も指定する必要はあり -ません。 +"_" 引数を複数回使用してもエラーは発生しない。タイプを指定する必要はない。 関数と変数はデフォルトでスクリプトローカル ~ *vim9-scopes* -Vim9 script でスクリプト直下に `:function` や `:def` を使って関数を定義する -と、関数はプリフィックス "s:" をつけた際のように、スクリプトローカルで定義され -ます。グローバルスコープの関数や変数を定義するにはプリフィックス "g:" をつける -必要があります。スクリプト内の関数のうち他のスクリプトから import されるものと -オートロードスクリプト内の関数について、他のスクリプトで利用できるようにするた -めには "export" をつける必要があります。 > +Vim9 script のスクリプトレベルで `:function` または `:def` を使用して新しい関 +数を指定する場合、関数はスクリプトローカルになる。旧来のスクリプトで "s:" をプ +レフィックスとして付けるのと同じである。グローバル関数または変数を定義するに +は、"g:" プレフィックスを使用する必要がある。インポートされるスクリプト内の関 +数や自動ロードスクリプト内の関数を他の場所で使用するには、"export" を使用する +必要がある。 > def ThisFunction() # スクリプトローカル def g:ThatFunction() # グローバル - export def Function() # import と import autoload 関数 + export def Function() # import および import autoload 用 < *E1058* *E1075* -`:def` で定義される関数内で `:function` か `:def` でネストした関数を名前空間の -指定なしに作成したときは、ネストした関数はその関数が定義されたブロックにローカ -ルな関数になります。またその関数は `function()` に文字列を用いて渡すことはでき -ず、その関数自身の参照を渡さなければいけません: > +`:def` 関数内で `:function` または `:def` を使用してネストされた関数を指定し、 +名前空間が指定されていない場合、このネストされた関数は定義されているコードブ +ロックに対してローカルになる。文字列引数を持つ `function()` で使用することはで +きない。関数参照自体を渡すこと: > def Outer() def Inner() echo 'inner' @@ -271,27 +260,26 @@ Vim9 script でスクリプト直下に `:function` や `:def` を使って関 var Fok = function(Inner) # OK var Fbad = function('Inner') # 動作しない -詳細: これは "Inner" が実際には生成された名前 {訳注: XXX のこと。} を -もつ関数への関数参照になるからです。 +詳細: これは、"Inner" が実際には生成された名前を持つ関数への関数参照になるため +である。 -関数の中でスクリプトローカル関数を定義することはできません。代わりにローカル関 -数を定義して、それをスクリプトローカルな Funcref (これはスクリプトレベルで定義 -されていないといけません) に代入することができます。グローバル関数はプリフィッ -クス "g:" を使うことで定義できます。 +関数内でスクリプトローカル関数を定義することはできない。ローカル関数を定義し +て、それをスクリプトローカル Funcref に割り当てることができる (スクリプトレベ +ルで宣言されている必要がある)。"g:" プリフィックスを使用してグローバル関数を定 +義することは可能である。 -関数をプリフィックス "s:" や "g:" をつけずに参照した場合、Vim は関数を次のよう -に探します: -- 同じ関数の中、ブロックスコープの中 -- スクリプトスコープの中 +関数を参照するときに "s:" または "g:" プリフィックスが使用されていない場合、 +Vim は関数を次の場所で検索する: +- 関数スコープ内、ブロックスコープ内 +- スクリプトスコープ内 -import された関数は、`:import` コマンドで決まる名前を前置して見つけられます。 +import された関数は、`:import` コマンドのプリフィックスで見つかる。 -スクリプトローカル関数の参照が "s:" をつけることなく使えるので、スクリプトロー -カル関数の名前はプリフィックス "s:" をつけて宣言した場合でも大文字から始まる必 -要があります。旧来の Vim script では "s:funcref" とすることができました。なぜ -なら、"s:funcref" を "funcref" として参照することができなかったからです。しか -し Vim9 script ではそれが可能なので、組み込み関数との名前の干渉を避けるため -に "s:Funcref" のように名前が指定される必要があります。 +スクリプトローカル関数の参照は "s:" なしでも使用できるため、"s:" プリフィック +スを使用する場合でも、名前は大文字で始まる必要がある。旧来のスクリプトで +は、"funcref" で参照できなかったため、"s:funcref" を使用できた。Vim9 script で +は参照できるため、組み込み関数と名前が干渉しないように、"s:Funcref" を使用する +必要がある。 *vim9-s-namespace* *E1268* Vim9 script において、スクリプトレベルでのプリフィックス "s:" の使用はサポート されていません。プリフィックスのない全ての関数と変数は全てスクリプトローカルに From 797210b96d52ccc16fcd1995c2e1cfe8652674b1 Mon Sep 17 00:00:00 2001 From: h-east Date: Sat, 8 Mar 2025 02:24:28 +0900 Subject: [PATCH 2/7] Fix by nvcheck --- doc/vim9.jax | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/vim9.jax b/doc/vim9.jax index 0605335a3..dbe485541 100644 --- a/doc/vim9.jax +++ b/doc/vim9.jax @@ -73,7 +73,7 @@ Vim9 script と旧来の Vim script を混在させることができる。古 概要 ~ *E1146* -Vim9 スクリプトと :def 関数を使用するときに最も頻繁に遭遇する違いの簡単な概要。 +Vim9 script と :def 関数を使用するときに最も頻繁に遭遇する違いの簡単な概要。 詳細は以下の通り: - コメントは " ではなく、# で始める: > echo "hello" # コメント @@ -149,8 +149,8 @@ Vi では、# は数字付きのテキストをリストするコマンドであ たたみを開始するために使用できる。 スクリプトファイルの読み込みを開始すると、Vim は `vim9script` コマンドが見つか -るまではそれが |Vim9| スクリプトであることを認識しない。その時点までは、旧来の -コメントを使用する必要がある: > +るまではそれが |Vim9| script であることを認識しない。その時点までは、旧来のコ +メントを使用する必要がある: > " 旧来のコメント vim9script # Vim9 のコメント @@ -241,10 +241,10 @@ Vim9 関数 ~ *vim9-scopes* Vim9 script のスクリプトレベルで `:function` または `:def` を使用して新しい関 数を指定する場合、関数はスクリプトローカルになる。旧来のスクリプトで "s:" をプ -レフィックスとして付けるのと同じである。グローバル関数または変数を定義するに -は、"g:" プレフィックスを使用する必要がある。インポートされるスクリプト内の関 -数や自動ロードスクリプト内の関数を他の場所で使用するには、"export" を使用する -必要がある。 > +リフィックスとして付けるのと同じである。グローバル関数または変数を定義するに +は、"g:" プリフィックスを使用する必要がある。インポートされるスクリプト内の関 +数やオートロードスクリプト内の関数を他の場所で使用するには、"export" を使用す +る必要がある。 > def ThisFunction() # スクリプトローカル def g:ThatFunction() # グローバル export def Function() # import および import autoload 用 From 4287e0b79dbd591e65a8a278264cf8b88466154b Mon Sep 17 00:00:00 2001 From: h-east Date: Sat, 8 Mar 2025 11:16:01 +0900 Subject: [PATCH 3/7] Change until just before *E1150* --- doc/vim9.jax | 47 ++++++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/doc/vim9.jax b/doc/vim9.jax index dbe485541..c4cd9e9c7 100644 --- a/doc/vim9.jax +++ b/doc/vim9.jax @@ -281,36 +281,33 @@ import された関数は、`:import` コマンドのプリフィックスで見 は参照できるため、組み込み関数と名前が干渉しないように、"s:Funcref" を使用する 必要がある。 *vim9-s-namespace* *E1268* -Vim9 script において、スクリプトレベルでのプリフィックス "s:" の使用はサポート -されていません。プリフィックスのない全ての関数と変数は全てスクリプトローカルに -なります。 +Vim9 script レベルでは、プリフィックス "s:" の使用はサポートされていない。プリ +フィックスのないすべての関数と変数はスクリプトローカルである。 -`:def` で定義される関数内においては、"s:" の使用はスクリプト依存です: 旧来の -Vim script 内ではスクリプトローカルな関数と変数に対して "s:" を使いますが、 -Vim9 script 内では使いません。これはこのドキュメントの以下の説明でも同様です。 +:def 関数では、"s:" の使用はスクリプトによって異なる。旧来のスクリプトのスクリ +プトローカル変数と関数は "s:" を使用するが、Vim9 script では "s:" を使用しな +い。これは、このファイルの残りの部分で見られる内容と一致する。 -旧来の関数内においては、スクリプトローカルな項目に対しての "s:" の指定は従来通 -り必要です。これはスクリプトが Vim9 script であろうが旧来の Vim script であろ -うが関係ありません。 +旧来の関数では、スクリプト項目に "s:" を以前と同様に使用する必要がある。スクリ +プトが Vim9 であるか旧来のものであるかは関係ない。 -いずれの場合でも、関数は使用されるよりも前に定義されていなくてはなりません。使 -用されるタイミングは、コマンド `:defcompile` によってコンパイルされるとき、ま -たは関数を呼び出す関数がコンパイルされているとき(戻り値の型を確認するため)で -す。 +いずれの場合も、関数は使用前に定義する必要がある。つまり、関数が呼び出されると +き、`:defcompile` によってコンパイルされるとき、または関数を呼び出すコードがコ +ンパイルされるとき (戻り値の型を判断するため) である。 -その結果として、名前空間を持たない関数や変数は通常、スクリプト内で定義されてい -るか、import されたものかのどちらかで見つけることができます。グローバルな関数 -や変数はどこでも定義できます (どこで定義されているか、見つかるといいですね!し -ばしば |:verbose| を使ってどこで最後に値がセットされたか調べることができます)。 +その結果、名前空間のない関数と変数は通常、スクリプト内で定義されるか、import +されるかのどちらかで見つかる。グローバル関数と変数はどこでも定義できる (どこで +定義されているか見つけるのは大変である! |:verbose| を使用して最後に設定された +場所を確認できる場合がよくある)。 *E1102* -グローバル関数は引き続き、ほとんどいつでも定義し、削除することができます。Vim9 -script でのスクリプトローカル関数は、スクリプトが読み込まれたときに一度定義さ -れたきり、そのスクリプト内で削除や置き換えはできません (スクリプトローカル関数の -削除や置き換えはスクリプトの再読み込みをすることでできます)。 - -関数のコンパイルや、関数の呼び出しが未定義の関数に遭遇したとき、自動コマンド -|FuncUndefined| は呼び出されません。必要であればオートロード関数を使用したり、 -旧来の関数を呼び出すことで |FuncUndefined| イベントが発生します。 +グローバル関数は、ほぼいつでも定義および削除できる。Vim9 script では、スクリプ +トローカル関数はスクリプトが読み込まれたときに一度定義され、それ自体では削除ま +たは置換できない (スクリプトを再読み込みすることで削除または置換できる)。 + +関数をコンパイルし、(まだ) 定義されていない関数の関数呼び出しに遭遇した場合、 +|FuncUndefined| 自動コマンドはトリガーされない。必要であれば、オートロード関数 +を使用するか、旧来の関数を呼び出してそこで |FuncUndefined| をトリガーすること +もできる。 デフォルトでは Vim9 script の再読み込みにより関数と変数がクリアされる ~ From e54da86d0b5a340ccb5c29fb71804407784ef6f8 Mon Sep 17 00:00:00 2001 From: h-east Date: Mon, 17 Mar 2025 23:09:34 +0900 Subject: [PATCH 4/7] Change until just before *E1133* --- doc/vim9.jax | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/doc/vim9.jax b/doc/vim9.jax index c4cd9e9c7..41bea71ef 100644 --- a/doc/vim9.jax +++ b/doc/vim9.jax @@ -312,21 +312,20 @@ Vim9 script レベルでは、プリフィックス "s:" の使用はサポー デフォルトでは Vim9 script の再読み込みにより関数と変数がクリアされる ~ *vim9-reload* *E1149* *E1150* -旧来の Vim script を2回目に読み込んだときは、何も削除されることはなく、コマン -ドはすでにある変数や関数を置き換えて新しいものを作り、置き換えられなかったもの -はそのまま残しておきます。 +旧来の Vim script を 2 回目に読み込むと、何も削除されず、コマンドによって既存 +の変数と関数が置き換えられ新しいものが作成され、削除されたものはそのまま残る。 -Vim9 script を2回目に読み込んだときは、存在するすべてのスクリプトローカルの関 -数や変数は削除され、クリーンな状態から開始します。これはプラグインを開発中に、 -新しいバージョンを試す際には便利です。いずれかの名前を変えたとしても、古い名前 -が残る心配はありません。 +Vim9 script を 2 回目に読み込むと、既存のスクリプトローカル関数と変数がすべて +削除されるため、クリーンの状態から開始できる。これはプラグインを開発中に新しい +バージョンを試したい場合に便利である。何かの名前を変更した場合、古い名前が残っ +ていることを心配する必要はない。 -消さずに残すには、以下を使用します: > +アイテムを保持したい場合は、以下を使用する: > vim9script noclear -これを使用することで、再読み込みの際に任意の場所で `finish` コマンドにより脱出 -することができます。例えば、バッファローカルオプションが関数に設定され、その関 -数を2回以上定義する必要がないとき: > +これは、再度読み込まれたときに、どこかの時点で `finish` コマンドを使用して抜け +出すスクリプトで使用することを想定してる。例えば、バッファローカルなオプション +が関数に設定されている場合、関数を複数回定義する必要はない: > vim9script noclear setlocal completefunc=SomeFunc if exists('*SomeFunc') @@ -339,11 +338,10 @@ Vim9 script を2回目に読み込んだときは、存在するすべてのス :var、:final や :const で宣言する変数 ~ *vim9-declaration* *:var* *E1079* *E1017* *E1020* *E1054* *E1087* *E1124* -ローカル変数は `:var` で定義する必要があります。ローカル定数は `:final` または -`:const` で定義する必要があります。このセクションでは、両者を "変数" と呼ぶこ -とにします。 +ローカル変数は `:var` で宣言する必要がある。ローカル定数は `:final` または +`:const` で宣言する必要がある。このセクションでは、両方を "変数" と呼ぶ。 -変数はスクリプトローカルや、関数、コードブロックのスコープで定義できます: > +変数はスクリプト、関数、またはコードブロックに対しローカルにすることができる: > vim9script var script_var = 123 def SomeFunc() @@ -352,8 +350,8 @@ Vim9 script を2回目に読み込んだときは、存在するすべてのス var block_var = func_var ... -変数は、定義されたコードブロックか、ネストされた配下のブロックで参照することが -できます。コードブロックが終わったあとの処理から参照することはできません: > +変数は、それが定義されているブロックとネストされたブロック内でのみ参照できる。 +ブロックが終了すると変数にはアクセスできなくなる: > if cond var inner = 5 else @@ -361,7 +359,7 @@ Vim9 script を2回目に読み込んだときは、存在するすべてのス endif echo inner # エラー! -参照したい場合には、ブロックよりも前で宣言しなくてはなりません: > +宣言は早めに行う必要がある: > var inner: number if cond inner = 5 @@ -370,21 +368,21 @@ Vim9 script を2回目に読み込んだときは、存在するすべてのス endif echo inner -こちらの方が単純な値については簡潔で早くはありますが。: > +単純な値の場合は、これは短くて高速である: > var inner = 0 if cond inner = 5 endif echo inner < *E1025* *E1128* -意図的に続く処理から変数を隠したいとき、ブロックを使うことができます: > +後続のコードから意図的に変数を隠すには、ブロックを使用できる: > { var temp = 'temp' ... } echo temp # エラー! -これは特にユーザーコマンドで便利です: > +これはユーザーコマンドで特に役立つ: > command -range Rename { var save = @a @a = 'some expression' @@ -392,14 +390,14 @@ Vim9 script を2回目に読み込んだときは、存在するすべてのス @a = save } -また、自動コマンドでも便利です: > +自動コマンドでの場合: > au BufWritePre *.go { var save = winsaveview() silent! exe ':%! some formatting command' winrestview(save) } -多分 `:def` で定義される関数を使う方が良く動くでしょうが。 +ただし、:def 関数を使用する方がおそらくうまく動作する。 *E1022* *E1103* *E1130* *E1131* *E1133* *E1134* From 19f0a90c3920ef350733f55ef04cd499590140fc Mon Sep 17 00:00:00 2001 From: h-east Date: Thu, 1 May 2025 00:56:12 +0900 Subject: [PATCH 5/7] Change until just before *vim9-const* --- doc/vim9.jax | 79 ++++++++++++++++++++++++++-------------------------- 1 file changed, 40 insertions(+), 39 deletions(-) diff --git a/doc/vim9.jax b/doc/vim9.jax index 41bea71ef..e6e18da73 100644 --- a/doc/vim9.jax +++ b/doc/vim9.jax @@ -401,93 +401,94 @@ Vim9 script を 2 回目に読み込むと、既存のスクリプトローカ *E1022* *E1103* *E1130* *E1131* *E1133* *E1134* -変数を型を指定し、初期値なしで宣言した場合、変数は false (bool 型のとき)、空 -(string、list、dict などの型のとき)、あるいはゼロ (number、any などの型のとき) -で初期化されます。これは "any" 型を使う時に特に重要で、初期値は数字のゼロとな -ります。例えば、リストを宣言したとき、要素を追加することができます: > +型を指定して変数を宣言し初期化子を指定しない場合、値は false (boolの場合)、空 +(文字列、リスト、辞書などの場合)、ゼロ (数値、any などの場合) に初期化される。 +これは特に "any" 型を使用する場合に重要で、値はデフォルトで数値のゼロになる。 +例えば、リストを宣言する場合、以下のように項目を追加できる: > var myList: list myList->add(7) -変数を null、例えば `null_list`、で初期化することは変数を初期化しないこととは -異なります。これはエラーになります: > +変数を null 値、例えば `null_list`、で初期化することは、変数を初期化しないこと +とは異なる。これはエラーが発生する: > var myList = null_list myList->add(7) # E1130: null リストには追加できません < *E1016* *E1052* *E1066* -Vim9 script では `:let` は使用できません。すでに存在する変数に対してはコマンド -を使用せずに代入します。実際に宣言されることがないので、グローバル変数、ウィン -ドウ変数、タブ変数、バッファ変数、そして Vim の定義済変数についてもコマンドを -使用せずに代入します。またそれらの変数は `:unlet` によって削除することもできま -す。 +Vim9 script では`:let` は使用できない。既存の変数にコマンドなしで代入される。 +グローバル変数、ウィンドウ変数、タブ変数、バッファ変数および Vim 変数も同様で +ある。これらは実際には宣言されていないためである。`:unlet` で削除することもで +きる。 *E1065* -変数を `:va` で宣言することはできず、それは必ず完全な名前の `:var` として書か -れなければなりません。これはコードを読みやすくするためのものです。 +変数の宣言に `:va` は使用できない。`:var` という完全な名前で記述する必要があ +る。読みやすさを確保するためである。 *E1178* -`:lockvar` はローカル変数に対しては動作しません。代わりに `:const` か `:final` -を使ってください。 +`:lockvar` はローカル変数では動作しない。代わりに `:const` および `:final` を +使用する。 -`exists()` 関数と `exists_compiled()` 関数はローカル変数あるいは引数に対しては -動作しません。 +`exists()` および `exists_compiled()` 関数は、ローカル変数または引数では動作し +ない。 *E1006* *E1041* *E1167* *E1168* *E1213* -変数と関数と関数の引数は、同じスクリプトファイル内で、すでに定義された、または -import された変数と関数をシャドーイングすることはできません。一方で変数は -Ex コマンドをシャドーイングするので、必要であれば変数の名前を変更してください。 +変数、関数および関数の引数は、同じスクリプトファイル内で既に定義またはインポー +トされた変数や関数をシャドウすることはできない。 +変数は Ex コマンドをシャドウすることがあるので、必要に応じて変数名を変更するこ +と。 -グローバル変数の前には、スクリプトレベルでも "g:" を付けなければなりません。 > +グローバル変数はスクリプトレベルでも "g:" をプリフィックスとして付ける必要があ +る。 > vim9script var script_local = 'text' g:global = 'value' var Funcref = g:ThatFunction -グローバル関数は必ず先頭に "g:" を付けなければなりません: > +グローバル関数には "g:" というプリフィックスを付ける必要がある: > vim9script def g:GlobalFunc(): string return 'text' enddef echo g:GlobalFunc() -プリフィックス "g:" はオートロード関数に対しては必要ありません。 +オートロード関数には "g:" プリフィックスは必要ない。 *vim9-function-defined-later* -グローバル関数はプリフィックス "g:" なしに呼び出すことができますが、それらはコ -ンパイル時に存在していなければなりません。プリフィックスを "g:" をつけること -で、関数が後で定義されても良くなります。例: > +グローバル関数は "g:" プリフィックスなしでも呼び出すことができるが、コンパイル +時に存在している必要がある。"g:" プリフィックスを追加することで、関数を後から +定義できる。例: > def CallPluginFunc() if exists('g:loaded_plugin') g:PluginFunc() endif enddef -もしこのようにすると、たとえ "g:loaded_plugin" が存在しない場合でも、コンパイ -ル時に "PluginFunc" が存在しないというエラーが発生します: > +以下のようにすると、"g:loaded_plugin" が存在しない場合でも、コンパイル時に +"PluginFunc" が存在しないというエラーが発生する: > def CallPluginFunc() if exists('g:loaded_plugin') PluginFunc() # エラー、関数が見つからない endif enddef -`exists_compiled()` を使うことでエラーを回避できますが、この場合は -"g:loaded_plugin" が後で定義されている場合でもその関数は呼ばれません: > +このエラーを回避するために exists_compiled() を使用できるが、その後で +"g:loaded_plugin" が定義されたとしても、この関数は呼び出されない: > def CallPluginFunc() if exists_compiled('g:loaded_plugin') PluginFunc() # 関数が呼ばれることはないかもしれない endif enddef -現在、`&opt = value` は "opt" オプションに値を設定する目的で使用されているた -め、`:substitute` コマンドをリピートする目的で ":&" を使用することはできません。 +`&opt = value` はオプション "opt" に値を代入するようになったため、":&" を使用 +して `:substitute` コマンドを繰り返すことはできない。 *vim9-unpack-ignore* -アンパック代入において、アンダースコアは、関数の引数を無視するのと似たように -リストの要素を無視するのに使えます: > +アンパック代入では、関数の引数を無視するのと同様に、アンダースコアを使用してリ +スト項目を無視できる: > [a, _, c] = theList -残りの要素全部を無視するには: > +残りの項目を無視するには: > [a, b; _] = longList < *E1163* *E1080* -アンパックの記法を用いて、一つ以上の変数を一度に宣言することが可能です。 -それぞれの変数は型を持つか、値から型を推測することができます: > +アンパック記法を用いることで、1 度に複数の変数を宣言することが可能である。各変 +数は型を持つか、値から型を推測することができる: > var [v1: number, v2] = GetValues() -これは値を持つリストがある時にのみ利用してください。1行に 1変数を宣言する方が -より読みやすく、後の変更も行いやすいです。 +値を含むリストがある場合にのみこれを使用する。1 行に 1 つの変数を宣言すると、 +読みやすく後で変更しやすくなる。 定数 ~ From 7a888eca9622f9baf9720aab2a2a1defa5f8eaf3 Mon Sep 17 00:00:00 2001 From: h-east Date: Tue, 22 Jul 2025 00:04:21 +0900 Subject: [PATCH 6/7] Change until just before *E1157* --- doc/vim9.jax | 82 ++++++++++++++++++++++++++-------------------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/doc/vim9.jax b/doc/vim9.jax index e6e18da73..adc9b57cc 100644 --- a/doc/vim9.jax +++ b/doc/vim9.jax @@ -493,29 +493,28 @@ Vim9 script では`:let` は使用できない。既存の変数にコマンド 定数 ~ *vim9-const* *vim9-final* -定数の働きは言語によって異なります。別の値を代入できない変数を定数とする場合も -あります。JavaScript がその一例です。また、値そのものを不変にすることもあり、 -例えばリスト定数の内容を変更することができないとしている場合もあります。 -Vim9ではこのどちらも定義することができます。 +定数の扱い方は言語によって異なる。ある言語では、別の値を代入できない変数を定数 +とみす。JavaScript がその一例である。また、他の言語では値を不変とするため、定 +数がリストを使用している場合は、リストを変更できない。Vim9 では、どちらも使用 +できる。 *E1021* *E1307* -変数とその値、両方を定数とするには、`:const` を使用します。何らかの複合的な値 -が変更できないようにする際に使用します。例: > +`:const` は、変数と値の両方を定数にするために使用される。これは、変更されない +ことを確実にしたい複合構造に使用する。例: > const myList = [1, 2] myList = [3, 4] # エラー! myList[0] = 9 # エラー! myList->add(3) # エラー! < *:final* *E1125* -変数の変更のみを禁止するには、`:final` を使用します。この場合は、中の値自体を -変えることはできます。Java でよく知られるものです。例: > +`:final` は変数を定数にするために使用され、値は変更可能である。これは Java で +よく知られている。例: > final myList = [1, 2] myList = [3, 4] # エラー! myList[0] = 9 # OK myList->add(3) # OK -一般に、定数はすべて大文字 (例: ALL_CAPS) で書かれますが、必ずしもそうしなくて -も構いません。 +定数は ALL_CAPS (すべて大文字) で書くのが一般的であるが、必須ではない。 -定数宣言は値そのものにのみ適用され、参照先の変数には影響しません。 > +この定数は値自体にのみ適用され、それが参照するものには適用されない。 > final females = ["Mary"] const NAMES = [["John", "Peter"], females] NAMES[0] = ["Jack"] # エラー! @@ -524,15 +523,15 @@ Vim9ではこのどちらも定義することができます。 NAMES[1][0] = "Emma" # OK, females[0] == "Emma" -:call と :eval は不要に ~ +:call と :eval の省略 ~ *E1190* -関数は `:call` なしで呼ぶことができます: > +関数は `:call` なしで呼ぶことができる: > writefile(lines, 'file') -`:call` は引き続き使用できますが、やめたほうが良いでしょう。 +`:call` の使用はまだ可能だが、推奨されない。 -メソッド呼び出しには `eval` は必要ありません。Exコマンドと同名の識別子ではない -限り、直接に識別子から呼び出すことができます。関数の場合は、"(" または "->"の -どちらかを改行せずに続けなければなりません。例: > +`eval` なしのメソッド呼び出しは、先頭が識別子であるか、Ex コマンドでない限り可 +能である。関数の場合は、改行なしで "(" または "->" のいずれかが続く必要がある。 +例: > myList->add(123) g:myList->add(123) [1, 2, 3]->Process() @@ -542,45 +541,46 @@ Vim9ではこのどちらも定義することができます。 'foobar'->Process() ('foobar')->Process() -一部の関数と Ex コマンドが紛らわしい場合、コロン (:) を前置することでそれが Ex -コマンドであることを明示することができます。例えば、`:substitute` コマンドと -`substitute()` が該当します。`substitute(` で始まる場合は関数呼び出しですが、 -コロンを前置することでコマンドを代わりに使用することができます: > +関数名と Ex コマンドが曖昧になる稀なケースでは、Ex コマンドを使用することを明 +確にするために、先頭に ":" を付ける。例えば、`:substitute` コマンドと +`substitute()` 関数の両方がある。行が `substitute(` で始まる場合は関数が使用さ +れる。代わりにコマンドを使用する場合は、先頭にコロンを付ける: > :substitute(pattern (replacement ( -もし式が "!" で始まっているのであれば、それは条件の否定ではなくシェルコマンド -であると解釈されます。したがって、これはシェルコマンドとなります: > +式が "!" で始まる場合、これは条件の否定ではなくシェルコマンドとして解釈される。 +つまり、これはシェルコマンドである: > !shellCommand->something -"!" を否定として用いるには、式を丸カッコで囲んでください: > +否定を表す "!" を使用するには、式を括弧で囲む: > (!expression)->Method() -Note 変数は使用する前に宣言する必要がありますが、関数は宣言するより前に使用で -きます。これは関数の循環参照を可能にするためです。関数を名前で探さなければなら -ないので、少し効率が悪いです。また、関数名のタイプミスは、関数が呼び出されると -きまで見つかりません。 +Note 変数は使用する前に定義する必要があるが、関数は定義前に呼び出すことができ +る。これは、関数間の循環的な依存関係を可能にするために必要である。関数を名前で +検索する必要があるため、効率は少し悪くなる。また、関数名のタイプミスは、関数が +呼び出されたときにのみ検出される。 -function() は不要に ~ +function() の省略 ~ -ユーザー定義の関数は、`function()` を使わずとも関数リファレンスとして使用する -ことができます。引数の型と戻り値の型がチェックされます。関数はすでに定義されて -いる必要があります。 > +ユーザー定義関数は、`function()` を使わずに式の中で関数参照として使用できる。 +その場合、引数の型と戻り値の型がチェックされる。関数は事前に定義されている必要 +がある。 > var Funcref = MyFunction -`function()` を使って "func" 型のリファレンスを得た場合、その関数は任意の個数 -の引数と任意の戻り値の型 (void を含めて) を持つものとされます。この場合、もし -関数名がクォートで囲まれてるなら、その関数は後から宣言できます。 +`function()` を使用すると、結果の型は "func" になる。これは、任意の数の引数と +任意の戻り値 (void を含む) を持つ関数である。引数をクォートで囲めば、関数は後 +で定義できる。 -ラムダ式には -> の代わりに => を使う ~ +ラムダ式は -> の代わりに => を使う ~ *vim9-lambda* -旧来のスクリプトでは "->" はメソッド呼び出しとラムダ式で混同するおそれがありま -す。また、"{" が見つかったとき、パーサーはラムダ式と辞書の開始を見分けねばなら -ず、そしてそれは引数の型指定により複雑になっています。 +旧来のスクリプトでは、メソッド呼び出しとラムダ式で "->" を使用することが混乱を +招く可能性がある。また、"{" が見つかった場合、パーサーはそれがラムダ式の開始な +のか辞書の開始なのかを判断する必要があるが、引数の型が使用されるようになったた +め、この判断はより複雑になっている。 -この問題を回避するため、Vim9 script ではラムダ式のために違う書式を使用し、それ -は JavaScript に似ています: > +これらの問題を回避するために、Vim9 script は JavaScript に似たラムダ式の異なる +構文を使用する: > var Lambda = (arg) => expression var Lambda = (arg): type => expression < *E1157* From 0f70917e4273e89850a6f048fe77e8a6f7be14fa Mon Sep 17 00:00:00 2001 From: h-east Date: Wed, 30 Jul 2025 22:09:18 +0900 Subject: [PATCH 7/7] Change until just before *E1004* --- doc/vim9.jax | 153 +++++++++++++++++++++++++-------------------------- 1 file changed, 74 insertions(+), 79 deletions(-) diff --git a/doc/vim9.jax b/doc/vim9.jax index adc9b57cc..635393f7f 100644 --- a/doc/vim9.jax +++ b/doc/vim9.jax @@ -584,56 +584,54 @@ function() の省略 ~ var Lambda = (arg) => expression var Lambda = (arg): type => expression < *E1157* -"=>" まで含めて、ラムダ式の引数の定義の中では改行することはできません (Vim が -丸カッコで囲まれた式とラムダ式の引数の区別をつけられるようにするため)。これは -OKです: > +ラムダ式の引数では、"=>" まで改行は許可されない (Vim が括弧内の式とラムダ式の +引数を区別できるようにするため)。これは OK である: > filter(list, (k, v) => v > 0) -以下のように記述することはできません: > +これは動作しない: > filter(list, (k, v) => v > 0) -以下のように記述することもできません: > +これも動作しない: > filter(list, (k, v) => v > 0) -ただし、バックスラッシュを使ってパースする前に行をつなげることができます: > +ただし、パースする前にバックスラッシュを使用して行を連結することができる: > filter(list, (k, \ v) \ => v > 0) < *vim9-lambda-arguments* *E1172* -旧来の Vim script においては、ラムダ関数はいくつもの余分な引数を与えて呼ぶこと -ができ、そしてその余分な引数を使わないことに対しての警告をする方法がありません -でした。Vim9 script では引数の数は必ず一致しなければなりません。もし任意の -引数、またはその他の引数を受け入れたい場合は、関数が |vim9-variable-arguments| -を受け入れられるようにする "..._" を使ってください。例: > +旧来の Vim scripy では、ラムダ式は任意の数の追加引数で呼び出すことができ、引数 +を指定しなかった場合の警告を出す方法がなかった。Vim9 script では、引数の数は一 +致している必要がある。任意の引数、あるいは追加の引数を受け入れたい場合は、 +"..._" を使用する。これにより、関数は |vim9-variable-arguments| を受け入れるよ +うになる。例: > var Callback = (..._) => 'anything' echo Callback(1, 2, 3) # "anything" を表示する < *inline-function* *E1171* -加えて、ラムダ式には {} に複数のステートメントを含むことができます: > +さらに、ラムダ式には {} 内のステートメント群を含めることができる: > var Lambda = (arg) => { g:was_called = 'yes' return expression } -これはタイマーに便利です。例えば: > +これはタイマーに役立つ。例えば: > var count = 0 var timer = timer_start(500, (_) => { count += 1 echom 'Handler called ' .. count }, {repeat: 3}) -閉じの "}" は行の先頭にこなければなりません。後ろに他の文字が続いても良いで -す。例: > +終わりの "}" は行頭になければならない。その後に他の文字を続けることもできる。 +例: > var d = mapnew(dict, (k, v): string => { return 'value' }) -いかなるコマンドも "{" の後ろに続いてはいけません。コメントのみが利用可能で -す。 +"{" の後にコマンドは使用できない。コメントのみ使用できる。 *command-block* *E1026* -ブロックはユーザーコマンドを定義するのにも使えます。ブロックの内側では Vim9 -script の文法が使われます。 +このブロックはユーザーコマンドの定義にも使用できる。ブロック内では Vim9 script +の構文が使用される。 -これはヒアドキュメントの使用例です: > +以下はヒアドキュメントの使用例である: > com SomeCommand { g:someVar =<< trim eval END ccc @@ -641,31 +639,30 @@ script の文法が使われます。 END } -もしブロックが辞書を含むのであれば、辞書の閉じカッコは行頭に書かれてはいけませ -ん。さもなくば閉じカッコがブロックの終了としてパースされてしまいます。これは動 -作しません: > +文に辞書が含まれる場合、その閉じ括弧を行頭に記述してはいけない。そうしないと、 +ブロックの終わりとして解釈されてしまう。これは動作しない: > command NewCommand { g:mydict = { 'key': 'value', } # エラー: ブロックの終了として認識される } -これを避けるには、'}' を最後の要素の後ろにおいてください: > +これを回避するには、最後の項目の後に '}' を配置する: > command NewCommand { g:mydict = { 'key': 'value' } } -根拠: "}" がコマンドの後にきてはならないのは、ブロックの閉じカッコを見つけるの -にコマンドのパースが必要だろうからです。一貫性のために、いかなるコマンドも "{" -に続けることはできません。残念ながら、これは "() => { command }" が動作せず、 -常に改行が必要であることを意味します。 +理由: コマンドの後に "}" を置くことはできない。コマンドをパースして "}" を見つ +ける必要があるためである。一貫性を保つため、"{" の後にコマンドを置くことはでき +ない。残念ながら、これは "() => { command }" という表現が機能しないことを意味 +する。常に改行が必要である。 *vim9-curly* -辞書リテラルの "{" がステートメントブロックと認識されてしまうのを回避するため -には、括弧で包みます: > +辞書リテラルの "{" がステートメントブロックとして認識されるのを避けるには、そ +れを括弧で囲む: > var Lambda = (arg) => ({key: 42}) -さらに、コマンドブロックの開始と混同してしまう場合: > +また、コマンドブロックの開始と混同された場合: > ({ key: value })->method() @@ -673,26 +670,26 @@ script の文法が使われます。 自動行継続 ~ *vim9-line-continuation* *E1097* -多くの場合、式が次の行に続くことは明らかです。継続行の先頭に行継続のためのバッ -クスラッシュ (|line-continuation| 参照) を置く必要はありません。例えば、複数行 -にまたぐリストの場合: > +多くの場合、式が次の行に続くことは明らかである。そのような場合、行頭にバックス +ラッシュ (|line-continuation| を参照) を付ける必要はない。例えば、リストが複数 +行にまたがる場合: > var mylist = [ 'one', 'two', ] -辞書の場合: > +辞書が複数行にまたがる場合: > var mydict = { one: 1, two: 2, } -関数の呼び出しで: > +関数呼び出しの場合: > var result = Func( arg1, arg2 ) -角カッコ []、波カッコ {}、または丸カッコの中‘以外で’二項演算子御使用する場 -合、その前後で改行することができます。例: > +[]、{}、() 以外の式における二項演算子については、演算子の直前または直後で改行 +が可能である。例: > var text = lead .. middle .. end @@ -703,8 +700,8 @@ script の文法が使われます。 ? PosFunc(arg) : NegFunc(arg) -"->" を使用したメソッド呼び出し、そしてドット (.) を使用したメンバー参照の場 -合、その前に改行を置くことができます: > +"->" を使用するメソッド呼び出しとドットを使用するメンバーの場合、その前に改行 +が許可される: > var result = GetBuilder() ->BuilderSetWidth(333) ->BuilderSetHeight(777) @@ -712,101 +709,99 @@ script の文法が使われます。 var result = MyDict .member -複数のコマンドのリストを引数に持つコマンドでは、行の先頭に置かれた文字 | は行 -継続を表します: > +コマンドリストを引数として持つコマンドの場合、行の先頭の | 文字は行の継続を示 +す: > autocmd BufNewFile *.match if condition | echo 'match' | endif -Note これはヒアドキュメントの最初の行は | で始めることができないことを意味しま -す: > +Note これは、ヒアドキュメントの最初の行をバーで始めることができないことを意味 +することに注意: > var lines =<< trim END | これは動作しない END -ヒアドキュメントの先頭行を空行にする、あるいはヒアドキュメントを使わないように -してください。あるいは一時的にフラグ "C" を 'cpoptions' に追加してください: > +先頭に空行を入れるか、ヒアドキュメントを使わないようにすること。あるいは、一時 +的に 'cpoptions' に "C" フラグを追加する: > set cpo+=C var lines =<< trim END | これは動作する END set cpo-=C -もしヒアドキュメントが関数の中で使われているのであれば、'cpoptions' は :def の -前で変更され、かつ :enddef の後ろで元に戻されなければなりません。 +ヒアドキュメントが関数内にある場合、'cpoptions' は :def の前に設定し、:enddef +の後に復元する必要がある。 -例えば長い Ex コマンドを分割しているときのような、依然として行連結にバックス -ラッシュが必要な場所では、'#\ ' でコメントを開始することができます: > +長い Ex コマンドを分割するなど、バックスラッシュによる行継続が必要な場所では、 +コメントを '#\ ' で開始することができる: > syn region Text \ start='foo' #\ コメント \ end='bar' -これは旧来の Vim script で '"\ ' が使われているのと似ています。またこれはバッ -クスラッシュ抜きで行連結が使用され、かつ行が | で開始しているときにも必要で -す: > +旧来の Vim script と同様に、'"\ ' が使用される。これは、バックスラッシュなしで +行継続が使用され、行がバーで始まる場合にも必要である: > au CursorHold * echom 'BEFORE bar' #\ 何かのコメント | echom 'AFTER bar' < *E1050* -行頭の演算子と識別できるようにするために、範囲指定の前にはコロンを置きます。 -"start" と "print" をつなげる例: > +行頭の演算子を認識できるようにするには、範囲の前にコロンを置く必要がある。次の +例では、"start" と "print" を追加する: > var result = start + print -これは以下の記述と同じです: > +以下と同様: > var result = start + print -次のように書くと、"start" を代入して、1行表示します: > +これにより、"start" が割り当てられ、1 行表示する: > var result = start :+ print -「範囲」の後ろには必ず Ex コマンドが続かなければなりません。コロンを付けてい -ない時は `:call` 抜きで関数を呼ぶことができますが、「範囲」の後ろではそれが必 -要です: > +範囲指定の後には Ex コマンドが必要である。コロンがなくても `:call` なしで関数 +を呼び出すことができるが、範囲指定の後には `:call` が必要である: > MyFunc() :% call MyFunc() -Note |+cmd| の引数にはコロンは不要です: > +Note |+cmd| 引数にはコロンは不要であることに注意: > edit +6 fname -関数の定義部においても、引数の間で改行をおくことができます: > +関数冒頭を引数間で複数行に分割することもできる: > def MyFunc( text: string, separator = '-' ): string -継続行を識別することは容易ではないため、コマンドの解析はより厳格化されていま -す。例えば、一行目のエラーにより、2行目は別のコマンドとみなされます: > +継続行は容易に認識できないため、コマンドのパースはより厳密になった。例えば、1 +行目のエラーのため、2 行目は別のコマンドとして認識される: > popup_create(some invalid expression, { exit_cb: Func}) -ここで "exit_cb: Func})" は実際に有効なコマンドです: 変更をファイル -"_cb: Func})" に保存して閉じます。Vim9 script の中ではこの種のミスを回避するた -めに、コマンド名と引数の間にはスペースを置かなくてはなりません。 +これで "exit_cb: Func})" は実際に有効なコマンドになった。つまり、"_cb: Func})" +ファイルへの変更を保存して終了する。Vim9 script でこのような間違いを避けるに +は、ほとんどのコマンド名と引数の間に空白を入れる必要がある。 *E1144* -ただし、コマンドの引数に置いたコマンドは認識されません。例えば、"windo echo -expr" に続く "expr" の式の中で改行しても認識されません。 +ただし、コマンドの引数がコマンドである場合は認識されない。例えば、"windo echo +expr" の後では、"expr" 内の改行は認識されない。 Notes: -- "enddef" は継続行の先頭に置くことはできません。それは関数の終端を意味します。 -- 代入式の左辺を複数の行に分割できません。特にリストのアンパック |:let-unpack| - を使用する場合は注意が必要です。これはOKです: > +- "enddef" は継続行の先頭では使用できない。現在の関数を終了させるためである。 +- 代入の左辺では改行は許可されない。特にリストを展開する場合に当てはまる + |:let-unpack|。これは OK である: > [var1, var2] = Func() -< 以下のように記述することはできません: > +< これは動作しない: > [var1, var2] = Func() -- `:echo` や `:execute` のようなコマンドの引数は複数の行に分割できません。これ - はOKです: > +- `:echo`、`:execute`、および類似のコマンドの引数の間には改行を入れることはで + きない。これは OK である: > echo [1, 2] [3, 4] -< 以下のように記述することはできません: > +< これは動作しない: > echo [1, 2] [3, 4] -- いくつかの場合、特に `:windo` のようなコマンドが他のコマンドの引数として使わ - れるような場合では、Vim にとってコマンドのパースが困難です。このような場合で - では、バックスラッシュを使った行継続を使わなければなりません。 +- Vim では、コマンドのパースが困難な場合がある。特に、`:windo` のようにコマン + ドが別のコマンドの引数として使用されている場合には、その傾向が顕著である。そ + のような場合は、バックスラッシュによる行継続を使用する必要がある。 ホワイトスペース ~