ScriptDocument
*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.
Przykład ScriptDocument instancji jest proксиem dokumentu Studio Script Editor. Jest ona inna od otwartego w edytorze w tym, że reprezentuje stan ephemeralny otwartego dokumentu, a jego przedstawienie jest w formie, która jest bardziej odpowiednia do czytania i edytowania k
Sam edytor skryptów istnieje i zmienia się na innym wątku niż dowolny DataModel , więc ScriptDocument replikuje otwarty edytor skryptów, ale nie jest to otwarty edytor. Z powodu replikacji czasami następuje nieznaczny opóź
Istnienie ScriptDocument wskazuje, że dokument otwarty jest w edytorze skryptów. Wszystkie instancje ScriptDocument mają ScriptEditorService jako swojego rodzica. Każda instancja przestrzega następujących zasad kodowania:
- Wszystki tekst w ScriptDocument jest zaszyfrowany UTF-8.
- Wszystkie wiersze mają jeden indeks.
- Wszystkie znaki indeksowe mają 1-znaczny UTF-8, a nie grafemy, więc ten sam ostrzeżenie z TextBox.CursorPosition stosuje się do wszystkich znaków Unicode: wiele znaków Unicode więcej niż jeden bajt.
- Wszystkie zasięgi obejmują ich początkową pozycję startową i wyłączną pozycję końcową, więc start == końcowy oznacza pusty zasięg.
Wszystkie API dla ScriptDocument są na poziomie bezpieczeństwa Plugin .
Podsumowanie
Metody
Zwraca tekst określonej linii. Gdy nie jest dostarczony żaden argument, zwraca pozycję kursora.
Wyświetla liczbę linii w dokumencie.
instancjapodstawową instancję LuaSourceContainer, jeśli istnieje, a w przeciwnym razie nil.
Zdobądź tekst zaznaczony w edytorze lub pustą stronę, jeśli nie ma wyboru.
Wyświetla ostatni znany wybór w edytorze skryptów w formacie: CursorLine, CursorChar, AnchorLine, AnchorChar. Jeśli edytor skryptów nie ma wyboru, CursorLine == AnchorLine i CursorChar == AnchorChar.
Zdobądź większą pozycję kurora i zatrzyma. Jeśli edytor nie ma wyboru, to są tego samego wartości.
Zdobądź mniejszą pozycję kurora i zatrzyma. Jeśli edytor nie ma wyboru, to są tego samego wartości.
- GetText(startLine : number?,startCharacter : number?,endLine : number?,endCharacter : number?):string
Zwraca tekst z otwartego edytora.
Powoduje powrót bieżących liczb linii w zmianach edytora.
Wyjaśnia, czy edytor ma wybrany tekst czy nie.
Wróщает prawdę, jeśli ScriptDocument reprezentuje Barę Komend.
Zamknięcia wątków, które edytor zamykaćz tym dokumentem. Daje obecny wątek, aż edytor odpowie na prośba.
- EditTextAsync(newText : string,startLine : number,startCharacter : number,endLine : number,endCharacter : number):Tuple
Zastępuje tekst w określonym zakresie od ( startLine , startColumn ) do ( endLine , 1> endColumn1> ) z nowym tekstem.
- ForceSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
Prosi edytora, aby ustawił selekcję kursoра na wartościach argumentów.
- RequestSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
Prosi edytora, aby ustawił selekcję kursoра na wartościach argumentów.
Zdarzenia
- SelectionChanged(positionLine : number,positionCharacter : number,anchorLine : number,anchorCharacter : number):RBXScriptSignal
Występuje po zmianie ScriptDocument, w tym natychmiastowo po zmianie tekstu.
Wystrzela, gdy zmieniają się wyświetlane numery linii w edytorze.
Właściwości
Metody
GetLine
Zwraca tekst określonej linii. Gdy nie jest dostarczony żaden argument, zwraca pozycję kursora.
Parametry
Zwroty
Przykłady kodu
--!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
Zwraca liczbę linii w aktywnym dokumencie.
Zwroty
Przykłady kodu
--!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
instancjapodstawową instancję LuaSourceContainer, jeśli istnieje, a w przeciwnym razie nil.
Zwroty
Przykłady kodu
--!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
Zdobądź tekst zaznaczony w edytorze lub pustą stronę, jeśli nie ma wyboru.
Zwroty
Przykłady kodu
--!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
Wyświetla ostatni znany wybór w edytorze skryptów w formacie: CursorLine, CursorChar, AnchorLine, AnchorChar. Jeśli edytor skryptów nie ma wyboru, CursorLine == AnchorLine i CursorChar == AnchorChar.
Zwroty
CursorLine, CursorChar, AnchorLine, AnchorChar.
GetSelectionEnd
Zdobądź większą pozycję kurora i zatrzyma. Jeśli edytor nie ma wyboru, to są tego samego wartości.
Zwroty
Przykłady kodu
--!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
Zdobądź mniejszą pozycję kurora i zatrzyma. Jeśli edytor nie ma wyboru, to są tego samego wartości.
Zwroty
Przykłady kodu
--!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
Zwraca tekst z otwartego edytora. Musi być wezwany z 0, 2 lub 4 argumentami:
- Jeśli zostanie wezwany z 0 argumentami, otrzymuje całą zawartość otwartego edytora.
- Jeśli jest wezwany z dwoma argumentami, otrzymuje tekst dokumentu zaczynającym się od ( startLine , startColumn ).
- Jeśli wezwany z 4 argumentami, otrzymuje tekst dokumentu zaczynającym się na ( startLine , startColumn ) i kończącym się na ( endLine , 1> endColumn1> ).
Parametry
Zwroty
Przykłady kodu
--!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
Powoduje, że wyświetlanych jest obecnie liczb lini w zmianach w edytorze. Editor wyświetla linie pomiędzy startLine i endLine, włącznie. Pierwsza i ostatnia linia może być wyświetlana tylko częściowo. Na przykład, tylko największy piksel ostatniej linii może być na ekranie. Ponadto, kodeksy składania mogą ukrywać linie pomiędzy startLine i endLine.
Zwroty
Przykłady kodu
--!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
Wyjaśnia, czy edytor ma wybrany tekst czy nie.
Zwroty
Przykłady kodu
--!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
Wróщает prawdę, jeśli ScriptDocument reprezentuje Barę Komend. Bar Komend ma specjalne zasady i ograniczenia w tej API:
- Studio tworzy barwą rozkazu przed uruchomieniem wtyczek, więc nie zawsze wtedy zamyka i ponownie otwiera, gdy Studio przechodzi między DataModels.
- Nie możesz edytować EditTextAsync z powodu zabezpieczeń.
Zwroty
Przykłady kodu
--!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
Zamknięte są wnioski, które edytor zamykaćz tym dokumentem. Dostarcza obecny wątek, aż edytor odpowie na prośba. Jeśli funkcja się powoduje, to zwraca (tak, nil). Jeśli funkcja nie powoduje się, to zwraca (nie, ciąg) jako opis problemu.
Ta funkcja nie może zamykać okienka komend.
Zwroty
Przykłady kodu
--!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
Zastępuje tekst w określonym zasięgu ( startLine , startColumn ) do ( endLine , 1> endColumn</
Jeśli funkcja się powoduje, to zwraca ( true , nil ).
Funkcja wyrzuca błąd, jeśli:
- Zakres jest nieprawidłowe.
- Zakres cięcia niedozwolonego znaku, na przykład zastąp tylko niektóre z bajtów znaku niedozwolonego.
- Sama newText zawiera nieprawidłowy UTF-8.
Jeśli funkcja nie powiodła się, to wysyłuje (false, ciąg). Strzałka jest opisem problemu. Najczęstszym typem błędu jest niezgodność wersji. To się zdarza, gdy próbujesz wejrzeć EditTextAsync podczas gdy ScriptDocument jest niezgodny z treścią edytora. Jeśli się to zdarzy, możesz ponownie spróbować edytowania.
Parametry
Zwroty
ForceSetSelectionAsync
Prosi edytora, aby ustawił jego wyboru kursora na wartości argumentów. Obie argumenty muszą być przekazane, lub żadna z nich. Jeśli żadna nie jest przekazana, to wszystkie są domyślnie ustawione na argumentach kursora odpowiadających. Editor może
Parametry
Zwroty
Przykłady kodu
--!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
Prosi edytora, aby ustawił jego selekcję kursora na wartości argumentów. Obie argumenty ankora muszą być przekazane, lub obie. Jeśli żadna z nich nie jest przekazana, to wszystkie zostaną ustawione na domyślną wartość kursora. Editor może odrzucić aktualizację kursora, jeśli treść tekstu dokumentu zmieniła się
Parametry
Zwroty
Przykłady kodu
--!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
Zdarzenia
SelectionChanged
Występuje po zmianie ScriptDocument, w tym natychmiastowo po zmianie tekstu.
Parametry
Przykłady kodu
--!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
Wystąpi, gdy zmienią się wyświetlane numery linii w edytorze. Zobacz ScriptDocument.GetViewport dla szczegółów.
Parametry
Przykłady kodu
--!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)