Как выбрать все экземпляры переменной и отредактировать имя переменной в Sublime

428

Если я выберу переменную (а не просто строку) в своем коде, все остальные экземпляры этой переменной получат штрих (белый контур) вокруг них:

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

Есть ли сочетание клавиш, которое позволит мне выбрать все эти экземпляры переменной и редактировать их все сразу?


Вещи, которые я пробовал:

D, Kи Uпозволяет мне выбирать их по одному, но я должен вручную исключить не переменные совпадения строк:

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

И используя CtrlGпросто выбирает все совпадения строк:

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

Очевидно, что Sublime может различать совпадения переменных и строк. Нет ли способа выбрать только совпадения переменных?

Оскар Перссон
источник

Ответы:

604
  1. Поместите курсор в переменную.

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

текстовый курсор на переменной

  1. Нажмите по Dмере необходимости. Не на Mac? Использование CtrlD.

выделено больше экземпляров переменной

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

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

Найти все: CtrlG выбирает все вхождения одновременно. Не на Mac?AltF3

Отменить выбор: U шаги назад. Не на Mac?CtrlU

Quick Skip Next: KD пропускает следующий случай. Не на Mac?CtrlKCtrlD

Возвышенные Документы

Нолан Эми
источник
14
Что такое ⌘, как вы делаете это на клавиатуре без MAC?
Бьярке Фрейнд-Хансен
6
по крайней мере, в ST3 вы можете сделать Ctrl-⌘-G без другой команды ⌘-D. Его ужасно неправильно маркируется в меню, к сожалению!
watsonic
30
Это не отвечает на оригинальный вопрос ОП. Он специально спросил variable (not just any string). Это просто выбирает все вхождения строки.
Бетжамин Ричардс
17
@BetjaminRichards Убедитесь, что вы не выделяете (выделяете) переменную. Просто переместите курсор на переменную и затем нажмите ⌘D. Кстати, это именно та проблема, которая у меня возникла с ответом MattDMo ( stackoverflow.com/a/16844924/483520 ).
Нолан Эми
2
@MuhammadUmer Все, что соответствует слову, принимая во внимание границы. Не настоящий поиск переменных, но намного лучше, чем простое сопоставление строк.
Нолан Эми
135

Я знаю, что вопрос касается компьютеров Mac, но я попал сюда в поисках ответа на Ubuntu, поэтому я думаю, что мой ответ может быть кому-то полезен.

Легкий способ сделать это: AltF3.

elaRosca
источник
10
все еще выбирая все, что имеет foo внутри.
user1767754
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, похоже, не конфликтует с чем-то там.
user1985553
47

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


Однако вот несколько полезных комбинаций клавиш для выбора слов в Sublime Text 2:

CtrlG- выбирает все вхождения текущего слова ( AltF3в Windows / Linux)

D- выбирает следующий экземпляр текущего слова ( CtrlD)

  • K, D- пропускает текущий экземпляр и продолжает выбирать следующий ( CtrlK, CtrlD)
  • U- «мягкая отмена», возврат к предыдущему выбору ( CtrlU)

E, H- использует текущий выбор в поле «Найти» в Найти и заменить ( CtrlE, CtrlH)

MattDMo
источник
6
Но штрих появляется только вокруг вхождений имени переменной , в то время как ⌘+Dдействует на все вхождения строки. Например, если я выделю foo, sublime чудесным образом обводит все переменную 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 Вопрос в том, как «выбрать все эти экземпляры» одновременно . Я признаю, что формулировка вопроса в заголовке неоднозначна, но позже в этом посте ОП описывает ваше решение и говорит, что это «выбирает их один за другим, но я должен вручную исключить не переменные совпадения строк «что неудовлетворительно. Кстати, пример сценария, в котором это неудовлетворительно, - это когда, скажем, есть 1000 вхождений слова, которое вы хотите заменить, и в этом случае их выбор вручную невозможен.
MD004
1
АА, вижу. Спасибо. Теперь я понимаю, почему принятый ответ намного лучше для ситуации ОП и вашего примера с 1000 случаев.
варочные панели
12

Волшебство в том, что вы должны начать с пустого выделения, поэтому поместите курсор перед словом / символом, который вы хотите выбрать, и нажмите Ctrl+ D.

user1767754
источник
2
Это ответ для переменных отдельных символов. Для любых других переменных вы можете поместить курсор в любое место переменной, с которой нужно начать.
manish_s
Это работает для меня в Sublime 3 и является самым простым способом сделать это, если вы хотите ограничить изменения меньшей областью, например, внутри функции, а не всего файла. Command-D для macOS, конечно.
Райан Х.
10

Для меня это самая большая ошибка в Sublime. Alt+ F3трудно найти / запомнить, и Ctrl+ Shift+ Gне имеет смысла, учитывая, что Ctrl+ Dэто «добавить следующий экземпляр к выделению».

Добавьте это к своим привязкам клавиш пользователя («Настройки»> «Привязки клавиш»):

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

Теперь вы можете выделить что-то, нажать Ctrl+ Shift+ D, и это добавит каждый второй экземпляр в файле к выделению.

Трэвис Хитер
источник
1
Это единственный ответ, который на самом деле отвечает на оригинальный вопрос!
кмундник,
Все еще выбирает строки и комментарии
Wassadamo
4

Он упоминается @watsonic , что в Sublime Text 3 на Mac OS, начиная с пустым выбором , просто G( AltF3на Windows) делает трюк, а D+ Gв Sublime Text 2.

Франклин Ю
источник
4

Как сказал пользователь 1767754, ключ в том, чтобы изначально не делать никакого выбора.

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

Теперь продолжайте нажимать Cmd+ Dдля выбора следующей переменной или Ctrl+ Cmd+ Gдля выбора всех переменных одновременно. Он волшебным образом выберет только переменные.

manish_s
источник
0

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

сойка
источник