ScriptDocument

Tampilkan yang Tidak Digunakan Lagi

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Tidak Dapat Dibuat
Tidak Direplikasi

Sebuah ScriptDocument instansi adalah proxy dari dokumen Studio Script Editor. Ini berbeda dengan LuaSourceContainer yang terbuka di editor dalam mode draft yang mewakili negara sementara dari dokumen terbuka, dan representasinya adalah dalam format yang le

Editor Skrip sendiri ada dan berubah di thread yang berbeda daripada setiap DataModel , jadi ScriptDocument menggandakan Editor Skrip yang terbuka, tetapi itu bukan editor terbuka. Karena replikasi, ada kadang-kadang ada sed

Eksistensi sebuah ScriptDocument menunjukkan bahwa dokumen dibuka di Editor Skrip. Semua instansi ScriptDocument memiliki ScriptEditorService sebagai orang tua mereka. Setiap instansi mengikuti konvensi kode berikut:

  • Semua teks di ScriptDocument dirancang UTF-8.
  • Semua indeks garis adalah 1-indexed.
  • Semua indeks karakter diindeks 1-index dan menghitung UTF-8 bytes, bukan grafem, jadi peringatan yang sama dari TextBox.CursorPosition berlaku: banyak karakter Unicode mengambil lebih dari satu bit.
  • Semua rentang termasuk posisi awal mereka dan eksklusif dari posisi akhir mereka, jadi mulai == akhir menyiratkan rentang kosong.

Semua API untuk ScriptDocument berada di tingkat keamanan Plugin .

Rangkuman

Metode

  • GetLine(lineIndex : number?):string
    Keamanan Plugin

    Mengembalikan teks dari baris yang ditentukan. Saat tidak ada argumen yang disediakan, mengembalikan baris dari posisi cursor saat ini.

  • Keamanan Plugin

    Mengembalikan jumlah baris dalam dokumen.

  • Keamanan Plugin

    Mengembalikan instansi LuaSourceContainer yang berada di kejadian, jika ada, jika tidak maka nil .

  • Keamanan Plugin

    Mendapatkan teks yang dipilih di editor, atau string kosong jika tidak ada pilihan.

  • Keamanan Plugin

    Mengembalikan pilihan terakhir dari Editor Skrip dalam format: CursorLine, CursorChar, AnchorLine, AnchorChar. Jika Editor Skrip tidak memiliki pilihan, CursorLine == AnchorLine dan CursorChar == AnchorChar .

  • Keamanan Plugin

    Mendapatkan posisi kurungan dan posisi tumpangan yang lebih besar. Jika editor tidak memiliki pilihan, mereka sama.

  • Keamanan Plugin

    Mendapatkan posisi kurungan dan posisi kurungan yang lebih kecil. Jika editor tidak memiliki pilihan, mereka sama.

  • GetText(startLine : number?,startCharacter : number?,endLine : number?,endCharacter : number?):string
    Keamanan Plugin

    Mengembalikan teks dari editor yang terbuka.

  • Keamanan Plugin

    Mengembalikan nomor baris yang saat ini ditampilkan dalam editor perubahan.

  • Keamanan Plugin

    Mengembalikan apakah atau tidak editor memiliki teks yang dipilih.

  • Keamanan Plugin

    Mengembalikan benar jika ScriptDocument mewakili Command bar.

  • Hasil
    Keamanan Plugin

    Permintaan yang dihubungkan dengan dokumen ini tutup. Memberikan thread saat ini sampai editor menjawab permintaan.

  • EditTextAsync(newText : string,startLine : number,startCharacter : number,endLine : number,endCharacter : number):Tuple
    Hasil
    Keamanan Plugin

    Mengganti teks di rentang yang ditentukan dari ( startLine , startColumn ) ke ( endLine , 1> endColumn1> ) dengan teks baru.

  • ForceSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
    Hasil
    Keamanan Plugin

    Meminta editor untuk menetapkan pemilihan kurungan kursi ke nilai argumen.

  • Hasil
    Keamanan Plugin
  • RequestSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
    Hasil
    Keamanan Plugin

    Meminta editor untuk menetapkan pemilihan kurungan kursi ke nilai argumen.

Acara

Properti

Metode

GetLine

Keamanan Plugin

Mengembalikan teks dari baris yang ditentukan. Saat tidak ada argumen yang disediakan, mengembalikan baris dari posisi cursor saat ini.

Parameter

lineIndex: number
Nilai Default: "nil"

Memberikan nilai

Contoh Kode

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

Keamanan Plugin

Mengembalikan jumlah baris dalam dokumen aktif.


Memberikan nilai

Contoh Kode

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
Keamanan Plugin

Mengembalikan instansi LuaSourceContainer yang berada di kejadian, jika ada, jika tidak maka nil .


Memberikan nilai

Contoh Kode

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

Keamanan Plugin

Mendapatkan teks yang dipilih di editor, atau string kosong jika tidak ada pilihan.


Memberikan nilai

Contoh Kode

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

Keamanan Plugin

Mengembalikan pilihan terakhir dari Editor Skrip dalam format: CursorLine, CursorChar, AnchorLine, AnchorChar. Jika Editor Skrip tidak memiliki pilihan, CursorLine == AnchorLine dan CursorChar == AnchorChar .


Memberikan nilai

CursorLine, CursorChar, AnchorLine, AnchorChar.

GetSelectionEnd

Keamanan Plugin

Mendapatkan posisi kurungan dan posisi tumpangan yang lebih besar. Jika editor tidak memiliki pilihan, mereka sama.


Memberikan nilai

Contoh Kode

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

Keamanan Plugin

Mendapatkan posisi kurungan dan posisi kurungan yang lebih kecil. Jika editor tidak memiliki pilihan, mereka sama.


Memberikan nilai

Contoh Kode

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

Keamanan Plugin

Mengembalikan teks dari editor yang terbuka. Harus dipanggil dengan 0, 2 atau 4 argumen:

  • Jika dianggil dengan 0 argument, mendapatkan seluruh konten dari editor yang terbuka.
  • Jika dipanggil dengan 2 argument, mendapatkan teks dokumen dimulai dari ( startLine , startColumn ).
  • Jika dipanggil dengan 4 argument, mendapatkan teks dokumen dimulai dari ( startLine , startColumn ) dan berakhir dari ( endLine , 1> endColumn1> ).

Parameter

startLine: number
Nilai Default: "nil"
startCharacter: number
Nilai Default: "nil"
endLine: number
Nilai Default: "nil"
endCharacter: number
Nilai Default: "nil"

Memberikan nilai

Contoh Kode

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

Keamanan Plugin

Mengembalikan nomor baris yang saat ini ditampilkan dalam editor perubahan. Editor menunjukkan garis antara startLine dan endLine, termasuk. Garis pertama dan terakhir mungkin hanya ditampilkan secara parcial. Misalnya, hanya topmost pixel dari garis terakhir yang mungkin ada di layar. Selain itu, kode lipat mungkin menyembunyikan garis di antara startLine dan endLine.


Memberikan nilai

Contoh Kode

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

Keamanan Plugin

Mengembalikan apakah atau tidak editor memiliki teks yang dipilih.


Memberikan nilai

Contoh Kode

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

Keamanan Plugin

Mengembalikan benar jika ScriptDocument mewakili Command bar. Bar Command memiliki aturan dan batasan khusus dalam API ini:

  • Studio menciptakan bilah Perintah sebelum mengeksekusi plugin, jadi itu tidak selalu menyetel acara yang dibuka, meskipun itu menutup dan membuka kembali saat Studio beralih antara DataModel.
  • Anda tidak dapat mengedit bilah Perintah dengan EditTextAsync untuk alasan keamanan.

Memberikan nilai

Contoh Kode

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

Hasil
Keamanan Plugin

Permintaan yang dihasilkan oleh editor bersama dengan dokumen ini tutup. Memberikan thread saat ini sampai editor menjawab permintaan. Jika fungsi berhasil, itu mengembalikan (true, nil). Jika fungsi gagal, itu mengembalikan (false, string) sebagai deskripsi masalah.

Fungsi ini tidak dapat menutup bilah perintah.


Memberikan nilai

Contoh Kode

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

Hasil
Keamanan Plugin

Mengganti teks di rentang yang ditentukan dari ( startLine , startColumn ) ke ( endLine , 1> endColumn</

Jika fungsi berhasil, itu mengembalikan ( true , nil ).

Fungsi mengalami kesalahan jika:

  • Jangkauan tidak valid.
  • Jangkauan akan menylicakan karakter unicode, misalnya hanya mengganti beberapa dari bayangan unicode.
  • newText sendiri berisi UTF-8 yang tidak valid.

Jika fungsi gagal, itu mengembalikan (false, string). String adalah deskripsi masalah. Jenis kesalahan paling umum adalah ketidaksesuaian versi. Ini terjadi ketika Anda mencoba untuk memanggil EditTextAsync selama waktu ketika ScriptDocument keluar dari sinkronisasi dengan konten editor. Jika ini terjadi, Anda dapat menc

Parameter

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

Memberikan nilai

ForceSetSelectionAsync

Hasil
Keamanan Plugin

Meminta editor untuk menetapkan pilihan cursor-nya ke nilai argumen. Kedua nilai argumen harus dilewati, atau tidak. Jika tidak, maka mereka akan bertindak sama seperti cursor argument yang sesuai. Editor mungkin menolak untuk menyelesaikan cursor jika konten teks

Parameter

cursorLine: number
cursorCharacter: number
anchorLine: number
Nilai Default: "nil"
anchorCharacter: number
Nilai Default: "nil"

Memberikan nilai

Contoh Kode

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

Hasil
Keamanan Plugin

Parameter

edits: Array

Memberikan nilai

RequestSetSelectionAsync

Hasil
Keamanan Plugin

Meminta editor untuk menetapkan pilihan cursor-nya ke nilai argumen. Kedua argumen tumpangan harus dilewati, atau tidak. Jika tidak, maka mereka semua bernilai sama dengan argumen cursor yang sesuai. Editor mungkin menolak untuk menyetujui cursor jika konten teks dokumen telah berubah, atau cursor telah pindah sejak permintaan dibuat

Parameter

cursorLine: number
cursorCharacter: number
anchorLine: number
Nilai Default: "nil"
anchorCharacter: number
Nilai Default: "nil"

Memberikan nilai

Contoh Kode

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

Acara

SelectionChanged

Keamanan Plugin

Diaktifkan saat ScriptDocument berubah, termasuk segera setelah perubahan teks.

Parameter

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

Contoh Kode

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

Keamanan Plugin

Diaktifkan saat nomor baris yang ditunjukkan di editor berubah. Lihat ScriptDocument.GetViewport untuk detail.

Parameter

startLine: number
endLine: number

Contoh Kode

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)