2009-11-24 2 views
9

Intellisense est agréable pour ce qu'il fait, mais souvent je me retrouve à regretter l'achèvement du texte "brut" des éditeurs comme Vim. Je n'arrive pas à trouver une facilité pour pouvoir compléter un mot - peut-être dans une chaîne, n'importe où vraiment - et VS essaie de le compléter pour moi (d'après ce que j'ai déjà tapé dans le tampon courant, ou dans tous les fichiers ouverts, ou de quelque manière que ce soit veut travailler).Achèvement de Dumb dans Visual Studio

Ai-je raté quelque chose? (Ou si nécessaire, existe-t-il une extension pour le faire?) Il semble que ce serait en réalité beaucoup plus facile à implémenter que Intellisense, mais cela peut vraiment sauver la frappe.

Merci!

+1

idée intéressante. Je me retrouve parfois à écrire des littéraux de chaîne longue presque identiques, et quelque chose comme ça serait plus facile que de copier/coller. –

Répondre

5

Vous souhaiterez peut-être consulter le complément VisualAssist. Sa saisie semi-automatique est consciente des éléments que vous avez tapés récemment, elle sélectionne donc la correspondance la plus récente par défaut. Il fonctionne également dans plus d'endroits que le standard IntelliSense (par exemple inclure des chemins).

Un mot d'avertissement cependant, lorsque vous commencez à l'utiliser, il est difficile de revenir en arrière ...

+0

ne peut pas trouver comment compléter littéralement les chaînes de caractères, est-ce que je manque quelque chose? –

+0

@VincentXue: Autant que je sache, Visual Assist ne remplira pas automatiquement les littéraux de chaîne ** sauf ** les chemins d'inclusion. –

1

Dans VS2010 IntelliSense mise en œuvre est extrêmement facile - en supposant que vous avez une réponse prête à 2 questions:

  1. Ce qui devrait déclencher le dialogue
  2. Quelle est la liste des complétions possibles pour le mot en cours.

Dans mon éditeur personnalisé J'ai passé 90% du temps à rendre l'analyseur Ndjango me donner ce que je besoin et seulement 10% sur en fait « la mise en œuvre » IntelliSense

Modifier

Le projet s open source n'hésitez pas à download le code et jouez avec.

+0

Assez juste, mais cela ne devrait pas vraiment impliquer intellisense du tout. C'est-à-dire que je n'ai pas besoin de "complétion de code", juste une simple complétion de texte basée sur des mots que j'ai tapés précédemment, donc je n'ai pas besoin de les taper de nouveau. (Notez également que cela doit être disponible en plus de l'intellisense standard, je ne cherche pas à remplacer complètement le code.) –

+2

Je comprends ce que vous voulez, et je ne sais pas si quelque chose de ce genre est déjà là, ce que je J'essaie de dire qu'il serait assez facile d'implémenter votre propre version, y compris le point très valable de compléter votre code en complétant (ne remplaçant pas) celui existant (s). Le point ici est peu importe à quel point le «remplissage de texte» vous semble facile et évident, la personne suivante aura sa propre idée sur la façon dont cela doit fonctionner – mfeingold

+0

Vous devez toujours vous connecter aux API IntelliSense de l'éditeur car c'est ce qui fournit le liste de complétion etc ... mais le fait de lister tous les autres mots dans le tampon est assez trivial. Surtout si vous ciblez le VS2010 avec ses nouvelles API d'extensibilité beaucoup plus saines. –

1

Jetez un oeil à ViEmu, émulation Vi/vim pour Visual Studio, Word, Outlook et SQL Server. Si cela ne répond toujours pas à vos besoins, essayez de rouler le vôtre. Découvrez les Visual Studio Extensibility Reference et this tutorial pour vous aider à démarrer sur les compléments VS.

+0

Je suis déjà en train d'utiliser ViEmu, en fait :) –

0

Le modèle d'extensibilité en 2010 est beaucoup plus simple mais reste (évidemment) une cible mouvante.

Il devrait être possible d'obtenir quelque chose de simple à l'aide the intellisense part of this pour fournir un ICompletionSource qui se fond dans tout ce que vous voulez fournir les valeurs que ainsi que les résultats des implémentations existantes.

La surveillance de la mémoire tampon actuelle pour les noms devrait impliquer certains de jouer avec les ITextView et ITextBuffer.

Il existe un exemple de modification du code presentation layer mais vous devriez pouvoir l'utiliser comme base pour essayer de modifier le côté des données.

1

Comme indiqué dans d'autres réponses, IntelliSense dans Visual Studio 2010 est devenu beaucoup mieux. Non seulement l'extensibilité, mais aussi la mise en œuvre.

Il filtre maintenant la liste des membres contenant le nom tapé n'importe où en leur sein. Cela fonctionne également avec les classes et les types, vous n'avez donc pas besoin de vous souvenir du type complet ou du nom de la classe.Enfin, vous pouvez filtrer la liste en utilisant le modèle de nommage Pascal Case. Cela signifie moins de dactylographie et moins de fautes de frappe.

Plus d'informations sur les améliorations Intellisense dans VS2010 peuvent être trouvées sur ScottGu's blog.

1

CodeRush montrer des suggestions pour l'achèvement des mots dans les chaînes ou partout ailleurs. Ils ont une version gratuite, mais je ne sais pas si elle supporte cette fonctionnalité.

0

Resharper de Jetbrains a également un achèvement qui est très intelligent. CTRL + SHFIT + Espace active leur achèvement de code "intelligent" (au-delà de vos résultats CTRL + Espace normaux), qui est sensible au type et au contexte. Je trouve souvent que c'est choisir les noms appropriés pour moi.

0

Si vous avez une poignée de mots que vous cherchez à remplir, vous pouvez facilement créer des extraits pour le faire.

C'est plus qu'un peu un hack, mais cela peut être utile.

Snippet 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>