Як вибрати всі екземпляри змінної та відредагувати ім'я змінної в Sublime


428

Якщо я вибрав змінну (а не будь-яку рядок) у своєму коді, всі інші екземпляри цієї змінної отримують обведення (білий контур) навколо них:

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

Чи є комбінація клавіш, яка дозволить мені вибрати всі ці екземпляри змінної та відредагувати їх усі відразу?


Що я пробував:

D, Kі Uдозволяє мені вибирати їх один за одним, але я повинен вручну виключити не змінну збіг рядків:

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

А за допомогою CtrlGпросто вибирає всі збіги рядків:

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

Зрозуміло, що Sublime здатний розмежовувати відповідність змінних та рядків. Чи немає способу вибрати лише збіги змінних?

Відповіді:


604
  1. Помістіть курсор у змінну.

    Примітка: ключ починається з порожнього вибору. Не виділяйте; просто поставте туди курсор.

текстовий курсор на змінній

  1. Натисніть, Dякщо потрібно. Не на Mac? Використовуйте CtrlD.

більше примірників змінної виділено

Не вийшло? Повторіть спробу, переконайтеся, що почати з нічого вибраного .

Більше команд:

Знайти все: CtrlG вибирає всі випадки одразу. Не на Mac?AltF3

Скасувати вибір: U кроки назад. Не на Mac?CtrlU

Швидкий пропуск далі: KD пропускає наступне виникнення. Не на Mac?CtrlKCtrlD

Піднесені документи


14
Що таке ⌘, як це зробити на клавіатурі, яка не є MAC?
Bjarke Freund-Hansen

6
принаймні в ST3 ви можете робити Ctrl-⌘-G без іншої команди ⌘-D. На жаль, це страшно неправильно позначено в меню!
ватсонік

30
Це не відповідає оригінальному питанню ОП. Він спеціально запитав variable (not just any string). Це просто вибирає всі входження рядка.
Бетджамін Річардс

17
@BetjaminRichards Переконайтеся, що ви не вибираєте (виділяєте) змінну. Просто перемістіть курсор на змінну і натисніть ⌘D. До речі, це саме те питання , який я мав з відповіддю MattDMo в ( stackoverflow.com/a/16844924/483520 ).
Нолан Емі

2
@MuhammadUmer Все, що відповідає слову, враховуючи межі. Не справжній пошук змінної, але набагато краще, ніж просте узгодження рядків.
Нолан Емі

135

Я знаю, що питання стосується Macs, але я потрапив сюди, шукаючи відповідь на Ubuntu, тому, мабуть, моя відповідь могла б комусь бути корисною.

Легкий спосіб зробити це: AltF3.


10
все ще вибираючи все, що має foo всередині.
користувач1767754

1
Ця відповідь стосується питання: stackoverflow.com/q/12162047/2270563 . Але тут питання інше. Вибір лише змінних, а не всіх збігів.
Рам

4
@ user1767754 Якщо ви не хочете вибрати все, що є fooвсередині, не вибирайте першого foo. Замість цього просто помістіть курсор у слово, fooа потім Alt-F3. Вуала
Анвар

Ця відповідь неправильна. Це дозволить вибрати всі екземпляри fooне лише виділених.
Андре К. Андерсен

Не працює в KDE, тому я просто додав {"keys": ["alt + d"], "command": "find_all_under"} у файл прив'язки ключів: Preferences> Key BIndings. alt + d, здається, не конфліктує ні з чим там.
користувач1985553

47

Незважаючи на багато зусиль, я не знайшов вбудованого або допоміжного способу зробити те, що ви намагаєтеся зробити. Я повністю погоджуюся з тим, що це має бути можливим, оскільки програма може відрізнятись fooвід того, buffoonколи ви вперше виділите її, але, схоже, ніхто не знає способу її виконання.


Однак, ось кілька корисних комбінацій клавіш для вибору слів у Піднесеному тексті 2:

CtrlG- вибирає всі зустрічі поточного слова ( AltF3у Windows / Linux)

D- вибирає наступний екземпляр поточного слова ( CtrlD)

  • K, D- пропускає поточний екземпляр і продовжує вибір наступного ( CtrlK, CtrlD)
  • U- "м'яке скасування", повертається до попереднього вибору ( CtrlU)

E, H- використовує поточний вибір як поле "Знайти" у "Знайти та замінити" ( CtrlE, CtrlH)


6
Але обведення з'являється лише навколо зустрічей імені змінної , в той час як ⌘+Dдіє на всі зустрічі рядка. Наприклад, якщо я виділяю foo, піднесене чудово обводить всю змінну foos, але не рядок fooу моїй eject_buffoonфункції. Але, використовуючи комбінації клавіш, наведених вище, я змушений вручну ⌘+Kвиконувати відповідність рядків, щоб уникнути eject_bufbarnфункціонування. Має бути кращий спосіб!
Нолан Емі

@Nolan - сміливо задайте питання і побачити, чи є хтось із пропозицій. Одне з можливих способів вирішити - вибрати foo_(foo та пробіл після нього) або _foo_(пробіли як до, так і після), а потім використовувати ⌘-Dабо Ctrl-⌘-D.
MattDMo

7
Я насправді думаю, що це саме питання, яке задала ОП. Він спеціально говорить " змінна " (не "область тексту" або "рядок") і " штрих " (не "виділення"). І це запитання не є дублікатом stackoverflow.com/questions/12162047/… - про що йдеться у "виділеному виділенні". Крім того , звичайно, fooчасто проявляється як (foo), _foo,,(foo, і _foo}, тому _foo_досить незадовільний.
Нолан Емі

21

Це працювало для мене. Потім поставте курсор на початок слова, яке ви хочете замінити

CtrlK, CtrlD, CtrlD...

Це повинно вибрати стільки примірників слова, скільки вам подобається, тоді ви можете просто ввести заміну.


1
Це була відповідь, яка працювала для мене, крім відповіді, про яку згадували. Добре!
Акаш

Це не дає відповіді на запитання.
MD004

@ MD004 Як це?
варильні панелі

@hobs Питання полягає в тому, як "вибрати всі ці екземпляри" відразу . Я визнаю, що фразування питання в заголовку неоднозначне, але пізніше у публікації ОП описує ваше рішення і каже, що це "вибирає їх по одному, але мені доведеться вручну виключити не змінні збіги рядків "що незадовільно. Btw, приклад сценарію, коли це незадовільно, коли існує, скажімо, 1000 зустрічей слова, яке ви хочете замінити, і в цьому випадку їх вибір вручну не є варіантом.
MD004

1
А-а, я бачу. Дякую. Тепер я бачу, чому прийнята відповідь набагато краща для ситуації з ОП та вашого прикладу на 1000 випадків.
варильні панелі

12

Магія полягає в тому, що ви повинні почати з порожнього виділення, тому поставте курсор перед словом / символом, який ви хочете вибрати, і натисніть Ctrl+ D.


2
Це відповідь для змінних окремих символів. Для будь-яких інших змінних можна покласти курсор будь-де в змінній для початку.
manish_s

Це працює для мене в Sublime 3 і це найпростіший спосіб зробити це, якщо ви хочете обмежити зміни на меншій області, наприклад, у межах функції, на відміну від усього файлу. Command-D для macOS, звичайно.
Райан Х.

10

На мій погляд, це найбільша помилка у Піднесеному. Alt+ F3важко досягти / запам'ятати, а Ctrl+ Shift+ Gне має сенсу вважати Ctrl+D - "додати наступний екземпляр до вибору".

Додайте це до своїх прив'язок ключів користувача (Налаштування> Прив'язки клавіш):

{ "keys": ["ctrl+shift+d"], "command": "find_all_under" },

Тепер ви можете виділити щось, натиснути Ctrl + Shift+ D, і це додасть до вибору кожен інший екземпляр у файлі.


1
Це єдина відповідь, яка насправді відповідає на початкове запитання!
kmundnic

Ще вибирає рядки та коментарі
Wassadamo


4

Як сказав користувач1767754, головне тут - не робити спочатку жодного вибору.

Просто розмістіть курсор всередині назви змінної, не клацніть двічі, щоб вибрати її. Для змінних з одним символом розмістіть курсор на передній або кінці змінної, щоб спочатку не було зроблено жодного вибору.

Тепер продовжуйте натискати Cmd+ Dдля наступного вибору змінної або Ctrl+ Cmd+ Gдля вибору всіх змінних одночасно. Він буде магічно вибирати лише змінні.


0

На всякий випадок, якщо хтось інший натрапив на це питання, шукаючи спосіб замінити рядок у кількох файлах, це Command+ Shift+F

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