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:
Leur comportement est le suivant:
PD, définitions multiples
GtD, définition unique
Tout cela va bien sauf le dernier. Faire les deux choses crée une interface utilisateur vraiment redondante et déroutante, comme ceci:
Il devrait y avoir un moyen d'avoir l'un de ces comportements:
Ou:
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.
Avec ce correctif, Ctrl + Clic va:
Déterminez à quoi ressemble la fonction à patcher. La méthode est DefinitionAction.prototype._onResult(editorService, editor, model)
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.
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.
_openReference
est proche. Utilisez cela pour affiner la recherche.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]
}
})
})
}
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]
}
})
})
}
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.
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é.
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.