ScriptDocument
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
Un'istanza ScriptDocument è un proxy della documentazione di uno Studio Editore script. È diverso dal LuaSourceContainer aperto nell'editor in cui rappresenta lo stato epimerale di un documento aperto, e la sua rappresentazione è in un formato che è più adatto per la lettura e l'edizione del cod
Il Editor del Script stesso esiste e cambia in un thread diverso da qualsiasi DataModel , quindi il Class.ScriptDocument replica l'Editor del Script aperto, ma non è l'Editor aperto. A causa della replicazione, ci sono a volte un leggero ritardo tra il cambiamento del testo nell
L'esistenza di un ScriptDocument indica che un documento è aperto nell'Editor del Script. Tutte le istanze ScriptDocument hanno ScriptEditorService come parent. Ogni istanza aderisce alle seguenti convenzioni di encodifica:
- Tutto il testo in ScriptDocument è codificato in UTF-8.
- Tutti gli indici di linea sono 1-indexed.
- Tutti gli indici dei personaggi sono 1-indexed e contano UTF-8 bytes, non grazie, quindi lo stesso avviso da TextBox.CursorPosition si applica: molti caratteri Unicode prendono più di un bytes.
- Tutti i range sono inclusi nella loro posizione di partenza e esclusi dalla loro posizione di fine, quindi start == end implica un range vuoto.
Tutte le API per ScriptDocument sono al livello di sicurezza Plugin .
Sommario
Proprietà
Metodi
Restituisce il testo della linea specificata. Quando non viene fornito alcun argomento, restituisce la linea della posizione del cursore attuale.
Restituisce il numero di righe nel documento.
Restituisce l'istanza LuaSourceContainer esempio, se esiste, altrimenti nil .
Ottiene il testo selezionato nell'editor, o una stringa vuota se non c'è una selezione.
Restituisce l'ultima selezione conosciuta dello Script Editor nel formato: CursorLine, CursorChar, AnchorLine, AnchorChar . Se lo Script Editor non ha selezione, CursorLine == AnchorLine e CursorChar == AnchorChar .
Ottiene la posizione e l'ancora della posizione del cursore. Se l'editor non ha selezionato nulla, sono gli stessi valori.
Ottiene la posizione e l'ancora della posizione del cursore più piccola. Se l'editor non ha selezionato nulla, sono uguali al valore.
- GetText(startLine : number?,startCharacter : number?,endLine : number?,endCharacter : number?):string
Restituisce il testo dall'editor aperto.
Restituisce i numeri di riga attualmente mostrati nel cambiamento di editor.
Restituisce se l'editor ha selezionato del testo o meno.
Restituisce vero se il ScriptDocument rappresenta la barra dei comandi.
Le richieste che l'editor associato a questo documento Chiudere. Genera il thread corrente fino a quando l'editor risponde alla Richiesta.
- EditTextAsync(newText : string,startLine : number,startCharacter : number,endLine : number,endCharacter : number):Tuple
Rimpiazza il testo nella gamma specificata da ( startLine , startColumn ) a ( endLine , 1> endColumn1> ) con nuovoTesto.
- ForceSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
Chiede al editor di impostare la selezione del cursor al valore dell'argomento.
- RequestSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
Chiede al editor di impostare la selezione del cursor al valore dell'argomento.
Eventi
- SelectionChanged(positionLine : number,positionCharacter : number,anchorLine : number,anchorCharacter : number):RBXScriptSignal
Si attiva quando ScriptDocument cambia, incluso immediatamente dopo un cambiamento di testo.
Si attiva quando i numeri di riga mostrati nell'editor cambiano.
Proprietà
Metodi
GetLine
Restituisce il testo della linea specificata. Quando non viene fornito alcun argomento, restituisce la linea della posizione del cursore attuale.
Parametri
Restituzioni
Campioni di codice
--!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
Restituisce il numero di righe nel documento attivo.
Restituzioni
Campioni di codice
--!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
Restituisce l'istanza LuaSourceContainer esempio, se esiste, altrimenti nil .
Restituzioni
Campioni di codice
--!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
Ottiene il testo selezionato nell'editor, o una stringa vuota se non c'è una selezione.
Restituzioni
Campioni di codice
--!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
Restituisce l'ultima selezione conosciuta dello Script Editor nel formato: CursorLine, CursorChar, AnchorLine, AnchorChar . Se lo Script Editor non ha selezione, CursorLine == AnchorLine e CursorChar == AnchorChar .
Restituzioni
CursorLine, CursorChar, AnchorLine, AnchorChar.
GetSelectionEnd
Ottiene la posizione e l'ancora della posizione del cursore. Se l'editor non ha selezionato nulla, sono gli stessi valori.
Restituzioni
Campioni di codice
--!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
Ottiene la posizione e l'ancora della posizione del cursore più piccola. Se l'editor non ha selezionato nulla, sono uguali al valore.
Restituzioni
Campioni di codice
--!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
Restituisce il testo dall'editor aperto. Deve essere chiamato con 0, 2 o 4 argomenti:
- Se chiamato con 0 argomenti, ottiene l'intero contenuto dell'editor aperto.
- Se chiamato con 2 argomenti, ottiene il testo del documento che inizia con ( startLine , startColumn ).
- Se chiamato con 4 argomenti, ottiene il testo del documento che inizia con ( startLine , startColumn ) e finisce con ( endLine , 1> endColumn1> ).
Parametri
Restituzioni
Campioni di codice
--!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
Restituisce i numeri di riga attualmente mostrati nell'editor. L'editor mostra le righe tra startLine e endLine, inclusa. La prima e l'ultima riga potrebbero essere visualizzate solo parzialmente. Ad esempio, potrebbero essere visualizzate solo le prime righe dell'ultima riga. Inoltre, la piegatura del codice potrebbe nascondere le righe tra startLine e endLine.
Restituzioni
Campioni di codice
--!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
Restituisce se l'editor ha selezionato del testo o meno.
Restituzioni
Campioni di codice
--!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
Restituisce vero se il ScriptDocument rappresenta la barra dei comandi. La barra dei comandi ha regole e limitazioni speciali in questa API:
- Studio crea la barra dei comandi prima di eseguire i plugin, quindi non sempre fire l'evento aperto, anche se chiude e riapre come Studio passa da un DataModel all'altro.
- Non puoi modificare la barra dei comandi con EditTextAsync per motivi di sicurezza.
Restituzioni
Campioni di codice
--!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
Le richieste che l'editor associato a questo documento Chiudere. Genera il thread corrente fino a quando l'editor risponde alla Richiesta. Se la funzione ha successo, restituisce (vero, Stringa) come una descrizione del problema.
Questa funzione non può chiudere la barra dei comandi.
Restituzioni
Campioni di codice
--!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
Rimpiazza il testo nella gamma specificata da ( startLine , startColumn ) a ( endLine , 1> endColumn1>
Se la funzione ha successo, restituisce ( true , nil ).
La funzione throws un errore if:
- La portata non è valida.
- La gamma sarebbe in grado di schiacciare un personaggio unicode, per esempio sostituire solo alcuni dei bit del personaggio unicode.
- Il newText stesso contiene UTF-8 non valido.
Se la funzione fallisce, restituisce (false, Stringa). La stringa è una descrizione del problema. Il tipo di fallimento più comune è un errore di versione. Ciò si verifica quando si tenta di chiamare EditTextAsync durante il tempo in cui il ScriptDocument non è in sincronia con i contenuti dell'editor. Se ciò dovesse accadere, puoi riprovare l'Modificare.
Parametri
Restituzioni
ForceSetSelectionAsync
Chiede al editor di impostare la selezione del cursore ai valori di argomento. Entrambi gli argomenti di ancoraggio devono essere passati, o niente. Se niente è passato, allora ognuno di loro è predefinito essere lo stesso come l'argomento cursore corrispondente. L'editor potrebbe rifi
Parametri
Restituzioni
Campioni di codice
--!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
Chiede al editor di impostare la selezione del cursor all'argomento. Entrambi gli argumenti di ancoraggio devono essere passati, o niente. Se niente è passato, allora ognuno di loro è predefinito essere lo stesso dell'argument cursor corrispondente. L'editor potrebbe rifiutare di aggiornare il cursor se il contenuto del testo della documentazione è cambiato, o il cursor si è spostato dal momento che la richiesta
Parametri
Restituzioni
Campioni di codice
--!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
Eventi
SelectionChanged
Si attiva quando ScriptDocument cambia, incluso immediatamente dopo un cambiamento di testo.
Parametri
Campioni di codice
--!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
Si attiva quando i numeri di riga mostrati nell'editor cambiano. Vedi ScriptDocument.GetViewport per i dettagli.
Parametri
Campioni di codice
--!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)