Отключить просмотр в коде Visual Studio
Есть ли способ отключить функцию "peek" ctrl-click в Visual Studio Code? В идеале я бы хотел, чтобы ctrl-click просто открыл файл, содержащий определение, на новой вкладке.
Редактировать: Я представил вопрос, чтобы хотя бы сделать его менее запутанным. По-видимому, моя терминология немного ошибочна.
Чтобы уточнить, есть два действия:
- Щелкните правой кнопкой мыши → Определение Peek
- Щелкните правой кнопкой мыши → Перейти к определению (привязанный к ctrl-click)
Их поведение выглядит следующим образом:
- PD, одно определение
- Открывает встроенный интерфейс, показывающий определение.
-
PD, множественные определения
- Открывает встроенный интерфейс, показывающий определения.
-
GtD, одно определение
- Откройте файл, содержащий определение.
- GtD, несколько определений
- Выберите одно из определений случайным образом, откройте этот файл и встроенный интерфейс, содержащий все определения.
Все это прекрасно, за исключением последнего. Выполнение обеих вещей приводит к действительно избыточному и запутанному интерфейсу:
Должен быть способ иметь одно из этих типов поведения:
- Выберите одно из определений случайным образом, откройте этот файл.
Или:
- Откройте встроенный интерфейс, содержащий все определения (в текущем файле)
Ответы
Ответ 1
Кажется, это исправлено в более новой версии. Если я теперь навешиваю FOO
в foo.cpp
, я вижу обычную подсказку #define FOO 2
. Если я нажимаю Ctrl, сообщение расширяется, чтобы добавить текст "Нажмите, чтобы показать 2 определения", и если я нажму кнопку, удерживая Ctrl, я получу окно подглядывания в соответствии с запросом.
Ответ 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
-
Выясните, как выглядит функция, которая должна быть исправлена. Методом является DefinitionAction.prototype._onResult(editorService, editor, model)
-
Перейдите в каталог установки VSCode. %LocalAppData%\Programs\Microsoft VS Code
- Щелкните правой кнопкой мыши и откройте каталог в VSCode, чтобы мы могли использовать функцию поиска VSCode для поиска текста в каждом файле.
-
Найдите _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()
})
}
}
-
Замените функцию на следующую (если используется та же версия) или отформатируйте и отредактируйте функцию, которая, по вашему мнению, похожа на этот пример. Обратите внимание, что переменная 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())
}
}
-
Запустите VSCode. Вы получите Your Code installation appears to be corrupt. Please reinstall
Your Code installation appears to be corrupt. Please reinstall
. Просто нажмите значок шестеренки и нажмите " Don't Show Again.
-
Ctrl + Click теперь будет:
- Используйте peek, если есть несколько определений
- При использовании peek, не будет переходить к лучшему совпадению в редакторе, и вы потеряете свое место
- Если есть только одно определение, оно перейдет к лучшему совпадению и НЕ откроет взгляд.
Ответ 4
** Что такое Peak ** well peek - небольшое окно, которое можно открыть в вашем коде, чтобы можно было редактировать или изменять код в других файлах, не открывая его.
** Чтобы отключить его ** хорошо, это довольно простая визуальная студия позволяет пользователю настраивать почти все, что есть множество настроек.
поэтому для выключения заглядывания следуйте инструкциям Инструменты> параметры> инструменты для повышения производительности> общий> контрольный щелчок показывает определения в режиме ожидания
Но теперь, когда вы отключили просмотр, он откроет вкладку предварительного просмотра.
Если вы не хотите этого, перейдите также в Инструменты> Параметры> Среда> Вкладки и Windows> Разрешить открытие новых файлов на вкладке предварительного просмотра
Что это, ты хорошо пойдешь сейчас.