70 votes

Désactiver le peek dans Visual Studio Code

Existe-t-il un moyen de désactiver la fonction de "coup d'œil" par ctrl-clic dans Visual Studio Code ? Idéalement, j'aimerais que le ctrl-clic ouvre simplement le fichier contenant la définition dans un nouvel onglet.

Modifier : J'ai soumis un problème pour au moins le rendre moins confus. Apparemment, ma terminologie est légèrement erronée.

Pour clarifier, il y a deux actions :

  1. Clic droit -> Définition du coup d'œil
  2. Clic droit -> Aller à la définition (lié à ctrl-clic)

Leur comportement est le suivant :

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

    • Ouvre une interface en ligne montrant les définitions.
  3. GtD, Définition unique

    • Ouvrez le fichier contenant la définition.
  4. GtD, Définitions multiples
    • Choisissez une des définitions au hasard, ouvrez ce fichier, et une interface en ligne montrant toutes les définitions.

Tous ces éléments sont bons, sauf le dernier. Faire les deux choses donne une interface utilisateur vraiment redondante et confuse comme celle-ci :

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 ouverte en ligne montrant toutes les définitions ( dans le fichier actuel )

8voto

Derek Ziemba Points 112

J'ai fait une demande de modification pour corriger ce problème. https://github.com/Microsoft/vscode/pull/68023 mais en attendant, voici un correctif temporaire qui corrige les fichiers d'installation de VSCode. Vous aurez besoin de réappliquer chaque mise à jour.

EDIT : La correction a été fusionnée dans vscode. Il devrait être dans les versions ultérieures.

Avec cette correction, Ctrl+Click sera :

  • Utilisez "peek" s'il y a plusieurs définitions
  • Lors de l'utilisation du peek, la navigation vers le meilleur match dans l'éditeur ne se fera pas et vous perdrez votre place.
  • S'il n'y a qu'une seule définition, il naviguera vers la meilleure correspondance et n'ouvrira PAS de dossier.

  1. Déterminez à quoi ressemble la fonction qui doit être corrigée. La méthode est DefinitionAction.prototype._onResult(editorService, editor, model)

  2. Allez dans le répertoire d'installation de VSCode. %LocalAppData%\Programs\Microsoft VS Code et faire un clic droit et ouvrir le répertoire dans VSCode afin que nous puissions utiliser la fonction de recherche de VSCode pour rechercher du texte dans chaque fichier.

  3. Recherche de _onResult et évalue chaque résultat, en vérifiant si la signature et le corps correspondent à ce que nous attendons de la fonction que nous avons vue à l'étape 1.

    • Nous savons depuis l'étape 1, que la fonction _openReference est à proximité. Utilisez cela pour affiner la recherche.
    • Je l'ai trouvé dans workbench.main.js ligne 2454 . Utilisez la mise entre parenthèses pour trouver la fin ou sachez qu'elle se termine immédiatement avant t.prototype._openReference
    • La fonction, une fois formatée, est la suivante (le func asynchrone est compilé en statemachine, c'est pourquoi il ne ressemble en rien au typecript source) :

      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 la suivante (si vous utilisez la même version) ou formatez et modifiez la fonction que vous avez trouvée pour qu'elle soit similaire à cet exemple. Notez le o est la variable globale \window et sous réserve de modifications.

    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. Lancer VSCode. Vous obtiendrez un Your Code installation appears to be corrupt. Please reinstall . Il suffit de cliquer sur l'icône de l'engrenage et de cliquer sur Don't Show Again.

1voto

Cobus Kruger Points 1325

Cela semble avoir été corrigé dans une version plus récente. Si je passe maintenant la souris sur FOO sur foo.cpp je vois l'infobulle normale #define FOO 2 . Si j'appuie sur Ctrl, le message s'élargit pour ajouter le texte "Cliquez pour afficher 2 définitions" et si je clique tout en maintenant Ctrl, j'obtiens la fenêtre d'aperçu, comme demandé.

enter image description here

0voto

Ben Points 117

J'ai essayé de trouver une solution de contournement en changeant 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 qu'il est réglé par défaut pour aller à la définition sans possibilité de le modifier : https://code.visualstudio.com/docs/editor/editingevolved

Sur mon ordinateur (Mac), si j'appuie sur CMD + Cliquez ou F12 sur une méthode, il me dirigera vers la vue Peek de la définition, cependant CMD + F12 me dirigera vers l'implémentation sans que le peek n'apparaisse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X