Sdílet prostřednictvím


Koncepty rozšiřitelnosti editoru

Tento článek popisuje objektový model rozšiřitelnosti, který představuje editor sady Visual Studio a textový dokument, který je otevřen pro úpravy. Úvod do práce s funkcemi rozšíření editoru najdete v tématu Použití rozšiřitelnosti editoru sady Visual Studio.

Objektový model rozšiřitelnosti editoru sady Visual Studio se skládá z několika integrálních částí. Tento článek se zabývá ITextViewSnapshot, ITextDocumentSnapshota dalšími abstraktními reprezentacemi celého dokumentu, stejně jako Position a Span, které představují umístění a rozsahy textu v tom pořadí.

ITextViewSnapshot

ITextViewSnapshot obsahuje identifikátor URI a informace o verzi potřebné k získání ITextDocumentSnapshot a také některých vlastností textového zobrazení, jako jsou výběry.

  • Tento objekt je neměnný a po vytvoření se nikdy nezmění.
  • K získání obsahu z dokumentu můžete použít ITextViewSnapshot.GetTextDocumentAsync(). Volání této metody je nákladné a mělo by se provést pouze v případě, že potřebujete obsah dokumentu.
  • ITextViewSnapshot nelze změnit přímo. Všechny změny jsou požadovány prostřednictvím mutace. Viz Provedení změn v textovém dokumentu z rozšíření.

ITextDocumentSnapshot

ITextDocumentSnapshot obsahuje obsah textového dokumentu z konkrétního okamžiku nebo konkrétní verze.

Pokud znáte starší rozšíření sady Visual Studio, ITextDocumentSnapshot je téměř stejný jako ITextSnapshot a podporuje většinu stejných metod pro přístup k textu.

Osvědčené postupy:

  • Umístění a rozpětí můžete použít k reprezentaci podřetězců v dokumentu, aniž byste museli prostředky kopírovat nebo přidělovat řetězce. Většina rozhraní API funguje z hlediska těchto primitiv.
  • Syntaxi indexeru, textDocument[0], můžete použít ke čtení znaku znakem v dokumentu bez zkopírování do řetězce.
  • Pokud musíte vytvořit řetězec například pro použití jako klíč ve slovníku, použijte variantu, která bere Span, abyste se vyhnuli vytváření velkého nepotřebného řetězce z celého řádku nebo dokumentu.
  • Nepředpokládejte, že řádky nebo dokumenty budou krátké. Mnoho jazyků se zkomprimuje do dlouhých řádků nebo zpracovává velmi velké soubory.
    • ITextDocumentSnapshot odkazuje na velké datové struktury, které mohou spotřebovávat paměť, pokud je uložena dostatečně stará verze. Osvědčeným postupem je pravidelně aktualizovat pozice a rozsahy, které ukládáte, na nejnovější verzi dokumentu pomocí metody TranslateTo(), aby stará verze ITextDocumentSnapshot mohla být uvolněna z paměti.

Postavení

Představuje pozici v textovém dokumentu. Na rozdíl od int pozic je typ Pozice informován o ITextDocumentSnapshot pochází a podporuje GetChar() získat přímo znak v tomto okamžiku.

Pokud znáte starší rozšíření sady Visual Studio, pozice je téměř stejná jako SnapshotPoint a podporuje většinu stejných metod.

Rozpětí

Představuje souvislý podřetězec znaků v ITextDocumentSnapshot. Na rozdíl od řetězce vytvořeného pomocí string.Substring() nebo ITextDocumentSnapshot.CopyToString()nevyžaduje vytvoření objektu Span žádné přidělení ani dodatečnou paměť. Později můžete volat Span.GetText(), abyste jej převedli do řetězce v odloženém režimu.

Pokud znáte starší rozšíření sady Visual Studio, Position je téměř stejná jako SnapshotSpan a podporuje většinu stejných metod.

Projděte si ukázkový kód pro jednoduché rozšíření založené na editoru:

  • UkázkaVýběruDokumentu