Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Редактор состоит из нескольких различных подсистем, которые предназначены для сохранения текстовой модели редактора отдельно от текстового представления и пользовательского интерфейса.
В этих разделах описываются различные аспекты редактора:
В этих разделах описываются функции редактора:
Подсистемы
Подсистема текстовой модели
Подсистема текстовой модели отвечает за представление текста и возможность его манипуляции. Подсистема текстовой модели содержит 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 диапазон текста в моментальном снимке. Его конечная позиция гарантированно находится в пределах от нуля до длины моментального снимка. NormalizedSnapshotSpanCollection состоит из набора объектов SnapshotSpan из одного моментального снимка.
Диапазоны и нормализованные коллекции диапазонов
Span представляет собой интервал, который можно применить к диапазону текста в снимке текста. Позиции моментальных снимков имеют нулевую базу, поэтому диапазоны могут начинаться с любой позиции, вплоть до нуля включительно. Свойство End диапазона равно сумме его Start свойства и его Length свойству.
Span не включает символ, индексируемый свойством End. Например, диапазон, имеющий start=5 и Length=3, имеет End=8, и включает символы в позициях 5, 6 и 7. Нотация для этого диапазона — [5..8).
Два диапазона пересекаются, если у них есть любые общие позиции, включая конечную позицию. Поэтому пересечение [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 за раз.
Функции редактора
Функции редактора разработаны таким образом, чтобы определение функции было отдельно от его реализации. Редактор включает следующие функции:
Теги и классификаторы
Украшения
Projection
Outlining
Привязки мыши и ключа
Операции и примитивы
IntelliSense
Теги и классификаторы
Теги — это маркеры, связанные с диапазоном текста. Они могут быть представлены различными способами, например с помощью цвета текста, подчеркивания, графики или всплывающих окон. Классификаторы являются одним из типов тегов.
Другие типы тегов предназначены TextMarkerTag для выделения текста, OutliningRegionTag для описания и ErrorTag для ошибок компиляции.
Типы классификации
Интерфейс IClassificationType представляет класс эквивалентности, который является абстрактной категорией текста. Типы классификации могут множественно наследоваться от других типов классификации. Например, классификации языка программирования могут включать "ключевое слово", "комментарий" и "идентификатор", которые все наследуются от "кода". Типы классификации естественного языка могут включать "существительное", "глагол" и "прилагательный", которые все наследуют от "естественного языка".
Classifications
Классификация — это экземпляр определенного типа классификации, обычно по диапазону текста. A ClassificationSpan используется для представления классификации. Диапазон классификации можно рассматривать как метку, которая охватывает определенный диапазон текста и сообщает системе, что этот диапазон текста имеет определенный тип классификации.
Классификаторы
Механизм IClassifier , который разбивает текст на набор классификаций. Классификаторы должны определяться для конкретных типов контента и порождаться для определенных текстовых буферов. Клиенты должны реализовать IClassifier для участия в классификации текста.
Агрегаторы классификаторов
Агрегататор классификатора — это механизм, который объединяет все классификаторы для одного текстового буфера в один набор классификаций. Например, классификатор C# и классификатор английского языка могут создавать классификации по комментариям в файле C#. Рассмотрим этот комментарий:
// This method produces a classifier
Классификатор C# может пометить весь диапазон как комментарий, а классификатор английского языка может определять "производит" как "глагол" и "метод" как "существительное". Агрегат создает набор не перекрывающихся классификаций, а тип набора основан на всех вкладах.
Агрегатор классификатора также является классификатором, так как он разбивает текст на набор классификаций. Агрегатировщик классификатора также гарантирует отсутствие перекрывающихся классификаций и сортировку классификаций. Отдельные классификаторы могут возвращать любой набор классификаций в любом порядке и пересекаться любым образом.
Форматирование классификации и цвет текста
Форматирование текста является примером функции, созданной на основе классификации текста. Он используется слоем текстового представления для определения отображения текста в приложении. Область форматирования текста зависит от WPF, но логическое определение классификаций от него не зависит.
Формат классификации — это набор свойств форматирования для определенного типа классификации. Эти форматы наследуются от формата родительского типа классификации.
Это IClassificationFormatMap является сопоставлением типа классификации с набором свойств форматирования текста. Реализация карты формата в редакторе обрабатывает все экспорты форматов классификации.
Украшения
Украшения — это графические эффекты, которые не связаны непосредственно с шрифтом и цветом символов в текстовом представлении. Например, красная волнистая линия, которая используется для обозначения нескомпилированного кода во многих языках программирования, является встроенным элементом, а всплывающие подсказки являются встроенными элементами. Украшения являются производными от UIElement и реализуют ITag. Двумя специализированными типами тегов украшения являются SpaceNegotiatingAdornmentTag, который используется для украшений, занимающих то же пространство, что и текст в представлении, и ErrorTag, который применяется для подчеркивания волнистой линией.
Внедренные украшения — это графические элементы, которые образуют часть форматированного текстового представления. Они организованы в разных уровнях Z-порядка. Существуют три встроенных слоя, а именно: текст, курсор и выделение. Однако разработчики могут определять больше слоев и помещать их в порядок в отношении друг друга. Три типа внедренных украшений — это относительные текстовые украшения (которые перемещаются при перемещении текста и удаляются при удалении текста), относительное оформление представления (которые связаны с нетекстовых частей представления), а также управляемые владельцем украшения (разработчик должен управлять их размещением).
Всплывающие украшения — это рисунки, которые отображаются в небольшом окне над текстовым представлением, например подсказками.
Projection
Проекция — это метод создания другого типа текстового буфера, который фактически не хранит текст, а объединяет текст из других текстовых буферов. Например, буфер проекции можно использовать для объединения текста из двух других буферов и представления результата, как если бы он находится только в одном буфере, или для скрытия частей текста в одном буфере. Буфер проекции может быть использован в качестве исходного буфера для другого буфера проекции. Набор буферов, связанных с проекцией, можно создать для переупорядочения текста различными способами. (Такой набор также называется буферным графом.) Функция структурирования текста 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.
Существуют ограничения на диапазоны источника, которые способствуют буферу проекции. Диапазоны источников могут не перекрываться; Расположение в буфере проекции не может сопоставляться с несколькими расположениями в любом исходном буфере, а расположение в исходном буфере не может сопоставляться с несколькими расположениями в буфере проекции. Кольцевые зависимости не допускаются в отношении исходного буфера.
События возникают при изменении набора исходных буферов для буфера проекции и при изменении набора исходных диапазонов. Буфер элизии — это особый вид буфера проецирования. Он в основном используется для выделения и для операций, которые развертывают и сворачивают блоки текста. Буфер элизионирования основан на единственном исходном буфере, а диапазоны в буфере элизионирования должны быть упорядочены в том же порядке, что и в исходном буфере.
Граф буфера
Интерфейс IBufferGraph позволяет выполнять сопоставление по всему графу буферов проекции. Все текстовые буферы и буферы проекции собираются в направленном ациклическом графе, как и в абстрактном дереве синтаксиса, созданном компилятором языка. Граф определяется верхним буфером, который может быть любым текстовым буфером. Граф буфера может сопоставляться от точки в верхнем буфере к точке в исходном буфере, или от диапазона в верхнем буфере к набору диапазонов в исходном буфере. Аналогичным образом он может сопоставить точку или диапазон из исходного буфера с точкой в верхнем буфере. Буферные графы создаются с помощью .IBufferGraphFactoryService
События и буферы проекции
При изменении буфера проекции изменения отправляются из буфера проекции в буферы, зависящие от него. После изменения всех буферов возникают события изменения буфера, начиная с самого глубокого буфера.
Outlining
Выстраивание — это возможность развернуть или свернуть различные блоки текста в текстовом представлении. Выстраивание определяется как тип ITag, подобно тому, как определяются украшения. Это OutliningRegionTag тег, определяющий текстовый регион, который может быть развернут или свернут. Чтобы использовать создание структуры, необходимо импортировать IOutliningManagerService, чтобы получить IOutliningManager. Менеджер структурирования перечисляет, сворачивает и разворачивает различные блоки, представленные как объекты ICollapsible, и генерирует соответствующие события.
Привязки мыши
Привязки мыши связывают движения мыши с различными командами. Привязки мыши определяются с помощью IMouseProcessorProvider, а привязки клавиш определяются с помощью IKeyProcessorProvider. Автоматически IWpfTextViewHost создает экземпляры всех привязок и подключает их к событиям мыши в представлении.
Интерфейс IMouseProcessor содержит предварительные и последующие обработчики событий для различных действий мыши. Для обработки одного из событий можно переопределить некоторые методы в MouseProcessorBase.
Операции редактора
Операции редактора можно использовать для автоматизации взаимодействия с редактором для сценариев или других целей. Вы можете импортировать IEditorOperationsFactoryService, чтобы получить доступ к операциям с заданным ITextView. Затем эти объекты можно использовать для изменения выделения, прокрутки представления или перемещения курсора в разные части представления.
IntelliSense
IntelliSense поддерживает завершение инструкций, справку сигнатуры (также известные как сведения о параметрах), быструю информацию и лампочки.
Завершение инструкции предоставляет всплывающие списки потенциальных завершений для имен методов, XML-элементов и других элементов кода или разметки. Как правило, жест пользователя вызывает сеанс завершения. В сеансе отображается список потенциальных завершений, и пользователь может выбрать один или закрыть список. За создание и активацию ICompletionBroker отвечает ICompletionSession. Вычисляет ICompletionSourceCompletionSet элементы завершения для сеанса.
Устранение неполадок с импортом и экспортом: доступ к журналу ошибок композиции MEF
Если вы попытаетесь импортировать то, что не существует в текущей установке VS, или если вы неправильно создаете импорт или экспорт. Основным способом поиска и устранения этих проблем является ссылка на журнал ошибок композиции Управляемой платформы расширяемости (MEF), хранящийся в %localappdata%\Microsoft\VisualStudio[yourVSVersion]\ComponentModelCache\Microsoft.VisualStudio.Default.err.