在Visual Studio Code中禁用窥视


76

有没有一种方法可以在Visual Studio Code中禁用ctrl单击“窥视”功能?理想情况下,我想按ctrl键单击即可在新选项卡中打开包含定义的文件。

编辑:我提交了一个问题,至少可以减少混乱。显然我的术语有点错误。

为了澄清,有两个动作:

  1. 右键单击->窥视定义
  2. 右键单击->转到定义(绑定到Ctrl单击)

它们的行为如下:

  1. PD,单一定义
    • 打开显示定义的内联界面。
  2. PD,多种定义

    • 打开显示定义的内联界面。
  3. GtD,单定义

    • 打开包含定义的文件。
  4. GtD,多个定义
    • 随机选择一个定义,打开该文件,然后使用一个内联界面显示所有定义。

除了最后一个,所有这些都很好。两者都做会导致一个非常冗余且令人困惑的UI,如下所示:

令人困惑!

应该有一种方式来具有以下行为之一:

  • 随机选择一个定义,打开该文件。

要么:

  • 打开内联界面,显示所有定义(在当前文件中

支持您,但是您在gh上的问题与“ ctrl单击只是在新选项卡中打开包含定义的文件”无关(我是说,将其禁用)。我在这里开了一期新书。
fabriciorissetto

@Matt,您到底想要什么?您是否要完全禁用偷看功能?还是要在查看窗口中打开多个引用而不是第一个引用?
塔伦·拉尔瓦尼

@TarunLalwani在玩了更多之后,我意识到我有很多东西。首先,Flow JavaScript支持中存在一个错误,即在多个定义相同时会显示多个定义。这当然超出了这个问题的范围。对于这个赏金,我想说的是,如果VSCode已打开另一个文件并且该选项卡包含两个定义,那么我将接受一些禁止窥视的内容。我知道如果定义位于两个单独的文件中,则随机选择它们没有太大意义。希望我对此感到更加清楚和抱歉:)
Matt

@Matt,这需要在github.com/Microsoft/vscode/blob/…上进行代码修改,因此我无法提出代码更改的答案,但为您提供了一个方向,因为这需要重建vscode
Tarun Lalwani

特定的VS版本?
Mark Schultheiss

Answers:


8

我已提出拉动请求以修复此https://github.com/Microsoft/vscode/pull/68023,但在此之前,这里是修补VSCode安装文件的临时修复程序。您需要重新应用每个更新。

编辑:该修复程序已合并到vscode中。它应该在更高版本中。

使用此修复程序,Ctrl + Click将:

  • 如果有多个定义,请使用peek
  • 使用窥视时,将不会导航到编辑器中的最佳匹配并导致您失去位置
  • 如果只有一个定义,它将导航到最佳匹配,并且不公开查看。

  1. 找出需要修补的功能是什么样的。方法是DefinitionAction.prototype._onResult(editorService, editor, model)

  2. 进入VSCode安装目录。%LocalAppData%\Programs\Microsoft VS Code然后右键单击并在VSCode中打开目录,以便我们可以使用VSCode的搜索功能在每个文件中搜索文本。

  3. 搜索_onResult并评估每个结果,检查签名和正文是否与在步骤1中看到的功能匹配。

    • 从步骤1中我们知道,该功能_openReference就在附近。使用它来缩小搜索范围。
    • 我发现它workbench.main.js符合要求2454。使用括号匹配来查找结束点或知道结束点在紧接之前t.prototype._openReference
    • 格式化后的函数如下(异步功能被编译为状态机,这就是为什么它看起来不像源打字稿的原因):

      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. 用以下内容替换功能(如果使用相同版本)或格式化并编辑发现的功能与此示例类似。请注意,o变量是global \ window对象,并且可能会发生变化。

    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. 启动VSCode。你会得到一个Your Code installation appears to be corrupt. Please reinstall。只需点击齿轮图标,然后点击Don't Show Again.


0

这似乎已在较新版本中修复。如果我现在悬停FOOfoo.cpp,我看到正常的提示#define FOO 2。如果按Ctrl键,消息将展开以添加文本“单击以显示2个定义”,并且如果我在按住Ctrl键的同时单击,则会按要求显示窥视窗口。

在此处输入图片说明


0

我试图找到一种解决方法,更改CMD+ Click的行为以实施,但似乎还没有解决方案?

VSCode文档默认显示其设置以转到定义,而无法对其进行修改:https ://code.visualstudio.com/docs/editor/editingevolved

在我的计算机(Mac)上,如果我按CMD+单击或F12在某个方法上,它将把我定向到定义上的“窥视”视图,但是CMD+F12会将我定向到不出现窥视的实现。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.