Deaktivieren Sie Peek in Visual Studio Code

75

Gibt es eine Möglichkeit, die Strg-Klick-Funktion "Peek" in Visual Studio Code zu deaktivieren? Idealerweise möchte ich bei gedrückter Strg-Taste die Datei mit der Definition in einer neuen Registerkarte öffnen.

Bearbeiten : Ich habe ein Problem eingereicht , um es zumindest weniger verwirrend zu machen. Anscheinend ist meine Terminologie etwas falsch.

Zur Verdeutlichung gibt es zwei Aktionen:

  1. Klicken Sie mit der rechten Maustaste -> Peek Definition
  2. Rechtsklick -> Gehe zu Definition (gebunden an Strg-Klick)

Ihr Verhalten ist wie folgt:

  1. PD, Einzeldefinition
    • Öffnet die Inline-Oberfläche mit der Definition.
  2. PD, mehrere Definitionen

    • Öffnet die Inline-Oberfläche mit Definitionen.
  3. GtD, Einzeldefinition

    • Öffnen Sie die Datei mit der Definition.
  4. GtD, mehrere Definitionen
    • Wählen Sie eine der Definitionen nach dem Zufallsprinzip aus, öffnen Sie diese Datei und eine Inline-Oberfläche mit allen Definitionen.

Alle außer dem letzten sind in Ordnung. Beides führt zu einer wirklich redundanten und verwirrenden Benutzeroberfläche wie dieser:

Verwirrend!

Es sollte einen Weg geben, eines dieser Verhaltensweisen zu haben:

  • Wählen Sie eine der Definitionen nach dem Zufallsprinzip aus und öffnen Sie diese Datei.

Oder:

  • Öffnen Sie die Inline-Oberfläche mit allen Definitionen ( in der aktuellen Datei ).
Timmmm
quelle
Sie wurden positiv bewertet, aber Ihr Problem mit gh hat nichts mit "Strg-Klick, öffnen Sie einfach die Datei mit der Definition in einem neuen Tab" zu tun (ich meine, deaktivieren Sie sie). Ich habe ein neues Thema eröffnen hier .
Fabriciorissetto
@Matt, was genau willst du? Möchten Sie Peeks vollständig deaktivieren? Oder möchten Sie, dass anstelle der ersten Referenz mehrere Verweise im Peek-Fenster geöffnet werden?
Tarun Lalwani
@TarunLalwani Nachdem ich mehr damit gespielt hatte, wurde mir klar, dass es mehrere Sachen gibt. Erstens gibt es einen Fehler in der Flow JavaScript-Unterstützung, bei dem mehrere Definitionen angezeigt werden, während sie gleich sind. Das ist für diese Frage natürlich nicht möglich. Für diese Prämie würde ich sagen, dass ich etwas akzeptieren würde, das das Anzeigen von Peek deaktiviert, wenn VSCode die andere Datei bereits geöffnet hat und diese Registerkarte beide Definitionen enthält. Ich verstehe, wenn die Definition in zwei getrennten Dateien vorliegt, macht eine zufällige Auswahl nicht so viel Sinn. Hoffe, ich bin klarer und entschuldige mich für die Verwirrung :)
Matt
@Matt, Dies würde eine Codeänderung unter github.com/Microsoft/vscode/blob/… erfordern, daher kann ich keine Antwort mit Codeänderung vorschlagen, aber ich gebe Ihnen eine Richtung, da dies die Neuerstellung von
vscode
Spezifische VS-Version?
Mark Schultheiss

Antworten:

8

Ich habe eine Pull - Anforderung gemacht , dies zu beheben https://github.com/Microsoft/vscode/pull/68023 , aber bis dahin ist hier eine temporäre Update, das die VSCode Installationsdateien Patches. Sie müssen jedes Update erneut anwenden.

BEARBEITEN: Der Fix wurde in vscode zusammengeführt. Es sollte in späteren Versionen sein.

Mit diesem Fix wird Strg + Klick:

  • Verwenden Sie Peek, wenn mehrere Definitionen vorhanden sind
  • Wenn Sie Peek verwenden, navigieren Sie nicht zur besten Übereinstimmung im Editor und verlieren Ihren Platz
  • Wenn es nur eine Definition gibt, navigiert sie zur besten Übereinstimmung und öffnet KEINEN Blick.

  1. Finden Sie heraus, wie die zu patchende Funktion aussieht. Die Methode istDefinitionAction.prototype._onResult(editorService, editor, model)

  2. Wechseln Sie in das VSCode-Installationsverzeichnis. %LocalAppData%\Programs\Microsoft VS CodeKlicken Sie mit der rechten Maustaste und öffnen Sie das Verzeichnis in VSCode, damit wir die Suchfunktion von VSCode verwenden können, um in jeder Datei nach Text zu suchen.

  3. Suchen _onResultund bewerten Sie jedes Ergebnis und prüfen Sie, ob die Signatur und der Text mit den Erwartungen übereinstimmen, die wir an die Funktion in Schritt 1 gestellt haben.

    • Wir wissen aus Schritt 1, dass die Funktion _openReferencein der Nähe ist. Verwenden Sie dies, um die Suche einzugrenzen.
    • Ich fand es in der workbench.main.jsSchlange 2454. Verwenden Sie die Klammeranpassung, um das Ende zu finden, oder wissen Sie, dass es unmittelbar vorher endett.prototype._openReference
    • Die formatierte Funktion lautet wie folgt (asynchrone Funktion wird bis zur Statemachine kompiliert, daher sieht sie nicht wie das Quell-Typoskript aus):

      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. Ersetzen Sie die Funktion durch die folgende (wenn Sie dieselbe Version verwenden) oder formatieren Sie sie und bearbeiten Sie die Funktion, die diesem Beispiel ähnlich ist. Beachten Sie, dass die oVariable das globale \ window-Objekt ist und Änderungen unterliegen kann.

    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. Starten Sie VSCode. Du wirst eine bekommen Your Code installation appears to be corrupt. Please reinstall. Drücken Sie einfach das Zahnradsymbol und klicken Sie aufDon't Show Again.

Derek Ziemba
quelle
0

Dies scheint in einer neueren Version behoben worden zu sein. Wenn ich jetzt schwebt über FOOin foo.cpp, sehe ich den normalen Tooltip #define FOO 2. Wenn ich Strg drücke, wird die Meldung erweitert und der Text "Klicken, um 2 Definitionen anzuzeigen" hinzugefügt. Wenn ich bei gedrückter Strg-Taste klicke, wird das angezeigte Peek-Fenster angezeigt.

Geben Sie hier die Bildbeschreibung ein

Cobus Kruger
quelle
0

Ich habe versucht, eine Problemumgehung zu finden, die das Verhalten von CMD+ Click ändert , um zur Implementierung zu gelangen. Es scheint jedoch, dass es noch keine Lösung gibt.

In der VSCode-Dokumentation wird standardmäßig festgelegt, dass zur Definition gewechselt werden soll, ohne dass eine Änderung möglich ist: https://code.visualstudio.com/docs/editor/editingevolved

Wenn ich auf meinem Computer (Mac) CMD+ Klick oder F12eine Methode drücke , werde ich zur Peek-Ansicht der Definition weitergeleitet, CMD+ F12jedoch zur Implementierung, ohne dass der Peek angezeigt wird.

Ben
quelle