Вимкніть заглядання в Visual Studio Code


76

Чи є спосіб вимкнути функцію "заглянути", натиснувши клавішу Ctrl, у коді Visual Studio? В ідеалі я хотів би, щоб ctrl-click просто відкрив файл, що містить визначення, на новій вкладці.

Редагувати : Я подав випуск, щоб принаймні зробити його менш заплутаним. Мабуть, моя термінологія дещо помилкова.

Для уточнення є дві дії:

  1. Клацніть правою кнопкою миші -> Визначення вигляду
  2. Клацніть правою кнопкою миші -> Перейти до визначення (прив’язане до клавіші Ctrl)

Їх поведінка така:

  1. PD, Єдине визначення
    • Відкриває вбудований інтерфейс, що відображає визначення.
  2. PD, кілька визначень

    • Відкриває вбудований інтерфейс, що відображає визначення.
  3. GtD, Однозначне визначення

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

Все це добре, крім останнього. Виконання обох речей призводить до дійсно зайвого і заплутаного інтерфейсу, як це:

Заплутано!

Повинен бути спосіб мати одну з таких форм поведінки:

  • Виберіть навмання одне з визначень, відкрийте цей файл.

Або:

  • Відкрити вбудований інтерфейс, що відображає всі визначення ( у поточному файлі )

Проголосував за вас, але ваша проблема в gh не пов'язана з "ctrl-click, просто відкрийте файл, що містить визначення, у новій вкладці" (я маю на увазі, вимкніть його). Я відкрив нове питання тут .
fabriciorissetдо

@Matt, що саме ти хочеш? Ви хочете повністю відключити заглядання? Або ви хочете, щоб у вікні заглядання відкрилося кілька посилань замість першого посилання?
Тарун Лалвані

@TarunLalwani Я зрозумів, погравши з ним більше, що у мене є кілька речей. По-перше, у підтримці Flow JavaScript є помилка, де відображаються кілька визначень, хоча вони однакові. Це, звичайно, поза рамками цього питання. За цю нагороду я б сказав, що прийму щось, що відключає відображення підгляду, якщо VSCode вже відкрив інший файл і ця вкладка містить обидва визначення. Я розумію, якщо визначення є у двох відокремлених файлах, випадково вибраний їх не має такого великого сенсу. Сподіваюся, я зрозуміліший і вибач за плутанину :)
Метт

@Matt, Це потребує модифікації коду за адресою github.com/Microsoft/vscode/blob/…, тому я не можу запропонувати відповідь із зміною коду, але дам вам вказівку, оскільки для цього потрібно відновити vscode
Тарун Лалвані

Конкретна версія VS?
Марк Шультхайс

Відповіді:


8

Я зробив запит на виправлення, щоб виправити це https://github.com/Microsoft/vscode/pull/68023 , але до того часу тут є тимчасове виправлення, яке виправляє файли інсталяції VSCode. Вам потрібно буде повторно застосовувати кожне оновлення.

EDIT: Виправлення було об’єднано у 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
    • Функція при форматуванні полягає в наступному (async func компілюється до statemachine, тому він виглядає нічим не як вихідний машинопис):

      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змінна є глобальним \ 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

Здається, це було виправлено в новішій версії. Якщо я тепер ширяє над FOOу foo.cpp, я бачу нормальну підказку #define FOO 2. Якщо натиснути Ctrl, повідомлення розширюється, щоб додати текст "Клацніть, щоб показати 2 визначення", і якщо я натиснув, утримуючи Ctrl, я отримаю вікно загляду, як запитується.

введіть тут опис зображення


0

Я намагався знайти обхідний шлях зміни поведінки CMD+ Клацніть, щоб перейти до реалізації, але, схоже, рішення ще немає?

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

На моєму комп'ютері (Mac), якщо я натисну CMD+ Клацніть або F12на метод, це перенаправить мене до подання Peek щодо визначення, однак CMD+ F12скерує мене до реалізації без появи peek.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.