Тупое завершение в Visual Studio

Intellisense хорош тем, что он делает, но часто я тоскую по «сырому» текстовому завершению таких редакторов, как Vim. Кажется, я не могу найти средство для завершения слова - возможно, в строке, где угодно - и заставить VS попытаться завершить его для меня (на основе материала, который я набрал ранее в текущем буфере, или во всех открытых файлах, или как хочет работать).

Я что-то упускаю? (Или, если необходимо, есть ли расширение для этого?) Кажется, что это на самом деле было бы намного проще реализовать, чем Intellisense, но это действительно может сэкономить ввод.

Спасибо!


person J Cooper    schedule 24.11.2009    source источник
comment
Интересная идея. Иногда я обнаруживаю, что ввожу почти идентичные длинные строковые литералы, и что-то подобное было бы проще, чем копирование/вставка.   -  person Justin R.    schedule 08.12.2009


Ответы (8)


Вы можете взглянуть на надстройку VisualAssist. Его автозаполнение знает о том, что вы недавно набрали, поэтому по умолчанию выбирает самое последнее совпадение. Он также работает в большем количестве мест, чем стандартный IntelliSense (например, включает пути).

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

person Benoit Miller    schedule 07.12.2009
comment
не могу узнать, как автоматически заполнять строковые литералы, я что-то упустил? - person Vincent Xue; 28.06.2015
comment
@VincentXue: Насколько мне известно, Visual Assist не будет автоматически заполнять строковые литералы, кроме включающих путей. - person Benoit Miller; 18.08.2015
comment
Хороший инструмент, я использовал его, но теперь я использую Jetbrains. Они оба ужасно медленные бегемоты, обернутые вокруг CLANG/LLVM, и теперь Jetbrains решила, что также будет поддерживать Unreal Engine, как и выше. Конечно, имеет смысл конкурировать в той же нише рынка, что и ваш единственный конкурент, а не пытаться выделиться, действительно становясь более полезным. - person Orwellophile; 29.12.2020

Взгляните на ViEmu, эмуляцию Vi/vim для Visual Studio, Word, Outlook и SQL Server. Если он по-прежнему не соответствует вашим потребностям, попробуйте создать свой собственный. Ознакомьтесь с Справочником по расширяемости Visual Studio и это руководство, которое поможет вам начать работу с надстройками VS.

person luvieere    schedule 06.12.2009

Как указано в других ответах, Intellisense в Visual Studio 2010 стал намного лучше. Не только расширяемость, но и реализация.

Теперь он фильтрует список элементов, содержащих напечатанное имя в любом месте. Это также работает с классами и типами, поэтому вам не нужно запоминать полное имя типа или класса. И последнее, что не менее важно, вы можете отфильтровать список, используя шаблон именования Pascal Case. Это означает, что нужно меньше печатать и меньше опечаток.

Дополнительную информацию об улучшениях Intellisense в VS2010 можно найти по адресу блог СкоттГу.

person Ronald    schedule 07.12.2009

CodeRush показывает предложения по завершению слов в строках или где-либо еще. У них есть бесплатная версия, но я не знаю, поддерживает ли она эту функцию.

person ErvinS    schedule 08.12.2009

В VS2010 реализовать IntelliSense чрезвычайно просто — при условии, что у вас есть готовый ответ на 2 вопроса:

  1. Что должно вызвать диалог
  2. Каков список возможных дополнений для текущего слова.

В моем пользовательском редакторе я потратил 90% времени на то, чтобы парсер NDjango дал мне то, что мне нужно, и только 10% на фактическую «реализацию» intellisense.

Изменить

Открытый исходный код проекта не стесняйтесь скачайте код и поэкспериментируйте с ним.

person mfeingold    schedule 24.11.2009
comment
Достаточно справедливо, но на самом деле это вообще не должно включать intellisense. То есть мне не нужно автодополнение кода, а просто автодополнение текста, основанное на словах, которые я ввел ранее, поэтому мне не нужно вводить их снова. (Также обратите внимание, что это должно быть доступно в дополнение к стандартному intellisense; я не собираюсь полностью заменять завершение кода.) - person J Cooper; 24.11.2009
comment
Я понимаю, чего вы хотите, и я не знаю, есть ли уже что-то подобное. Я пытаюсь сказать, что было бы довольно легко реализовать вашу собственную версию, включая очень правильный пункт дополнения вашего кода ( не заменяя) существующие. Суть здесь в том, что как бы легко и очевидно ни звучало для вас «завершение текста», у следующего человека будет свое представление о том, как это должно работать. - person mfeingold; 24.11.2009
comment
Вам все равно нужно подключиться к API-интерфейсам IntelliSense редактора, потому что это то, что предоставляет список завершения и т. Д., Но заставить его перечислять все другие слова в буфере довольно тривиально. Особенно, если вы ориентируетесь на VS2010 с его гораздо более разумными новыми API расширяемости редактора. - person Pavel Minaev; 08.12.2009

Модель расширяемости в 2010 году намного проще, но (очевидно) все еще является движущейся целью.

Должна быть возможность получить что-то простое, используя часть intellisense для предоставления ICompletionSource, который объединяет любые значения, которые вы хотите предоставить, вместе с результатами существующих реализаций.

Мониторинг текущего буфера для имен должен включать некоторые эксперименты с ITextView и ITextBuffer.

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

person ShuggyCoUk    schedule 07.12.2009

Resharper от Jetbrains также имеет очень интеллектуальное завершение. CTRL+SHFIT+Пробел активирует их «интеллектуальное» завершение кода (помимо ваших обычных результатов CTRL+Пробел), которое зависит от типа и контекста. Я часто обнаруживаю, что он выбирает для меня подходящие имена.

person Brett Veenstra    schedule 08.12.2009

Если у вас есть несколько слов, которые вы хотите заполнить, вы можете легко создать несколько фрагментов для этого.

Это больше, чем просто хак, но он может быть полезен.

Фрагмент xml:

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>retype</Title>
      <Shortcut>retype</Shortcut>
      <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
      </SnippetTypes>
    </Header>
    <Snippet>
      <Code Language="csharp">
        <![CDATA[ThisIsTheTextIHateToRetype();$end$]]>
      </Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>
person Scott P    schedule 08.12.2009
comment
Пожалуйста, нет... прекрати... ты меня смешишь. До 2021 года осталось 2 дня, а для MSVC до сих пор нет подходящего механизма snippet. Независимо от того, сколько вы готовы потратить, вы не сможете получить базовые функции TextMate, UltiSnips или какие-либо определяемые пользователем возможности фрагмента postfix, т. е. MyVarThatIForgotToPrefaceWithAn.if ‹tab› становится if (MyVar...) { <cursor> }. Jetbrains может сделать это в MSVC, но если вы не пишете на C#, вам нужно подать письменный запрос на добавление фрагмента постфикса. - person Orwellophile; 29.12.2020