Отключить просмотр в коде Visual Studio

Есть ли способ отключить функцию "peek" ctrl-click в Visual Studio Code? В идеале я бы хотел, чтобы ctrl-click просто открыл файл, содержащий определение, на новой вкладке.

Редактировать: Я представил вопрос, чтобы хотя бы сделать его менее запутанным. По-видимому, моя терминология немного ошибочна.

Чтобы уточнить, есть два действия:

  1. Щелкните правой кнопкой мыши → Определение Peek
  2. Щелкните правой кнопкой мыши → Перейти к определению (привязанный к ctrl-click)

Их поведение выглядит следующим образом:

  1. PD, одно определение
    • Открывает встроенный интерфейс, показывающий определение.
  2. PD, множественные определения

    • Открывает встроенный интерфейс, показывающий определения.
  3. GtD, одно определение

    • Откройте файл, содержащий определение.
  4. GtD, несколько определений
    • Выберите одно из определений случайным образом, откройте этот файл и встроенный интерфейс, содержащий все определения.

Все это прекрасно, за исключением последнего. Выполнение обеих вещей приводит к действительно избыточному и запутанному интерфейсу:

Confusing!

Должен быть способ иметь одно из этих типов поведения:

  • Выберите одно из определений случайным образом, откройте этот файл.

Или:

  • Откройте встроенный интерфейс, содержащий все определения (в текущем файле)

Ответы

Ответ 1

Кажется, это исправлено в более новой версии. Если я теперь навешиваю FOO в foo.cpp, я вижу обычную подсказку #define FOO 2. Если я нажимаю Ctrl, сообщение расширяется, чтобы добавить текст "Нажмите, чтобы показать 2 определения", и если я нажму кнопку, удерживая Ctrl, я получу окно подглядывания в соответствии с запросом.

enter image description here

Ответ 2

Я попытался найти обходной путь, изменяющий поведение CMD+. Нажмите, чтобы перейти к реализации, но, похоже, решения пока нет?

Документация VSCode показывает, что он по умолчанию настроен на переход к определению без способа его изменения: https://code.visualstudio.com/docs/editor/editingevolved

На моей машине (Mac), если я нажму CMD + Click или F12 в методе, он направит меня к представлению Peek для определения, однако CMD + F12 направит меня к реализации без появления Peek.

Ответ 3

Это действительно раздражало меня. Итак, вот мое временное исправление, которое исправляет установочные файлы VSCode. Вам нужно будет повторно применять каждое обновление. Вот указания для v1.30.2 и мой метод достижения этого - который может быть полезен для более поздних версий, если вам придется найти его самостоятельно.

Я сделал запрос на удаление, чтобы исправить это: https://github.com/Microsoft/vscode/pull/68023

  1. Выясните, как выглядит функция, которая должна быть исправлена. Методом является DefinitionAction.prototype._onResult(editorService, editor, model)

  2. Перейдите в каталог установки VSCode. %LocalAppData%\Programs\Microsoft VS Code

    • Щелкните правой кнопкой мыши и откройте каталог в VSCode, чтобы мы могли использовать функцию поиска VSCode для поиска текста в каждом файле.
  3. Найдите _onResult и оцените каждый результат, проверяя, соответствуют ли подпись и тело тому, что мы ожидаем от функции, которую мы видели в шаге 1.

    • Мы знаем из шага 1, функция _openReference находится рядом. Используйте это, чтобы сузить поиск.
    • Я нашел это в строке 2443 workbench.main.js 758. Он охватывает 2 строки. Используйте сопоставление скобок, чтобы найти конец или узнать, что он заканчивается непосредственно перед t.prototype._openReference
    • Это та функция, которую я нашел: t.prototype._onResult=function(e,t,n){var r=this,o=n.getAriaMessage();if(i.alert(o),this._configuration.openInPeek)this._openInPeek(e,t,n);else{var s=n.nearestReference(t.getModel().uri,t.getPosition()) ;this._openReference(t,e,s,this._configuration.openToSide).then(function(t){t&&n.references.length>1?r._openInPeek(e,t,n):n.dispose()})}}
    • Когда отформатирован:

      t.prototype._onResult = function (e, t, n) {
        var r = this, o = n.getAriaMessage();
        if (i.alert(o), this._configuration.openInPeek)
          this._openInPeek(e, t, n);
        else {
          var s = n.nearestReference(t.getModel().uri, t.getPosition());
          this._openReference(t, e, s, this._configuration.openToSide).then(function (t) {
            t && n.references.length > 1 ? r._openInPeek(e, t, n) : n.dispose()
          })
        }
      }
      
  4. Замените функцию на следующую (если используется та же версия) или отформатируйте и отредактируйте функцию, которая, по вашему мнению, похожа на этот пример. Обратите внимание, что переменная i является глобальным объектом \window и может быть изменена.

    t.prototype._onResult = function (e, t, n) {
      i.alert(n.getAriaMessage());
      if (this._configuration.openInPeek || n.references.length > 1) {
        this._openInPeek(e, t, n);
      } else {
        var s = n.nearestReference(t.getModel().uri, t.getPosition());
        this._openReference(t, e, s, this._configuration.openToSide).then(()=> n.dispose())
      }
    }
    
  5. Запустите VSCode. Вы получите Your Code installation appears to be corrupt. Please reinstall Your Code installation appears to be corrupt. Please reinstall. Просто нажмите значок шестеренки и нажмите " Don't Show Again.

  6. Ctrl + Click теперь будет:

    • Используйте peek, если есть несколько определений
    • При использовании peek, не будет переходить к лучшему совпадению в редакторе, и вы потеряете свое место
    • Если есть только одно определение, оно перейдет к лучшему совпадению и НЕ откроет взгляд.

Ответ 4

** Что такое Peak ** well peek - небольшое окно, которое можно открыть в вашем коде, чтобы можно было редактировать или изменять код в других файлах, не открывая его.

** Чтобы отключить его ** хорошо, это довольно простая визуальная студия позволяет пользователю настраивать почти все, что есть множество настроек.

поэтому для выключения заглядывания следуйте инструкциям Инструменты> параметры> инструменты для повышения производительности> общий> контрольный щелчок показывает определения в режиме ожидания

Но теперь, когда вы отключили просмотр, он откроет вкладку предварительного просмотра.

Если вы не хотите этого, перейдите также в Инструменты> Параметры> Среда> Вкладки и Windows> Разрешить открытие новых файлов на вкладке предварительного просмотра

Что это, ты хорошо пойдешь сейчас.