ScriptDocument

Mostrar obsoleto

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

No creable
No replicado

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

  • GetLine(lineIndex : number?):string
    Seguridad del plugin

    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.

  • Seguridad del plugin

    Devuelve el número de líneas en el documento.

  • Seguridad del plugin

    Devuelve la instancia subyacente LuaSourceContainer, si existe, de lo contrario nil .

  • Seguridad del plugin

    Obtiene el texto seleccionado en el editor, o una cadena vacía si no hay selección.

  • Seguridad del plugin

    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 .

  • Seguridad del plugin

    Obtiene la posición y el ancla del cursor más grande. Si el editor no tiene selección, son el mismo valor.

  • Seguridad del plugin

    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
    Seguridad del plugin

    Regresa texto del editor abierto.

  • Seguridad del plugin

    Devuelve los números de línea actualmente mostrados en el editor de cambios.

  • Seguridad del plugin

    Regresa si el editor tiene o no un texto seleccionado.

  • Seguridad del plugin

    Regresa true si el ScriptDocument representa la barra de comandos.

  • Proporciona
    Seguridad del plugin

    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
    Proporciona
    Seguridad del plugin

    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
    Proporciona
    Seguridad del plugin

    Pide al editor que seleccione su cursor a los valores de argumento.

  • Proporciona
    Seguridad del plugin
  • RequestSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
    Proporciona
    Seguridad del plugin

    Pide al editor que seleccione su cursor a los valores de argumento.

Eventos

Propiedades

Métodos

GetLine

Seguridad del plugin

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

lineIndex: number
Valor predeterminado: "nil"

Devuelve

Muestras de código

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

Seguridad del plugin

Devuelve el número de líneas en el documento activo.


Devuelve

Muestras de código

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
Seguridad del plugin

Devuelve la instancia subyacente LuaSourceContainer, si existe, de lo contrario nil .


Devuelve

Muestras de código

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

Seguridad del plugin

Obtiene el texto seleccionado en el editor, o una cadena vacía si no hay selección.


Devuelve

Muestras de código

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

Seguridad del plugin

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

Seguridad del plugin

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

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

Seguridad del plugin

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

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

Seguridad del plugin

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

startLine: number
Valor predeterminado: "nil"
startCharacter: number
Valor predeterminado: "nil"
endLine: number
Valor predeterminado: "nil"
endCharacter: number
Valor predeterminado: "nil"

Devuelve

Muestras de código

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

Seguridad del plugin

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

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

Seguridad del plugin

Regresa si el editor tiene o no un texto seleccionado.


Devuelve

Muestras de código

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

Seguridad del plugin

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

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

Proporciona
Seguridad del plugin

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

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

Proporciona
Seguridad del plugin

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

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

Devuelve

ForceSetSelectionAsync

Proporciona
Seguridad del plugin

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

cursorLine: number
cursorCharacter: number
anchorLine: number
Valor predeterminado: "nil"
anchorCharacter: number
Valor predeterminado: "nil"

Devuelve

Muestras de código

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

Proporciona
Seguridad del plugin

Parámetros

edits: Array

Devuelve

RequestSetSelectionAsync

Proporciona
Seguridad del plugin

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

cursorLine: number
cursorCharacter: number
anchorLine: number
Valor predeterminado: "nil"
anchorCharacter: number
Valor predeterminado: "nil"

Devuelve

Muestras de código

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

Eventos

SelectionChanged

Seguridad del plugin

Se activa cuando el ScriptDocument cambia, incluida inmediatamente después de un cambio de texto.

Parámetros

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

Muestras de código

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

Seguridad del plugin

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

startLine: number
endLine: number

Muestras de código

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)