Поделиться через


Внутри редактора

Редактор состоит из нескольких различных подсистем, которые предназначены для сохранения текстовой модели редактора отдельно от текстового представления и пользовательского интерфейса.

В этих разделах описываются различные аспекты редактора:

В этих разделах описываются функции редактора:

Подсистемы

Подсистема текстовой модели

Подсистема текстовой модели отвечает за представление текста и включение его манипуляций. Подсистема текстовой модели содержит ITextBuffer интерфейс, описывающий последовательность символов, отображаемых редактором. Этот текст можно изменять, отслеживать и иначе манипулировать многими способами. Текстовая модель также предоставляет типы для следующих аспектов:

  • Служба, которая связывает текст с файлами и управляет чтением и записью их в файловой системе.

  • Различающаяся служба, которая находит минимальные различия между двумя последовательностями объектов.

  • Система описания текста в буфере с точки зрения подмножества текста в других буферах.

Подсистема текстовой модели свободна от концепций пользовательского интерфейса. Например, он не несет ответственности за форматирование текста или макет текста, и у него нет знаний о визуальных украшениях, которые могут быть связаны с текстом.

Общедоступные типы подсистемы текстовой модели содержатся в Microsoft.VisualStudio.Text.Data.dll и Microsoft.VisualStudio.CoreUtility.dll, которые зависят только от библиотеки базовых классов платформа .NET Framework и управляемой платформы расширяемости (MEF).

Подсистема представления текста

Подсистема представления текста отвечает за форматирование и отображение текста. Типы в этой подсистеме делятся на два уровня в зависимости от того, зависят ли типы от Windows Presentation Foundation (WPF). Наиболее важными являются ITextView типы, IWpfTextViewкоторые управляют набором отображаемых текстовых строк, а также курсором, выделением и средствами для украшения текста с помощью элементов пользовательского интерфейса WPF. Эта подсистема также предоставляет поля вокруг области отображения текста. Эти поля могут быть расширены и могут содержать различные виды содержимого и визуальных эффектов. Примерами полей являются отображение номеров строк и полос прокрутки.

Общедоступные типы подсистемы представления текста содержатся в Microsoft.VisualStudio.Text.UI.dll и Microsoft.VisualStudio.Text.UI.Wpf.dll. Первая сборка содержит элементы, независимые от платформы, а второй — элементы, относящиеся к WPF.

Подсистема классификации

Подсистема классификации отвечает за определение свойств шрифта для текста. Классификатор разбивает текст на различные классы, например "ключевое слово" или "комментарий". Карта формата классификации связывает эти классы с фактическими свойствами шрифта, например "Blue Consolas 10 pt". Эта информация используется текстовым представлением при форматировании и отрисовки текста. Теги, описанные далее в этом разделе, позволяют связывать данные с диапазонами текста.

Общедоступные типы подсистемы классификации содержатся в Microsoft.VisualStudio.Text.Logic.dll и взаимодействуют с визуальными аспектами классификации, которые содержатся в Microsoft.VisualStudio.Text.UI.Wpf.dll.

Подсистема операций

Подсистема операций определяет поведение редактора. Она предоставляет реализацию для команд редактора Visual Studio и системы отмены.

Более подробное представление о текстовой модели и представлении текста

Текстовая модель

Подсистема текстовой модели состоит из различных групп типов текста. К ним относятся текстовый буфер, моментальные снимки текста и диапазоны текста.

Текстовые буферы и моментальные снимки текста

Интерфейс ITextBuffer представляет последовательность символов Юникода, закодированных с помощью UTF-16, которая используется String типом в платформа .NET Framework. Текстовый буфер можно сохранить в виде документа файловой системы, но это не обязательно.

Используется ITextBufferFactoryService для создания пустого текстового буфера или текстового буфера, инициализированного из строки или из TextReader. Текстовый буфер можно сохранить в файловой ITextDocumentсистеме в виде .

Любой поток может изменять текстовый буфер, пока поток не будет обладать текстовым буфером путем вызова TakeThreadOwnership. После этого только этот поток может выполнять изменения.

Текстовый буфер может проходить через множество версий во время его существования. Новая версия создается каждый раз, когда буфер редактируется, и неизменяемый ITextSnapshot представляет содержимое этой версии буфера. Так как моментальные снимки текста неизменяемы, вы можете получить доступ к моментальному снимку текста в любом потоке без ограничений, даже если текстовый буфер, который он представляет, продолжает изменяться.

Текстовые моментальные снимки и строки моментальных снимков текста

Содержимое моментального снимка текста можно просматривать как последовательность символов или как последовательность строк. Символы и строки индексируются начиная с нуля. Пустой моментальный снимок текста содержит нулевые символы и одну пустую строку. Строка разделена любой допустимой последовательностью символов разрыва строки Юникода или по началу или концу буфера. Символы разрывов строки явно представлены в текстовом снимке, а разрывы строк в текстовом снимке не все должны быть одинаковыми.

Примечание.

Дополнительные сведения о символах разрывов строк в редакторе Visual Studio см. в разделе "Кодировки и разрывы строк".

Строка текста представлена ITextSnapshotLine объектом, который можно получить из текстового снимка для определенного номера строки или для определенной позиции символа.

SnapshotPoints, SnapshotSpans и NormalizedSnapshotSpanCollections

Представляет SnapshotPoint позицию символа в моментальном снимке. Позиция гарантированно лежит между нулем и длиной моментального снимка. Представляет SnapshotSpan диапазон текста в моментальном снимке. Его позиция End гарантированно лежит между нулем и длиной моментального снимка. Состоит NormalizedSnapshotSpanCollection из набора SnapshotSpan объектов из одного моментального снимка.

Диапазоны и нормализованныеSpanCollections

Представляет Span интервал, который можно применить к диапазону текста в текстовом снимке. Позиции моментальных снимков основаны на нулях, поэтому диапазоны могут начинаться с любой позиции, включая ноль. Свойство End диапазона равно сумме его Start свойства и его Length свойству. Не Span включает символ, индексемый свойством End . Например, диапазон, имеющий start=5 и Length=3, имеет End=8, и включает символы в позициях 5, 6 и 7. Нотация для этого диапазона — [5..8).

Два диапазона пересекаются, если они имеют какие-либо позиции в общем, включая позицию end. Поэтому пересечение [3, 5) и [2, 7) равно [3, 5) и пересечению [3, 5) и [5, 7) равно [5, 5). (Обратите внимание, что [5, 5) является пустым диапазоном.)

Два диапазона перекрываются, если они имеют общие позиции, за исключением позиции end. Пустой диапазон никогда не перекрывает любой другой диапазон, и перекрытие двух диапазонов никогда не является пустым.

A NormalizedSpanCollection — это список диапазонов в порядке свойств начального диапазона. В списке перекрывающиеся или привязные диапазоны объединяются. Например, учитывая набор диапазонов [5..9), [0.1), [3.6) и [9.10), нормализованный список диапазонов равен [0..1), [3..10).

Уведомления об изменении текста и ITextEdit, TextVersion и текстовых изменений

Содержимое текстового буфера можно изменить с помощью ITextEdit объекта. Создание такого объекта (с помощью одного из CreateEdit() методов ITextBuffer) запускает текстовую транзакцию, состоящую из редактирования текста. Каждое изменение — это замена некоторого диапазона текста в буфере строкой. Координаты и содержимое каждого изменения выражаются относительно моментального снимка буфера при запуске транзакции. Объект ITextEdit настраивает координаты изменений, затронутых другими изменениями в той же транзакции.

Например, рассмотрим текстовый буфер, содержащий эту строку:

abcdefghij

Примените транзакцию, содержащую два изменения, одно изменение, которое заменяет диапазон [2..4) с помощью символа X и второго изменения, заменяющего диапазон [6.9) с помощью символа Y. Результатом является этот буфер:

abXefYj

Координаты для второго изменения были вычисляются относительно содержимого буфера в начале транзакции, прежде чем было применено первое изменение.

Изменения буфера вступают в силу при ITextEdit фиксации объекта путем вызова метода Apply() . Если было по крайней мере одно непустое изменение, создается новое, создается новое ITextVersion ITextSnapshot и создается одно Changed событие. Каждая текстовая версия имеет другой текстовый снимок. Моментальный снимок текста представляет полное состояние текстового буфера после изменения транзакции, но текстовая версия описывает только изменения из одного моментального снимка на следующий. Как правило, моментальные снимки текста должны использоваться один раз, а затем не карта, в то время как текстовые версии должны оставаться в живых в течение некоторого времени.

Текстовая версия содержит .INormalizedTextChangeCollection Эта коллекция описывает изменения, которые при применении к моментальному снимку создают следующий моментальный снимок. Каждая ITextChange из коллекций содержит позицию символа изменения, замененную строку и строку замены. Замененная строка пуста для базовой вставки, а строка замены пуста для базового удаления. Нормализованная коллекция всегда null используется для последней версии текстового буфера.

Только один ITextEdit объект можно создать экземпляр для текстового буфера в любое время, и все изменения текста должны выполняться в потоке, который владеет текстовым буфером (если было заявлено владение). Изменение текста можно отказаться, вызвав метод Cancel или его Dispose метод.

ITextBufferтакже предоставляет Insert()Delete()методы, Replace() которые похожи на те, которые находятся в интерфейсеITextEdit. Вызов этих объектов имеет тот же эффект, что и создание ITextEdit объекта, выполнение аналогичного вызова, а затем применение правки.

Точки отслеживания и диапазоны отслеживания

Представляет ITrackingPoint позицию символа в текстовом буфере. Если буфер редактируется таким образом, что позиция символа перемещается, точка отслеживания сдвигается вместе с ней. Например, если точка отслеживания ссылается на позицию 10 в буфере, а пять символов вставляются в начале буфера, то точка отслеживания ссылается на позицию 15. Если вставка происходит точно в позиции, обозначенной точкой отслеживания, его поведение определяется его PointTrackingModeповедением, которое может быть либо Positive либо Negative. Если режим отслеживания положительный, точка отслеживания ссылается на тот же символ, который теперь находится в конце вставки. Если режим отслеживания отрицательный, точка отслеживания ссылается на первый вставленный символ в исходном положении. Если символ в позиции, представленной точкой отслеживания, удаляется, точка отслеживания переходит к первому символу, который следует удаленному диапазону. Например, если точка отслеживания ссылается на символ в позиции 5, а символы на позициях 3–6 удаляются, точка отслеживания ссылается на символ в позиции 3.

Представляет ITrackingSpan диапазон символов вместо одной позиции. Его поведение определяется его SpanTrackingMode. Если режим отслеживания диапазонов — SpanTrackingMode.EdgeInclusive, диапазон отслеживания растет, чтобы включить текст, вставленный на краях. Если режим отслеживания диапазонов — SpanTrackingMode.EdgeExclusive, диапазон отслеживания не включает текст, вставленный на его краях. Однако если режим отслеживания диапазонов — SpanTrackingMode.EdgePositive, вставка отправляет текущую позицию к началу, а если режим отслеживания диапазона — SpanTrackingMode.EdgeNegative, вставка отправляет текущую позицию к концу.

Вы можете получить положение точки отслеживания или диапазон диапазона отслеживания для любого моментального снимка текстового буфера, к которому они относятся. Точки отслеживания и диапазоны отслеживания можно безопасно ссылаться из любого потока.

Типы содержимого

Типы контента — это механизм определения различных типов контента. Тип контента может быть типом файла, например "text", "code" или "binary", или типом технологии, например "xml", "vb" или "c#". Например, слово "using" является ключевое слово в C# и Visual Basic, но не на других языках программирования. Таким образом, определение этого ключевое слово будет ограничено типами контента c#и vb.

Типы контента используются в качестве фильтра для украшений и других элементов редактора. Многие функции редактора и точки расширения определяются для каждого типа контента. Например, цвет текста отличается для файлов обычного текста, XML-файлов и файлов исходного кода Visual Basic. Текстовые буферы обычно назначаются типу контента при их создании, а тип контента буфера текста можно изменить.

Типы контента могут наследоваться от других типов контента. Позволяет ContentTypeDefinition указать несколько базовых типов в качестве родителей заданного типа контента.

Разработчики могут определять собственные типы контента и регистрировать их с помощью .IContentTypeRegistryService Многие функции редактора можно определить в отношении определенного типа контента с помощью .ContentTypeAttribute Например, поля редактора, украшения и обработчики мыши можно определить таким образом, чтобы они применялись только к редакторам, отображающим определенные типы контента.

Текстовое представление

Часть представления шаблона контроллера представления модели (MVC) определяет текстовое представление, форматирование представления, графические элементы, такие как полоса прокрутки и курсор. Все элементы презентации редактора Visual Studio основаны на WPF.

Текстовые представления

Интерфейс ITextView — это независимое от платформы представление текста. Он используется в основном для отображения текстовых документов в окне, но его также можно использовать для других целей, например в подсказке.

Текстовое представление ссылается на различные виды текстовых буферов. Свойство TextViewModel ссылается на ITextViewModel объект, указывающий на эти три разных текстовых буфера: буфер данных, являющийся буфером верхнего уровня данных, буфером редактирования, в котором происходит редактирование, и визуальным буфером, который отображается в текстовом представлении.

Текст форматируется на основе классификаторов, присоединенных к базовому текстовому буферу, и украшается с помощью поставщиков украшений, присоединенных к самому представлению текста.

Система координат представления текста

Система координат текстового представления указывает позиции в текстовом представлении. В этой системе координат x значение 0,0 соответствует левому краю отображаемого текста, а значение y 0,0 соответствует верхнему краю отображаемого текста. Координата x увеличивается слева направо, а координата y увеличивается сверху вниз.

Окно просмотра (часть текста, видимая в текстовом окне), не может быть прокручена так же, как по горизонтали, так как она прокручивается по вертикали. Окно просмотра прокручивается по горизонтали, изменяя левую координату, чтобы она двигалась относительно поверхности рисования. Однако окно просмотра можно прокручивать по вертикали только путем изменения отрисованного текста, что приводит LayoutChanged к возникновению события.

Расстояния в системе координат соответствуют логическим пикселям. Если область отрисовки текста отображается без преобразования масштабирования, то одна единица в системе координат отрисовки текста соответствует одному пикселю на экране.

Отступы

Интерфейс ITextViewMargin представляет поле и позволяет контролировать видимость поля и его размер. Существует четыре предопределенных поля, которые называются "Сверху", "Слева", "Справа" и "Вниз" и присоединены к верхнему, нижнему, левому или правому краю представления. Эти поля — это контейнеры, в которых можно разместить другие поля. Интерфейс определяет методы, возвращающие размер поля и видимость поля. Поля — это визуальные элементы, предоставляющие дополнительные сведения о представлении текста, к которому они присоединены. Например, поле "Номер строки" отображает номера строк для представления текста. Поле глифа отображает элементы пользовательского интерфейса.

Интерфейс IWpfTextViewMarginProvider обрабатывает создание и размещение полей. Поля можно упорядочить по отношению к другим полям. Поля с более высоким приоритетом расположены ближе к текстовому представлению. Например, если есть два левых поля, поля А и поля B, а поле B имеет более низкий приоритет, чем поле А, поле B отображается слева от поля А.

Узел представления текста

Интерфейс IWpfTextViewHost содержит текстовое представление и все привязочные украшения, сопровождающие представление, например полосы прокрутки. Узел представления текста также содержит поля, присоединенные к границе представления.

Форматированный текст

Текст, отображаемый в текстовом представлении, состоит из ITextViewLine объектов. Каждая строка представления текста соответствует одной строке текста в текстовом представлении. Длинные строки в базовом текстовом буфере могут быть частично скрыты (если оболочка слов не включена) или разбита на несколько строк представления текста. Интерфейс ITextViewLine содержит методы и свойства для сопоставления координат и символов, а также для украшений, которые могут быть связаны с линией.

ITextViewLine объекты создаются с помощью IFormattedLineSource интерфейса. Если вы просто обеспокоены текстом, отображаемым в настоящее время в представлении, можно игнорировать источник форматирования. Если вы заинтересованы в формате текста, который не отображается в представлении (например, для поддержки вырезания и вставки форматированного текста), можно использовать IFormattedLineSource для форматирования текста в текстовом буфере.

Текстовое представление форматирует по одному за раз ITextSnapshotLine .

Возможности редактора

Функции редактора разработаны таким образом, чтобы определение функции было отдельно от его реализации. Редактор включает следующие функции:

  • Теги и классификаторы

  • Украшения

  • Проекция

  • структуризация

  • Привязки мыши и ключа

  • Операции и примитивы

  • IntelliSense

Теги и классификаторы

Теги — это маркеры, связанные с диапазоном текста. Они могут быть представлены различными способами, например с помощью цвета текста, подчеркивания, графики или всплывающих окон. Классификаторы являются одним из типов тегов.

Другие типы тегов предназначены TextMarkerTag для выделения текста, OutliningRegionTag для описания и ErrorTag для ошибок компиляции.

Типы классификации

Интерфейс IClassificationType представляет класс эквивалентности, который является абстрактной категорией текста. Типы классификации могут наследоваться от других типов классификации. Например, классификации языка программирования могут включать "ключевое слово", "комментарий" и "идентификатор", которые все наследуются от "кода". Типы классификации естественного языка могут включать "существительное", "глагол" и "прилагательный", которые все наследуют от "естественного языка".

Классификации

Классификация — это экземпляр определенного типа классификации, обычно по диапазону текста. A ClassificationSpan используется для представления классификации. Диапазон классификации можно рассматривать как метку, которая охватывает определенный диапазон текста и сообщает системе, что этот диапазон текста имеет определенный тип классификации.

Классификаторы

Механизм IClassifier , который разбивает текст на набор классификаций. Классификаторы должны определяться для определенных типов контента и создавать экземпляры для определенных текстовых буферов. Клиенты должны реализовать IClassifier для участия в классификации текста.

Агрегаты классификаторов

Агрегататор классификатора — это механизм, который объединяет все классификаторы для одного текстового буфера в один набор классификаций. Например, классификатор C# и классификатор английского языка могут создавать классификации по комментариям в файле C#. Рассмотрим этот комментарий:

// This method produces a classifier

Классификатор C# может пометить весь диапазон как комментарий, а классификатор английского языка может классифицировать "производит" как "verb" и "method" как "существительное". Агрегат создает набор не перекрывающихся классификаций, а тип набора основан на всех вкладах.

Агрегатор классификатора также является классификатором, так как он разбивает текст на набор классификаций. Агрегатировщик классификатора также гарантирует отсутствие перекрывающихся классификаций и сортировку классификаций. Отдельные классификаторы могут возвращать любой набор классификаций в любом порядке и перекрываться каким-либо образом.

Форматирование классификации и цвет текста

Форматирование текста является примером функции, созданной на основе классификации текста. Он используется слоем текстового представления для определения отображения текста в приложении. Область форматирования текста зависит от WPF, но логическое определение классификаций не выполняется.

Формат классификации — это набор свойств форматирования для определенного типа классификации. Эти форматы наследуются от формата родительского типа классификации.

Это IClassificationFormatMap сопоставление типа классификации с набором свойств форматирования текста. Реализация карты формата в редакторе обрабатывает все экспорты форматов классификации.

Украшения

Украшения — это графические эффекты, которые не связаны непосредственно с шрифтом и цветом символов в текстовом представлении. Например, красное подчеркивание волнистых элементов, которое используется для обозначения нескомпилированного кода во многих языках программирования, является внедренным украшением, а всплывающие подсказки являются всплывающими украшениями. Украшения являются производными от UIElement и реализуются ITag. Двумя специализированными типами тегов украшения являются SpaceNegotiatingAdornmentTagукрашения, которые занимают то же пространство, что и текст в представлении, и ErrorTagдля подчеркивания волнистой линии.

Внедренные украшения — это графические элементы, которые образуют часть форматированного текстового представления. Они организованы в разных уровнях Z-порядка. Существует три встроенных слоя, как показано ниже: текст, курсор и выделение. Однако разработчики могут определять больше слоев и помещать их в порядок в отношении друг друга. Три типа внедренных украшений — это относительные текстовые украшения (которые перемещаются при перемещении текста и удаляются при удалении текста), относительное оформление представления (которые связаны с нетекстовых частей представления), а также управляемые владельцем украшения (разработчик должен управлять их размещением).

Всплывающие украшения — это рисунки, которые отображаются в небольшом окне над текстовым представлением, например подсказками.

Проекция

Проекция — это метод создания другого типа текстового буфера, который фактически не хранит текст, а объединяет текст из других текстовых буферов. Например, буфер проекции можно использовать для объединения текста из двух других буферов и представления результата, как если бы он находится только в одном буфере, или для скрытия частей текста в одном буфере. Буфер проекции может выступать в качестве исходного буфера в другой буфер проекции. Набор буферов, связанных с проекцией, можно создать для переупорядочения текста различными способами. (Такой набор также называется буферным графом.) Функция структурирования текста Visual Studio реализуется с помощью буфера проекции для скрытия свернутого текста, а редактор Visual Studio для страниц ASP.NET использует проекцию для поддержки внедренных языков, таких как Visual Basic и C#.

Объект IProjectionBuffer создается с помощью IProjectionBufferFactoryService. Буфер проекции представлен упорядоченной последовательностью ITrackingSpan объектов, которые называются диапазонами источников. Содержимое этих диапазонов представлено в виде последовательности символов. Текстовые буферы, из которых извлекаются диапазоны источника, называются исходными буферами. Клиенты буфера проекции не должны учитывать, что он отличается от обычного текстового буфера.

Буфер проекции прослушивает события изменения текста в исходных буферах. При изменении текста в диапазоне источника буфер проекции сопоставляет измененные текстовые координаты с собственными координатами и вызывает соответствующие события изменения текста. Например, рассмотрим исходные буферы A и B, имеющие следующее содержимое:

A: ABCDE
B: vwxyz

Если буфер проекции P формируется из двух текстовых диапазонов, один из них имеет весь буфер A и другой, имеющий весь буфер B, то P имеет следующее содержимое:

P: ABCDEvwxyz

Если подстрока xy удаляется из буфера B, буфер P вызывает событие, указывающее, что символы на позициях 7 и 8 были удалены.

Буфер проекции также можно изменить напрямую. Он распространяет изменения в соответствующие исходные буферы. Например, если строка вставляется в буфер P в позиции 6 (исходная позиция символа "v"), вставка распространяется на буфер B в позиции 1.

Существуют ограничения на диапазоны источника, которые способствуют буферу проекции. Диапазоны источников могут не перекрываться; Расположение в буфере проекции не может сопоставляться с несколькими расположениями в любом исходном буфере, а расположение в исходном буфере не может сопоставляться с несколькими расположениями в буфере проекции. Циклические циклы не допускаются в связи исходного буфера.

События возникают при изменении набора исходных буферов для буфера проекции и при изменении набора исходных диапазонов. Буфер elision — это особый вид буфера проекции. Он в основном используется для структурирования и для операций, которые развертывают и свернутые блоки текста. Буфер elision основан только на одном исходном буфере, а диапазоны в буфере элизиона должны быть упорядочены так же, как они упорядочены в исходном буфере.

Граф буфера

Интерфейс IBufferGraph обеспечивает сопоставление между графом буферов проекции. Все текстовые буферы и буферы проекции собираются в направленном ациклическом графе, как и в абстрактном дереве синтаксиса, созданном компилятором языка. Граф определяется верхним буфером, который может быть любым текстовым буфером. Граф буфера может сопоставляться с точкой в верхнем буфере с точкой в исходном буфере или из диапазона в верхнем буфере с набором диапазонов в исходном буфере. Аналогичным образом он может сопоставить точку или диапазон из исходного буфера с точкой в верхнем буфере. Буферные графы создаются с помощью .IBufferGraphFactoryService

События и буферы проекции

При изменении буфера проекции изменения отправляются из буфера проекции в буферы, зависящие от него. После изменения всех буферов возникают события изменения буфера, начиная с самого глубокого буфера.

структуризация

Выстраивание — это возможность развернуть или свернуть различные блоки текста в текстовом представлении. Выстраивание определяется как вид ITag, так же, как и украшения. Это OutliningRegionTag тег, определяющий текстовый регион, который может быть развернут или свернут. Чтобы использовать структуру, необходимо импортировать IOutliningManagerService объект для получения IOutliningManager. Диспетчер структурирования перечисляет, сворачивает и расширяет различные блоки, которые представляются как ICollapsible объекты, и вызывает события соответствующим образом.

Привязки мыши

Привязки мыши связывают движения мыши с различными командами. Привязки мыши определяются с помощью привязки ключейIMouseProcessorProvider, а ключевые привязки определяются с помощью .IKeyProcessorProvider Автоматически IWpfTextViewHost создает экземпляры всех привязок и подключает их к событиям мыши в представлении.

Интерфейс IMouseProcessor содержит обработчики событий предварительного процесса и после процесса для различных событий мыши. Для обработки одного из событий можно переопределить некоторые методы в MouseProcessorBase.

Операции редактора

Операции редактора можно использовать для автоматизации взаимодействия с редактором для сценариев или других целей. Вы можете импортировать IEditorOperationsFactoryService операции доступа к заданному объекту ITextView. Затем эти объекты можно использовать для изменения выделения, прокрутки представления или перемещения курсора в разные части представления.

IntelliSense

IntelliSense поддерживает завершение инструкций, справку сигнатуры (также известные как сведения о параметрах), быструю информацию и лампочки.

Завершение инструкции предоставляет всплывающие списки потенциальных завершений для имен методов, XML-элементов и других элементов кода или разметки. Как правило, жест пользователя вызывает сеанс завершения. В сеансе отображается список потенциальных завершений, и пользователь может выбрать один или закрыть список. Отвечает ICompletionBroker за создание и активацию ICompletionSession. Вычисляет ICompletionSource CompletionSet элементы завершения для сеанса.

Устранение неполадок импорт и экспорт: доступ к журналу ошибок композиции MEF

Если вы попытаетесь импортировать то, что не существует в текущей установке VS, или если вы неправильно создаете импорт или экспорт. Основным способом поиска и устранения этих проблем является ссылка на журнал ошибок композиции Управляемой платформы расширяемости (MEF), хранящийся в папке %localappdata%\Microsoft\VisualStudio[yourVSVersion]\ComponentModelCache\Microsoft.VisualStudio.Default.err.