ScriptDocument
*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.
Une instance ScriptDocument est un proxy du document d'un Studio Editeur de script. Il est différent de la LuaSourceContainer ouvert dans l'éditeur dans lequel il représente l'état éphémère d'un ouvert le document, et sa représentation est dans un format qui est plus adapté à la lecture et à l'édition
L'éditeur de scripts lui-même existe et change sur un autre fil que n'importe lequel DataModel , donc le ScriptDocument réplique l'éditeur de Editeur de scriptouvert, mais ce n'est pas l'éditeur ouvert. En raison de la réplication, il y a parfois un léger
L'existence d'un ScriptDocument indique que le document est ouvert dans le Editeur de script. Toutes les instances ScriptDocument ont ScriptEditorService comme parent. Chaque instance adhère aux conventions de suivi suivantes :
- Tout le texte dans ScriptDocument est codé en UTF-8.
- Tous les indexes de ligne sont indexés 1.
- Tous les indexes de personnages sont 1-indexés et comptent des octets UTF-8, pas des грамmes, donc la même avertissement de TextBox.CursorPosition s'applique : de nombreux personnages Unicode prennent plus d'un octet.
- Toutes les portées incluent leur position de départ et excluent leur position finale, donc start == end suppose une portée vide.
Toutes les API pour ScriptDocument sont au niveau de sécurité Plugin .
Résumé
Méthodes
Renvoie le texte de la ligne spécifiée. Lorsqu'il n'y a pas d'argument fourni, renvoie la ligne de la position actuelle de l' curseur.
Renvoie le nombre de lignes dans le document.
Retourne la instance de base LuaSourceContainer, si une telle existe, sinon nil.
Obtient le texte sélectionné dans l'éditeur, ou une chaîne vide si aucune sélection n'est disponible.
Retourne la dernière sélection du Script Editor dans le format : CursorLine, CursorChar, AnchorLine, AnchorChar . Si le Script Editor n'a pas de sélection, CursorLine == AnchorLine et CursorChar == AnchorChar .
Obtient la position et l'ancrage de la ancredu curseur. Si l'éditeur n'a pas de sélection, ils sont la même valeur.
Obtient la position et l'ancrage de la ancredu curseur plus petit. Si l'éditeur n'a pas de sélection, ils sont la même valeur.
- GetText(startLine : number?,startCharacter : number?,endLine : number?,endCharacter : number?):string
Renvoie du texte de l'éditeur ouvert.
Renvoie les numéros de ligne actuellement affichés dans le changement d'éditeur.
Renvoie si oui ou non l'éditeur a sélectionné du texte.
Retourne vrai si le ScriptDocument représente la barre de commande.
Les demandes que l'éditeur a associées à ce document se fermer. Génère la colonne actuelle jusqu'à ce que l'éditeur réponde à la demande.
- EditTextAsync(newText : string,startLine : number,startCharacter : number,endLine : number,endCharacter : number):Tuple
Remplace le texte dans la tranche spécifiée de ( startLine , startColumn ) à ( endLine , 1> endColumn1> ) avec le nouveau texte.
- ForceSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
Demande à l'éditeur de définir sa sélection de curseur sur les valeurs d'argument.
- RequestSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
Demande à l'éditeur de définir sa sélection de curseur sur les valeurs d'argument.
Évènements
- SelectionChanged(positionLine : number,positionCharacter : number,anchorLine : number,anchorCharacter : number):RBXScriptSignal
Feuille quand le ScriptDocument change, y compris immédiatement après un changement de texte.
Tire quand les numéros de ligne affichés dans l'éditeur changent.
Propriétés
Méthodes
GetLine
Renvoie le texte de la ligne spécifiée. Lorsqu'il n'y a pas d'argument fourni, renvoie la ligne de la position actuelle de l' curseur.
Paramètres
Retours
Échantillons de code
--!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
Renvoie le nombre de lignes dans le document actif.
Retours
Échantillons de code
--!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
Retourne la instance de base LuaSourceContainer, si une telle existe, sinon nil.
Retours
Échantillons de code
--!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
Obtient le texte sélectionné dans l'éditeur, ou une chaîne vide si aucune sélection n'est disponible.
Retours
Échantillons de code
--!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
Retourne la dernière sélection du Script Editor dans le format : CursorLine, CursorChar, AnchorLine, AnchorChar . Si le Script Editor n'a pas de sélection, CursorLine == AnchorLine et CursorChar == AnchorChar .
Retours
CursorLine, CursorChar, AnchorLine, AnchorChar.
GetSelectionEnd
Obtient la position et l'ancrage de la ancredu curseur. Si l'éditeur n'a pas de sélection, ils sont la même valeur.
Retours
Échantillons de code
--!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
Obtient la position et l'ancrage de la ancredu curseur plus petit. Si l'éditeur n'a pas de sélection, ils sont la même valeur.
Retours
Échantillons de code
--!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
Renvoie du texte de l'éditeur ouvert. Il doit être appelé avec 0, 2 ou 4 arguments :
- Si on l'appelle avec 0 arguments, on obtient le contenu entier de l'éditeur ouvert.
- Si on l'appelle avec 2 arguments, il obtient le texte du document à partir de ( startLine , startColumn ).
- Si appelé avec 4 arguments, obtient le texte du document à partir de ( startLine , startColumn ) et se terminant par ( endLine , 1> endColumn1> ).
Paramètres
Retours
Échantillons de code
--!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
Renvoie les numéros de ligne actuellement affichés dans le changement d'éditeur. L'éditeur affiche les lignes entre startLine et endLine, y compris. La première et dernière ligne peut seulement afficher partiellement. Par exemple, seul le pixel supérieur de la dernière ligne peut être sur l'écran. De plus, le code de pliage peut masquer les lignes entre startLine et endLine.
Retours
Échantillons de code
--!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
Renvoie si oui ou non l'éditeur a sélectionné du texte.
Retours
Échantillons de code
--!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
Retourne vrai si le ScriptDocument représente la barre de commande. La barre de commande a des règles et des limites spéciales dans cette API :
- Studio crée la barre de commande avant d'exécuter les plugins, afin qu'il ne ferme pas toujours l'événement ouvert, bien que Studio ferme et réouvre lorsque Studio passe entre les modèles de données.
- Vous ne pouvez pas modifier la barre de commande avec EditTextAsync pour des raisons de sécurité.
Retours
Échantillons de code
--!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
Les demandes que l'éditeur a associées à ce document se fermer. Génère le fil actuel jusqu'à ce que l'éditeur réponde à la demande. Si la fonction réussit, il renvoie (oui, zéro). Si la fonction échoue, il renvoie (non, chaîne) comme une description du problème.
Cette fonction ne peut pas fermer la barre de commande.
Retours
Échantillons de code
--!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
Remplace le texte dans la tranche spécifiée de ( startLine , startColumn ) à ( endLine , 1> endColumn1>
Si la fonction réussit, il renvoie ( true , nil ).
La fonction lance une erreur si :
- La portée est invalide.
- La portée couperait un caractère unicode, par exemple, ne remplacerait que quelques-uns des octets du personnage unicode.
- Le newText lui-même contient un UTF-8 non valide.
Si la fonctionne échoue, elle renvoie (faux, chaîne). La string est une description du problème. Le type de rupture de version le plus courant est un décalage de version. Cela se produit lorsque vous essayez d'appeler EditTextAsync pendant le temps où le ScriptDocument n'est pas en phase avec le contenu de l'éditeur. Si cela se produit, vous pouvez réessayer l'modifier.
Paramètres
Retours
ForceSetSelectionAsync
Demande à l'éditeur de définir sa sélection de curseur sur les valeurs d'argument. Les deux arguments d'ancrage doivent être passés, ou aucun. Si aucun n'est passé, alors ils s'ajustent tous les deux à être les mêmes que l'argument de curseur correspondant. L'éditeur peut refuser de met
Paramètres
Retours
Échantillons de code
--!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
Demande à l'éditeur de définir sa sélection de curseur sur les valeurs d'argument. Les deux arguments d'ancrage doivent être passés, ou aucun. Si aucun n'est passé, alors ils s'appliquent tous les deux par défaut à être le même que l'argument de curseur correspondant. L'éditeur peut refuser de mettre à jour son curseur si le contenu du texte du document a changé, ou si le curseur a déplac
Paramètres
Retours
Échantillons de code
--!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
Évènements
SelectionChanged
Feuille quand le ScriptDocument change, y compris immédiatement après un changement de texte.
Paramètres
Échantillons de code
--!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 déclenche lorsque les numéros de ligne affichés dans l'éditeur changent. Voir ScriptDocument.GetViewport pour plus de détails.
Paramètres
Échantillons de code
--!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)