web-dev-qa-db-fra.com

Désactiver l'aperçu dans le code Visual Studio

Existe-t-il un moyen de désactiver la fonctionnalité "peek" de Ctrl-clic dans Visual Studio Code? Idéalement, je voudrais que ctrl-clic ouvre simplement le fichier contenant la définition dans un nouvel onglet.

Edit: j'ai soumis un problème au moins pour le rendre moins déroutant. Apparemment, ma terminologie est légèrement fausse.

Pour clarifier, il y a deux actions:

  1. Clic droit -> Définition Peek
  2. Clic droit -> Aller à la définition (lié à ctrl-clic)

Leur comportement est le suivant:

  1. PD, définition unique
    • Ouvre l'interface en ligne montrant la définition.
  2. PD, définitions multiples

    • Ouvre l'interface en ligne affichant les définitions.
  3. GtD, définition unique

    • Ouvrez le fichier contenant la définition.
  4. GtD, plusieurs définitions
    • Choisissez une des définitions au hasard, ouvrez ce fichier, et une interface intégrée affichant toutes les définitions.

Tout cela va bien sauf le dernier. Faire les deux choses crée une interface utilisateur vraiment redondante et déroutante, comme ceci:

 Confusing!

Il devrait y avoir un moyen d'avoir l'un de ces comportements:

  • Choisissez une des définitions au hasard, ouvrez ce fichier.

Ou:

  • Interface inline ouverte affichant toutes les définitions (dans le fichier actuel _)
63
Timmmm

J'ai fait une demande d'extraction pour résoudre ce problème https://github.com/Microsoft/vscode/pull/68023 , mais jusque-là, voici un correctif temporaire qui corrige les fichiers d'installation de VSCode. Vous devrez réappliquer chaque mise à jour. 

EDIT: Le correctif a été fusionné dans vscode. Ce devrait être dans les versions ultérieures.

Avec ce correctif, Ctrl + Clic va:

  • Utilisez peek s'il y a plusieurs définitions 
  • Lors de l'utilisation de Peek, la navigation vers la meilleure correspondance dans l'éditeur ne sera pas effectuée et vous perdrez votre place.
  • S'il n'y a qu'une seule définition, elle naviguera jusqu'à la meilleure correspondance et ne sera PAS ouverte. 

  1. Déterminez à quoi ressemble la fonction à patcher. La méthode est DefinitionAction.prototype._onResult(editorService, editor, model)

  2. Accédez au répertoire d'installation de VSCode. %LocalAppData%\Programs\Microsoft VS Code et faites un clic droit et ouvrez le répertoire dans VSCode afin que nous puissions utiliser la fonctionnalité de recherche de VSCode pour rechercher du texte dans chaque fichier. 

  3. Recherchez _onResult et évaluez chaque résultat en vérifiant si la signature et le corps correspondent à ce que nous attendons de la fonction décrite à l'étape 1. 

    • Nous savons à l’étape 1 que la fonction _openReference est proche. Utilisez cela pour affiner la recherche.
    • Je l'ai trouvé dans workbench.main.js ligne 2454. Utilisez la correspondance entre crochets pour trouver la fin ou sachez qu'elle se termine immédiatement avant t.prototype._openReference
    • La fonction lors de la mise en forme est la suivante (async func est compilé dans statemachine, c’est pourquoi il ne ressemble en rien à la source TypeScript):

      t.prototype._onResult = function (e, t, r) {
        return i(this, void 0, void 0, function () {
          var i, s, a;
          return n(this, function (n) {
            switch (n.label) {
              case 0:
                return i = r.getAriaMessage(), o.alert(i), this._configuration.openInPeek ? (this._openInPeek(e, t, r), [3, 3]) : [3, 1];
              case 1:
                return s = r.nearestReference(t.getModel().uri, t.getPosition()), [4, this._openReference(t, e, s, this._configuration.openToSide)];
              case 2:
                (a = n.sent()) && r.references.length > 1 ? this._openInPeek(e, a, r) : r.dispose(), n.label = 3;
              case 3:
              return [2]
            }
          })
        })
      }
      
  4. Remplacez la fonction par le suivant (si vous utilisez la même version) ou formatez et modifiez la fonction que vous avez trouvée similaire à cet exemple. Notez que la variable o est l’objet global\window et est susceptible d’être modifiée. 

    t.prototype._onResult = function (e, t, r) {
      return i(this, void 0, void 0, function () {
        return n(this, function (n) {
          switch (n.label) {
            case 0:
              return r.getAriaMessage(), o.alert(r.getAriaMessage()), this._configuration.openInPeek || r.references.length > 1 ? (this._openInPeek(e, t, r), [3, 3]) : [3, 1];
            case 1:
              return [4, this._openReference(t, e, r.nearestReference(t.getModel().uri, t.getPosition()), this._configuration.openToSide)];
            case 2:
              r.dispose(), n.label = 3;
            case 3:
            return [2]
          }
        })
      })
    }
    
  5. Lancez le VSCode. Vous obtiendrez un Your Code installation appears to be corrupt. Please reinstall. Appuyez simplement sur l'icône d'engrenage et cliquez sur Don't Show Again.

5
Derek Ziemba

Cela semble avoir été corrigé dans une version plus récente. Si je survole maintenant FOO dans foo.cpp, l'info-bulle normale #define FOO 2 apparaît. Si j'appuie sur Ctrl, le message se développe pour ajouter le texte "Cliquez pour afficher 2 définitions" et si je clique tout en maintenant la touche Ctrl enfoncée, la fenêtre d'aperçu apparaît, comme demandé.

 enter image description here

1
Cobus Kruger

J'ai essayé de trouver une solution de contournement modifiant le comportement de CMD + Cliquez pour aller à la mise en œuvre, mais il semble qu'il n'y ait pas encore de solution?

La documentation de VSCode montre par défaut que le jeu passe à la définition sans moyen de la modifier: https://code.visualstudio.com/docs/editor/editingevolved

Sur ma machine (Mac) si j'appuie sur CMD + Cliquez ou F12 sur une méthode, il me dirigera vers la vue Peek sur la définition, mais CMD+F12 me dirigera vers la mise en œuvre sans le coup d'oeil apparaissant.

0
Ben