ScriptDocument
*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。
A ScriptDocument インスタンスは、スタジオスクリプトエディタのドキュメントのプロキシーです。それは、 LuaSourceContainer が編集器で開くと代表するのは、開放状態のドキュメント
スクリプトエディタ自体が存在し、DataModel 以外のスレッドで変更されているため、ScriptDocument はスクリプトエディタを開く再プリケートしますが、それは開くエディタではありま
Class.ScriptDocument の存在は、ScriptDocument でドキュメントが開くことを示します。すべての ScriptEditorService インスタンスには、1>Class.ScriptEditorService1> が親としてあります。各インスタンスは次のコーディングコンベンションに準拠しています:
- すべてのテキストは ScriptDocument に UTF-8 でエンコードされています。
- すべての行インデックスは 1 インデックスされています。
- すべてのキャラクターインデックスは 1 インデックスされ、UTF-8 バイトをカウントし、グラフェムではなく、ですので、同じ警告が TextBox.CursorPosition から適用されます:多くのユニコードキャラクターは 1 バイト以上を取ります。
- すべての範囲は、開始位置と終了位置の両方を含むので、開始 == 終了は空の範囲を意味します。
すべての ScriptDocument の API は、プラグイン レベルのセキュリティです。
概要
方法
指定された行のテキストを返します。引数が提供されていない場合は、現在のカーソルポジションの行を返します。
文書の行数を返します。
存在する場合は、LuaSourceContainer インスタンスを返します。そうでない場合は、nil を返します。
編集中に選択したテキスト、または空の文字列を取得します。
スクリプトエディタの最後の選択をフォーマット: CursorLine, CursorChar, AnchorLine, AnchorChar 。スクリプトエディタに選択がない場合は、CursorLine == AnchorLine および CursorChar == AnchorChar 。
カーソルの位置とアンカーの大きさを取得します。エディタに選択がない場合は、同じ値です。
カーソルの位置とアンカーの小さいものを取得します。エディタに選択がない場合は、同じ値です。
- GetText(startLine : number?,startCharacter : number?,endLine : number?,endCharacter : number?):string
オープンエディタからテキストを返します。
編集中の行番号を編集器に表示します。
エディタにテキストが選択されているかどうかを返します。
Class.ScriptDocument がコマンドバーを表示すると、 Class.ScriptDocument が返されます。
このドキュメントに関連付けられたエディターのリクエストが閉じるじます。編集者がリクエストに応答するまで、現在のスレッドを返します。
- EditTextAsync(newText : string,startLine : number,startCharacter : number,endLine : number,endCharacter : number):Tuple
入力範囲内のテキストを ( startLine 、 startColumn から ( endLine 、 1> endColumn1> に新しいテキストで置き換えます。
- ForceSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
エディタにカーソルの選択を引数値に設定するようにリクエストします。
- RequestSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
エディタにカーソルの選択を引数値に設定するようにリクエストします。
イベント
- SelectionChanged(positionLine : number,positionCharacter : number,anchorLine : number,anchorCharacter : number):RBXScriptSignal
スクリプトドキュメントが変更されるときに発動します。
編集器に表示される行番号が変更されるときに発行されます。
プロパティ
方法
GetLine
指定された行のテキストを返します。引数が提供されていない場合は、現在のカーソルポジションの行を返します。
パラメータ
戻り値
コードサンプル
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
scriptDocument.SelectionChanged:Connect(function(positionLine, positionCharacter, anchorLine, anchorCharacter)
print(`Selected: Line {positionLine}, Char {positionCharacter}`)
print(`Anchor: Line {anchorLine}, Char {anchorCharacter}`)
local lineText = scriptDocument:GetLine(positionLine)
print(`Selected line text: {lineText}`)
end)
else
print("No scripts open")
end
GetLineCount
アクティブなドキュメントの行数を返します。
戻り値
コードサンプル
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local lineCount = scriptDocument:GetLineCount()
print(`The script has {lineCount} lines!`)
else
print("No scripts open")
end
GetScript
存在する場合は、LuaSourceContainer インスタンスを返します。そうでない場合は、nil を返します。
戻り値
コードサンプル
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local openScript = scriptDocument:GetScript()
print(`Currently open script: {openScript:GetFullName()}`)
else
print("No scripts open")
end
GetSelectedText
編集中に選択したテキスト、または空の文字列を取得します。
戻り値
コードサンプル
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
scriptDocument.SelectionChanged:Connect(function()
if scriptDocument:HasSelectedText() then
local selectedText = scriptDocument:GetSelectedText()
print(`Currently selected text: {selectedText}`)
else
print("No text currently selected")
end
end)
else
print("No scripts open")
end
GetSelection
スクリプトエディタの最後の選択をフォーマット: CursorLine, CursorChar, AnchorLine, AnchorChar 。スクリプトエディタに選択がない場合は、CursorLine == AnchorLine および CursorChar == AnchorChar 。
戻り値
カーソルライン、カーソルチャー、アンカーライン、アンカーチャー。
GetSelectionEnd
カーソルの位置とアンカーの大きさを取得します。エディタに選択がない場合は、同じ値です。
戻り値
コードサンプル
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local startLine, startCharacter = scriptDocument:GetSelectionStart()
local endLine, endCharacter = scriptDocument:GetSelectionEnd()
print(`Selection start: Line {startLine}, Char {startCharacter}`)
print(`Selection end: Line {endLine}, Char {endCharacter}`)
else
print("No scripts open")
end
GetSelectionStart
カーソルの位置とアンカーの小さいものを取得します。エディタに選択がない場合は、同じ値です。
戻り値
コードサンプル
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local startLine, startCharacter = scriptDocument:GetSelectionStart()
local endLine, endCharacter = scriptDocument:GetSelectionEnd()
print(`Selection start: Line {startLine}, Char {startCharacter}`)
print(`Selection end: Line {endLine}, Char {endCharacter}`)
else
print("No scripts open")
end
GetText
開くエディタからテキストを返します。0、2、または 4 引数で呼び出される必要があります:
- 0 引数で呼び出されると、開くエディタの内容をすべて取得します。
- 2つの引数で呼び出される場合、文書の開始行( startLine )、 startColumn からテキストを取得します。
- 4つの引数で呼び出される場合、文書の開始時点 ( startLine 、 startColumn 、終了時点 ( endLine 、 1> endColumn1> ) を取得します。
パラメータ
戻り値
コードサンプル
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local text = scriptDocument:GetText()
print(`Script contents: {text}`)
else
print("No scripts open")
end
GetViewport
編集中の行番号を編集変更に返します。編集器は、開始行と終了行の間の行を表示します。最初と最後の行は、スクリーン上のピクセルの最上部と最下部を表示します。たとえば、最後の行のトップピクセルのみが画面に表示される場合があります。さらに、コードフォールディングは、開始行と終了行の間の行を隠す可能性があります。
戻り値
コードサンプル
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local firstLine, lastLine = scriptDocument:GetViewport()
print(`Currently viewing lines {firstLine} to {lastLine}`)
else
print("No scripts open")
end
HasSelectedText
エディタにテキストが選択されているかどうかを返します。
戻り値
コードサンプル
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
scriptDocument.SelectionChanged:Connect(function()
if scriptDocument:HasSelectedText() then
local selectedText = scriptDocument:GetSelectedText()
print(`Currently selected text: {selectedText}`)
else
print("No text currently selected")
end
end)
else
print("No scripts open")
end
IsCommandBar
Class.ScriptDocument がコマンドバーを表示すると、Class.ScriptDocument がコマンドバーを表示すると、Class.ScriptDocument がコマンドバーを表示すると、1>Class.ScriptDocument1> がコマンドバーを表示すると、4>Class.ScriptDocument4> がコマンドバーを表示すると、7>Class.ScriptDocument7> がコマンドバーを表示すると、ScriptDocument0> がコマンドバーを表示すると、3>Class.ScriptDocument3>
- Studio はプラグインを実行する前にコマンドバーを作成しますので、Studio の次の Transition の間、開いたイベントをクローズし、再度開きすることがあります。
- セキュリティの理由で、 EditTextAsync でコマンドバーを編集できません。
戻り値
コードサンプル
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if document:IsCommandBar() then
print("Command bar document:", document)
end
end
CloseAsync
このドキュメントに関連付けられたエディターのリクエストが閉じるじます。Yields 現在のスレッドまで、エディターがリクエストに応答するまで。 機能が成功すると、返ります (真、ナイル)。 機能が失敗すると、Yields (真、 strin文字列) を返します。
この関数はコマンドバーを閉じることはできません。
戻り値
コードサンプル
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
local documents = ScriptEditorService:GetScriptDocuments()
local scriptDocument
-- Find the first open script document
for _, document in documents do
-- The Command Bar can't be closed, so don't select it
if not document:IsCommandBar() then
scriptDocument = document
break
end
end
if scriptDocument then
local success, err = scriptDocument:CloseAsync()
if success then
print(`Closed {scriptDocument.Name}`)
else
warn(`Failed to close {scriptDocument.Name} because: {err}`)
end
else
print("No open scripts")
end
EditTextAsync
範囲の指定された範囲から ( startLine , startColumn ) を ( endLine , 1> endColumn
機能が成功すると、true、nil が返されます。
関数がエラーをスローする場合:
- 範囲は無効です。
- 範囲は、ユニコード文字の 1 つのバイトを取り捨てるなど、ユニコード文字の範囲を減少させます。
- newText 自体には、無効な UTF-8 が含まれています。
機能が失敗すると、( false、 strin文字列) が返されます。これは、ストリングが問題の説明です。最も一般的な失敗タイプはバージョンミスマッチです。これは、 EditTextAsync がエディタのコンテンツとシンクロされていないときに、 ScriptDocument を呼び出そうとしたときに発生します。
パラメータ
戻り値
ForceSetSelectionAsync
編集者にカーソルの選択を引数値に設定するように求めます。両方のアンカーアルガートが通過する必要があります。または、どちらも通過しない場合、編集者はカーソルのデフォルトを保持しま
パラメータ
戻り値
コードサンプル
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
-- Get the text on the cursor's current line
local cursorLine = scriptDocument:GetSelection()
local lineText = scriptDocument:GetLine(cursorLine)
-- Force select the entire line of text
local success, err = scriptDocument:ForceSetSelectionAsync(cursorLine, 1, cursorLine, #lineText + 1)
if success then
print("Set selection!")
else
print(`Failed to set selection because: {err}`)
end
else
print("No scripts open")
end
RequestSetSelectionAsync
エディタにカーソルの選択を引数値に設定するように要求します。両方のアンカーアルゼントが通過する必要があります。または、どちらも通過しない場合は、エディタはカーソルのデフォルト値に戻ります。エディタがカーソルを更新した場合、またはリ
パラメータ
戻り値
コードサンプル
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
-- Get the text on the cursor's current line
local cursorLine = scriptDocument:GetSelection()
local lineText = scriptDocument:GetLine(cursorLine)
-- Force select the entire line of text
local success, err = scriptDocument:RequestSetSelectionAsync(cursorLine, 1, cursorLine, #lineText + 1)
if success then
print("Set selection!")
else
print(`Failed to set selection because: {err}`)
end
else
print("No scripts open")
end
イベント
SelectionChanged
スクリプトドキュメントが変更されるときに発動します。
パラメータ
コードサンプル
--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
scriptDocument.SelectionChanged:Connect(function(positionLine, positionCharacter, anchorLine, anchorCharacter)
print(`Selected: Line {positionLine}, Char {positionCharacter}`)
print(`Anchor: Line {anchorLine}, Char {anchorCharacter}`)
local lineText = scriptDocument:GetLine(positionLine)
print(`Selected line text: {lineText}`)
end)
else
print("No scripts open")
end
ViewportChanged
編集器に表示される行番号が変更されると、ファイアを起動します。詳細は ScriptDocument.GetViewport を参照してください。
パラメータ
コードサンプル
--!nocheck
--[[
To run:
1. Ensure Output view is open
2. Run the below code in the Command Bar
3. Scroll up and down in the opened Script window
Print statements from the ViewportChanged event will appear in the Output
]]
local Workspace = game:GetService("Workspace")
local ScriptEditorService = game:GetService("ScriptEditorService")
-- Create text that spans many lines
local dummyText = string.rep("-- Dummy Text\n", 60)
-- Create a script containing the dummy text and open it
local otherScript = Instance.new("Script")
otherScript.Source = dummyText
otherScript.Parent = Workspace
local success, err = ScriptEditorService:OpenScriptDocumentAsync(otherScript)
if not success then
warn(`Failed to open script because: {err}`)
return
end
-- Get a reference to the opened script
local scriptDocument = ScriptEditorService:FindScriptDocument(otherScript)
local function onViewportChanged(startLine: number, endLine: number)
print(`Script Viewport Changed - startLine: {startLine}, endLine: {endLine}`)
end
-- Connect the ViewportChanged event to the function above that prints the start and end line of the updated viewport
scriptDocument.ViewportChanged:Connect(onViewportChanged)