禁用Visual Studio代码中的窥视

时间:2017-01-04 09:54:22

标签: visual-studio-code

有没有办法禁用ctrl-click' peek' Visual Studio Code中的功能?理想情况下,我想按住Ctrl键单击以在新选项卡中打开包含定义的文件。

修改:我提交an issue至少使其不那么混乱。显然我的术语有点不对。

澄清一下,有两个动作:

  1. 右键单击 - > Peek Definition
  2. 右键单击 - > 转到定义(绑定到ctrl-click)
  3. 他们的行为如下:

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

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

      • 打开包含定义的文件。
    4. GtD,多重定义
      • 随机选择其中一个定义,打开该文件,显示所有定义的内联界面。
    5. 所有这些都很好,除了最后一个。做这两件事会导致真正多余且令人困惑的用户界面:

      Confusing!

      应该有办法让这些行为之一:

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

      或者:

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

3 个答案:

答案 0 :(得分:6)

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

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

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

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

  1. 弄清楚需要打补丁的功能是什么样的。方法是DefinitionAction.prototype._onResult(editorService, editor, model)

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

  3. 搜索_onResult并评估每个结果,检查签名和正文是否与我们在步骤1中看到的功能所期望的相符。

    • 我们从步骤1中知道函数_openReference在附近。使用它来缩小搜索范围。
    • 我在workbench.main.js2454中找到了它。使用方括号匹配来找到结尾,或者知道结尾在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.

答案 1 :(得分:1)

这似乎已在较新版本中得到修复。如果我现在将鼠标悬停在FOO的{​​{1}}上,我会看到正常的工具提示foo.cpp。如果我按下Ctrl键,消息将展开以添加文本“单击以显示2个定义”,如果我在按住Ctrl的同时单击,则会根据请求获得查看窗口。

enter image description here

答案 2 :(得分:0)

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

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

在我的计算机(Mac)上,如果按某个方法按 CMD +单击或 F12 ,它将引导我转到定义的Peek视图,但是 CMD + F12 会将我定向到实现而不会出现偷看行为。