ScriptDocument

Pokaż przestarzałe

*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.

Brak możliwości tworzenia
Bez replikacji

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

  • GetLine(lineIndex : number?):string
    Zabezpieczenia dodatku plug-in

    Zwraca tekst określonej linii. Gdy nie jest dostarczony żaden argument, zwraca pozycję kursora.

  • Zabezpieczenia dodatku plug-in

    Wyświetla liczbę linii w dokumencie.

  • Zabezpieczenia dodatku plug-in

    instancjapodstawową instancję LuaSourceContainer, jeśli istnieje, a w przeciwnym razie nil.

  • Zabezpieczenia dodatku plug-in

    Zdobądź tekst zaznaczony w edytorze lub pustą stronę, jeśli nie ma wyboru.

  • Zabezpieczenia dodatku plug-in

    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.

  • Zabezpieczenia dodatku plug-in

    Zdobądź większą pozycję kurora i zatrzyma. Jeśli edytor nie ma wyboru, to są tego samego wartości.

  • Zabezpieczenia dodatku plug-in

    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
    Zabezpieczenia dodatku plug-in

    Zwraca tekst z otwartego edytora.

  • Zabezpieczenia dodatku plug-in

    Powoduje powrót bieżących liczb linii w zmianach edytora.

  • Zabezpieczenia dodatku plug-in

    Wyjaśnia, czy edytor ma wybrany tekst czy nie.

  • Zabezpieczenia dodatku plug-in

    Wróщает prawdę, jeśli ScriptDocument reprezentuje Barę Komend.

  • Wynik
    Zabezpieczenia dodatku plug-in

    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
    Wynik
    Zabezpieczenia dodatku plug-in

    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
    Wynik
    Zabezpieczenia dodatku plug-in

    Prosi edytora, aby ustawił selekcję kursoра na wartościach argumentów.

  • Wynik
    Zabezpieczenia dodatku plug-in
  • RequestSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
    Wynik
    Zabezpieczenia dodatku plug-in

    Prosi edytora, aby ustawił selekcję kursoра na wartościach argumentów.

Zdarzenia

Właściwości

Metody

GetLine

Zabezpieczenia dodatku plug-in

Zwraca tekst określonej linii. Gdy nie jest dostarczony żaden argument, zwraca pozycję kursora.

Parametry

lineIndex: number
Wartość domyślna: "nil"

Zwroty

Przykłady kodu

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

Zabezpieczenia dodatku plug-in

Zwraca liczbę linii w aktywnym dokumencie.


Zwroty

Przykłady kodu

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
Zabezpieczenia dodatku plug-in

instancjapodstawową instancję LuaSourceContainer, jeśli istnieje, a w przeciwnym razie nil.


Zwroty

Przykłady kodu

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

Zabezpieczenia dodatku plug-in

Zdobądź tekst zaznaczony w edytorze lub pustą stronę, jeśli nie ma wyboru.


Zwroty

Przykłady kodu

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

Zabezpieczenia dodatku plug-in

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

Zabezpieczenia dodatku plug-in

Zdobądź większą pozycję kurora i zatrzyma. Jeśli edytor nie ma wyboru, to są tego samego wartości.


Zwroty

Przykłady kodu

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

Zabezpieczenia dodatku plug-in

Zdobądź mniejszą pozycję kurora i zatrzyma. Jeśli edytor nie ma wyboru, to są tego samego wartości.


Zwroty

Przykłady kodu

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

Zabezpieczenia dodatku plug-in

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

startLine: number
Wartość domyślna: "nil"
startCharacter: number
Wartość domyślna: "nil"
endLine: number
Wartość domyślna: "nil"
endCharacter: number
Wartość domyślna: "nil"

Zwroty

Przykłady kodu

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

Zabezpieczenia dodatku plug-in

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

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

Zabezpieczenia dodatku plug-in

Wyjaśnia, czy edytor ma wybrany tekst czy nie.


Zwroty

Przykłady kodu

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

Zabezpieczenia dodatku plug-in

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

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

Wynik
Zabezpieczenia dodatku plug-in

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

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

Wynik
Zabezpieczenia dodatku plug-in

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

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

Zwroty

ForceSetSelectionAsync

Wynik
Zabezpieczenia dodatku plug-in

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

cursorLine: number
cursorCharacter: number
anchorLine: number
Wartość domyślna: "nil"
anchorCharacter: number
Wartość domyślna: "nil"

Zwroty

Przykłady kodu

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

Wynik
Zabezpieczenia dodatku plug-in

Parametry

edits: Array

Zwroty

RequestSetSelectionAsync

Wynik
Zabezpieczenia dodatku plug-in

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

cursorLine: number
cursorCharacter: number
anchorLine: number
Wartość domyślna: "nil"
anchorCharacter: number
Wartość domyślna: "nil"

Zwroty

Przykłady kodu

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

Zdarzenia

SelectionChanged

Zabezpieczenia dodatku plug-in

Występuje po zmianie ScriptDocument, w tym natychmiastowo po zmianie tekstu.

Parametry

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

Przykłady kodu

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

Zabezpieczenia dodatku plug-in

Wystąpi, gdy zmienią się wyświetlane numery linii w edytorze. Zobacz ScriptDocument.GetViewport dla szczegółów.

Parametry

startLine: number
endLine: number

Przykłady kodu

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)