ScriptDocument

顯示已棄用項目

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

無法建立
未複製

Class.ScriptDocument 實例是 Studio 指令碼編輯器的代理。它與編輯器中開啟的 LuaSourceContainer 不同,代表開啟文件的暫時狀態,並且其代表格式比執行程式碼更適合閱

Class.ScriptDocument 的內容在不同的線程上,因此 ScriptDocument 的複製會重複開啟的 ScriptDocument 編輯器,但它不是開啟的編輯器。因為重複,有時候在編輯器中變更文字

Class.ScriptDocument 的存在表示一個文件在 ScriptDocument 中開啟。所有 ScriptEditorService 的實例都有 1>Class.ScriptEditorService1> 作為其父元素級。每個實例都遵守以下裝飾約定:

  • Class.ScriptDocument 中的所有文字都為 UTF-8 編碼。
  • 所有線索索引都是 1 索引。
  • 所有角色索引都是 1 索引,並且估計 UTF-8 位元,不是圖形,因此 TextBox.CursorPosition 的警告適用:很多 UTF-8 字元超過一個位元。
  • 所有範圍都包含其起始位置和其終止位置,因此開始 == 終止即表示為空範圍。

Class.ScriptDocument 的所有 API 都位於 插件 的安全層級。

概要

方法

  • GetLine(lineIndex : number?):string
    外掛程式安全性

    返回指定的行的文字。當沒有提供參數時,會返回當前曲標位置的行。

  • 外掛程式安全性

    返回文件中的行數。

  • 外掛程式安全性

    如果存在,返回底部的 LuaSourceContainer 實個體、實例,否則 nil

  • 外掛程式安全性

    如果沒有選擇,取得編輯器中選擇的文字或是空白字串。

  • 外掛程式安全性

    返回 Script Editor 的最後一個選擇以格式:CursorLine, CursorChar, AnchorLine, AnchorChar。如果 Script Editor 沒有選擇,CursorLine == AnchorLineCursorChar == AnchorChar

  • 外掛程式安全性

    取得鼠標位置和固定的大小。如果編輯器沒有選擇,它們是相同的值。

  • 外掛程式安全性

    取得鼠標位置和固定的更小。如果編輯器沒有選擇,它們是相同的值。

  • GetText(startLine : number?,startCharacter : number?,endLine : number?,endCharacter : number?):string
    外掛程式安全性

    從開啟編輯器中返回文字。

  • 外掛程式安全性

    在編輯器變更中顯示當前顯示的行數。

  • 外掛程式安全性

    返回編輯器是否選擇任何文字。

  • 外掛程式安全性

    如果 ScriptDocument 代表指令欄,則返回 true。

  • 暫停
    外掛程式安全性

    與此文件關聯的編輯器關閉。在編輯器回應要邀請之前,輸出目前的線程。

  • 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
    暫停
    外掛程式安全性

    請求編輯器將鼠標選擇設定為參數值。

活動

屬性

方法

GetLine

外掛程式安全性

返回指定的行的文字。當沒有提供參數時,會返回當前曲標位置的行。

參數

lineIndex: number
預設值:"nil"

返回

範例程式碼

ScriptDocument.SelectionChanged and ScriptDocument: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

外掛程式安全性

返回啟用的文件的行數。


返回

範例程式碼

ScriptDocument: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
外掛程式安全性

如果存在,返回底部的 LuaSourceContainer 實個體、實例,否則 nil


返回

範例程式碼

ScriptDocument:GetScript()

--!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

外掛程式安全性

如果沒有選擇,取得編輯器中選擇的文字或是空白字串。


返回

範例程式碼

ScriptDocument:HasSelectedText() and :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

外掛程式安全性

返回 Script Editor 的最後一個選擇以格式:CursorLine, CursorChar, AnchorLine, AnchorChar。如果 Script Editor 沒有選擇,CursorLine == AnchorLineCursorChar == AnchorChar


返回

鼠標線、鼠標字、錨線、錨字。

GetSelectionEnd

外掛程式安全性

取得鼠標位置和固定的大小。如果編輯器沒有選擇,它們是相同的值。


返回

範例程式碼

ScriptDocument:GetSelectionStart() and :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

外掛程式安全性

取得鼠標位置和固定的更小。如果編輯器沒有選擇,它們是相同的值。


返回

範例程式碼

ScriptDocument:GetSelectionStart() and :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

GetText

外掛程式安全性

從開啟編輯器中返回文字。必須使用 0、2 或 4 參數來呼叫:

  • 如果有 0 個參數,取得開啟編輯器的內容。
  • 如果呼叫 2 個參數,將文件的內容從 ( startLine 開始。 如果呼叫 2 個參數,將文件的內容從 ( startColumn 開始。
  • 如果呼叫 4 個參數,取得文件開始於 ( startLine , startColumn ) 並結束於 ( endLine , 1> endColumn1> )。

參數

startLine: number
預設值:"nil"
startCharacter: number
預設值:"nil"
endLine: number
預設值:"nil"
endCharacter: number
預設值:"nil"

返回

範例程式碼

ScriptDocument:GetText()

--!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

外掛程式安全性

返回編輯器變更中顯示的行數。編輯器會顯示開始線和終線線之間的行數,包括。第一行和最後行可能只會顯示部分。例如,最後一行的上一個像素可能會顯示在屏幕上。此外,代碼折疊可能會在開始線和終線線之間顯示行數。


返回

範例程式碼

ScriptDocument: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

外掛程式安全性

返回編輯器是否選擇任何文字。


返回

範例程式碼

ScriptDocument:HasSelectedText() and :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

IsCommandBar

外掛程式安全性

如果 ScriptDocument 代表指令欄,則返回 true。指令欄有特殊規則和限制:

  • Studio 在執行插件之前會創建指令欄,因此它不會總是發射開啟的事件,雖然它會關閉並重新開啟,當 Studio 切換到資料模型之間。
  • 因安全原因,您無法使用 EditTextAsync 編輯指令列。

返回

範例程式碼

ScriptDocument:IsCommandBar()

--!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

暫停
外掛程式安全性

與此文件關聯的編輯器關閉。 輸出現有線程直到編輯器回應要邀請。 如果功能成功,它將返回 (真, 零)。 如果功能失敗, 它將返回 (真, 字串) 作為問題的說明。

此功能無法關閉指令欄。


返回

範例程式碼

ScriptDocument:CloseAsync

--!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> endColumn1> 內的編輯

如果功能成功,它將返回 ( true , nil )。

如果發生以下情況,則該函數會發生錯誤:

  • 範圍無效。
  • 範圍將會截取一個不符號字元,例如只截取一些不符號字元的字元。
  • newText 本身包含無效的 UTF-8。

如果函數失敗,它將返回 (false, 字符字串). 字符串是描述問題的說明。最常見的失敗類型是版本不符。發生這種情況是因為你嘗試在 ScriptDocument 與內容編輯器的內容之間的時間奧버沒合。如果發生此情況,您可以重試編輯。

參數

newText: string
startLine: number
startCharacter: number
endLine: number
endCharacter: number

返回

ForceSetSelectionAsync

暫停
外掛程式安全性

請編輯器將其鼠標選擇設定為參數值。 兩個錨定參數必須都傳送,或者不。 如果沒有傳送,則會以相應的鼠標選擇值預設引數。 編輯器可能會拒絕更新其鼠標,如果文件的文

參數

cursorLine: number
cursorCharacter: number
anchorLine: number
預設值:"nil"
anchorCharacter: number
預設值:"nil"

返回

範例程式碼

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

MultiEditTextAsync

暫停
外掛程式安全性

參數

edits: Array

返回

RequestSetSelectionAsync

暫停
外掛程式安全性

請求編輯器將鼠標選擇設定為參數值。兩個錨定參數必須傳送,或不。 如果沒有傳送,則必須傳送相同的參數引數。 編輯器可能會拒絕更新其鼠標,如果文件的文字內容已變更,或者它已移動自從要求以來。 如果沒有傳送,則會返回 (true, 字串il

參數

cursorLine: number
cursorCharacter: number
anchorLine: number
預設值:"nil"
anchorCharacter: number
預設值:"nil"

返回

範例程式碼

ScriptDocument: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

外掛程式安全性

ScriptDocument 變更時會發生火災,包括在即時文字變更後。

參數

positionLine: number
positionCharacter: number
anchorLine: number
anchorCharacter: number

範例程式碼

ScriptDocument.SelectionChanged and ScriptDocument: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

ViewportChanged

外掛程式安全性

發生在編輯器中顯示的線路數字改變時。請參閱 ScriptDocument.GetViewport 了解詳情。

參數

startLine: number
endLine: number

範例程式碼

Connecting to ScriptDocument.ViewportChanged

--!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)