diff --git a/doc/vim9.jax b/doc/vim9.jax index 174a137cf..cacc29537 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| @@ -24,190 +24,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 script と :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| script であることを認識しない。その時点までは、旧来のコ +メントを使用する必要がある: > " 旧来のコメント 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 @@ -216,53 +207,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' @@ -270,77 +259,72 @@ 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:" の使用はサポート -されていません。プリフィックスのない全ての関数と変数は全てスクリプトローカルに -なります。 +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 でのスクリプトローカル関数は、スクリプトが読み込まれたときに一度定義さ -れたきり、そのスクリプト内で削除や置き換えはできません (スクリプトローカル関数の -削除や置き換えはスクリプトの再読み込みをすることでできます)。 +グローバル関数は、ほぼいつでも定義および削除できる。Vim9 script では、スクリプ +トローカル関数はスクリプトが読み込まれたときに一度定義され、それ自体では削除ま +たは置換できない (スクリプトを再読み込みすることで削除または置換できる)。 -関数のコンパイルや、関数の呼び出しが未定義の関数に遭遇したとき、自動コマンド -|FuncUndefined| は呼び出されません。必要であればオートロード関数を使用したり、 -旧来の関数を呼び出すことで |FuncUndefined| イベントが発生します。 +関数をコンパイルし、(まだ) 定義されていない関数の関数呼び出しに遭遇した場合、 +|FuncUndefined| 自動コマンドはトリガーされない。必要であれば、オートロード関数 +を使用するか、旧来の関数を呼び出してそこで |FuncUndefined| をトリガーすること +もできる。 デフォルトでは 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') @@ -353,11 +337,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() @@ -366,8 +349,8 @@ Vim9 script を2回目に読み込んだときは、存在するすべてのス var block_var = func_var ... -変数は、定義されたコードブロックか、ネストされた配下のブロックで参照することが -できます。コードブロックが終わったあとの処理から参照することはできません: > +変数は、それが定義されているブロックとネストされたブロック内でのみ参照できる。 +ブロックが終了すると変数にはアクセスできなくなる: > if cond var inner = 5 else @@ -375,7 +358,7 @@ Vim9 script を2回目に読み込んだときは、存在するすべてのス endif echo inner # エラー! -参照したい場合には、ブロックよりも前で宣言しなくてはなりません: > +宣言は早めに行う必要がある: > var inner: number if cond inner = 5 @@ -384,21 +367,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' @@ -406,14 +389,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*