ScriptDocument
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
Una instancia de ScriptDocument es un proxy del documento de un Editor de Script de Studio. Es diferente del LuaSourceContainer abierto en el editor en que representa el estado epímero de un documento abierto, y su representación está en un formato que es más adecuado para leer y editar el código que ej
El Editor de Scripts mismo existe y cambia en un hilo diferente que cualquier DataModel , por lo que el ScriptDocument replica el Editor de Scripts abierto, pero no es el editor abierto. Debido a la replicación, a veces hay un ligeramente pequeño retraso entre cambiar el texto en el
La existencia de un ScriptDocument indica que un documento se abre en el Editor de Script. Todas las instancias de ScriptDocument tienen ScriptEditorService como padre. Cada instancia adhiere a las siguientes convenciones de encodificación:
- Todo el texto en ScriptDocument está codificado en UTF-8.
- Todos los índices de línea tienen un índice de 1.
- Todos los índices de personajes tienen un índice de 1 y cuentan UTF-8 bytes, no gráficos, por lo que la misma advertencia de TextBox.CursorPosition aplica: muchos personajes de Unicode toman más de un bytes.
- Todos los rangos incluyen su posición de inicio y exclusiva de su posición de finalización, por lo tanto, start == end implica un rango vacío.
Todas las API para ScriptDocument están en el nivel de seguridad de Plugin .
Resumen
Métodos
Devuelve el texto de la línea especificada. Cuando no se proporciona ningún argumento, devuelve la línea de la posición del cursor actual.
Devuelve el número de líneas en el documento.
Devuelve la instancia subyacente LuaSourceContainer, si existe, de lo contrario nil .
Obtiene el texto seleccionado en el editor, o una cadena vacía si no hay selección.
Devuelve la última selección del Editor de Script en el formato: CursorLine, CursorChar, AnchorLine, AnchorChar . Si el Editor de Script no tiene selección, CursorLine == AnchorLine y CursorChar == AnchorChar .
Obtiene la posición y el ancla del cursor más grande. Si el editor no tiene selección, son el mismo valor.
Obtiene la posición y el ancla del cursor más pequeño. Si el editor no tiene selección, son el mismo valor.
- GetText(startLine : number?,startCharacter : number?,endLine : number?,endCharacter : number?):string
Regresa texto del editor abierto.
Devuelve los números de línea actualmente mostrados en el editor de cambios.
Regresa si el editor tiene o no un texto seleccionado.
Regresa true si el ScriptDocument representa la barra de comandos.
Las solicitudes que el editor asignó con este documento se cierran. Genera el hilo actual hasta que el editor responda a la solicitud.
- EditTextAsync(newText : string,startLine : number,startCharacter : number,endLine : number,endCharacter : number):Tuple
Reemplaza el texto en el rango especificado desde ( startLine , startColumn ) a ( endLine , 1> endColumn1> ) con nuevoTexto.
- ForceSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
Pide al editor que seleccione su cursor a los valores de argumento.
- RequestSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
Pide al editor que seleccione su cursor a los valores de argumento.
Eventos
- SelectionChanged(positionLine : number,positionCharacter : number,anchorLine : number,anchorCharacter : number):RBXScriptSignal
Se activa cuando el ScriptDocument cambia, incluida inmediatamente después de un cambio de texto.
Dispara cuando los números de línea mostrados en el editor cambian.
Propiedades
Métodos
GetLine
Devuelve el texto de la línea especificada. Cuando no se proporciona ningún argumento, devuelve la línea de la posición del cursor actual.
Parámetros
Devuelve
Muestras de código
--!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
Devuelve el número de líneas en el documento activo.
Devuelve
Muestras de código
--!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
Devuelve la instancia subyacente LuaSourceContainer, si existe, de lo contrario nil .
Devuelve
Muestras de código
--!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
Obtiene el texto seleccionado en el editor, o una cadena vacía si no hay selección.
Devuelve
Muestras de código
--!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
Devuelve la última selección del Editor de Script en el formato: CursorLine, CursorChar, AnchorLine, AnchorChar . Si el Editor de Script no tiene selección, CursorLine == AnchorLine y CursorChar == AnchorChar .
Devuelve
CursorLine, CursorChar, AnchorLine, AnchorChar.
GetSelectionEnd
Obtiene la posición y el ancla del cursor más grande. Si el editor no tiene selección, son el mismo valor.
Devuelve
Muestras de código
--!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
Obtiene la posición y el ancla del cursor más pequeño. Si el editor no tiene selección, son el mismo valor.
Devuelve
Muestras de código
--!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
Regresa texto del editor abierto. Debe ser llamado con 0, 2 o 4 argumentos:
- Si se llama con 0 argumentos, obtiene todo el contenido del editor abierto.
- Si se llama con 2 argumentos, obtiene el texto del documento que comienza en ( startLine , startColumn ).
- Si se llama con 4 argumentos, obtiene el texto del documento que comienza en ( startLine , startColumn ) y termina en ( endLine , 1> endColumn1> ).
Parámetros
Devuelve
Muestras de código
--!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
Devuelve el número de líneas actualmente mostradas en el editor. El editor muestra las líneas entre startLine y endLine, incluido. La primera y la última línea solo se muestran parcialmente. Por ejemplo, solo la parte superior del último píxel puede estar en la pantalla. Además, la fusión de código puede ocultar líneas entre startLine y endLine.
Devuelve
Muestras de código
--!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
Regresa si el editor tiene o no un texto seleccionado.
Devuelve
Muestras de código
--!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
Regresa true si el ScriptDocument representa la barra de comandos. La barra de comandos tiene reglas y limitaciones especiales en esta API:
- Studio crea la barra de comandos antes de ejecutar los plugins, por lo que no siempre hace que se ejecute el evento que se abre, aunque cierra y reabre como Studio se transita entre DataModels.
- No puedes editar la barra de comandos con EditTextAsync por razones de seguridad.
Devuelve
Muestras de código
--!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
Las solicitudes que el editor asignó con este documento se cierran. Genera el hilo actual hasta que el editor responda a la solicitud. Si la función tiene éxito, se devuelve (verdadero, nulo). Si la función falla, se devuelve (falso, cadena) como una descripción del problema.
Esta función no puede cerrar la barra de comandos.
Devuelve
Muestras de código
--!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
Reemplaza el texto en el rango especificado desde ( startLine , startColumn ) a ( endLine , 1> endColumn1>
Si la función tiene éxito, se devuelve ( true , nil ).
La función lanza un error si:
- El rango es no válido.
- El rango cortaría un carácter no nativo, por ejemplo, sólo reemplazar algunos de los bytes del carácter no nativo.
- El propio newText contiene UTF-8 inválido.
Si la función falla,返回(EditTextAsync). La cadena es una descripción del problema。El tipo de fallo más común es un desajuste de versión。 Esto发生在您尝试调用 ScriptDocument 时,您试图调用 Class.ScriptDocument editar
Parámetros
Devuelve
ForceSetSelectionAsync
Pide al editor que establezca la selección del cursor en los valores de argumento. Los dos argumentos de anclaje deben ser pasados, o ninguno. Si ninguno se pasa, entonces cada uno se predetermina como el argumento de cursor correspondiente. El editor puede rechazar actualizar su cursor si el contenido del texto del documento ha cambiado.
Parámetros
Devuelve
Muestras de código
--!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
Pide al editor que establezca su selección de cursor a los valores de argumento. Ambos argumentos de ancla deben ser pasados, o ninguno. Si ninguno se pasa, entonces cada uno debe ser el mismo que el argumento de cursor correspondiente. El editor puede rechazar actualizar su cursor si el contenido del texto del documento ha cambiado o el cursor se ha movido desde que se hizo la solicitud. Muestra (verdadero, nulo) si el
Parámetros
Devuelve
Muestras de código
--!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
Eventos
SelectionChanged
Se activa cuando el ScriptDocument cambia, incluida inmediatamente después de un cambio de texto.
Parámetros
Muestras de código
--!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
Se activa cuando los números de línea mostrados en el editor cambian. Vea ScriptDocument.GetViewport para obtener más información.
Parámetros
Muestras de código
--!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)