IntelliJ IDEA способ редактирования нескольких строк


113

Я видел это в TextMate, и мне было интересно, есть ли способ сделать это в IDEA.

Скажем, у меня есть следующий код:

 leaseLabel = "Lease";
 leaseLabelPlural = "Leases";
 portfolioLabel = "Portfolio";
 portfolioLabelPlural = "Portfolios";
 buildingLabel = "Building";

Как лучше всего добавлять '+ "foo"' к каждой строке? Режим столбца не будет работать, поскольку линии неправильно выровнены с правой стороны ... если нет простого способа выровнять текст по правому краю: P


Это то, что мне нужно делать так редко, что даже если бы в моем редакторе был специальный режим, я бы никогда не вспомнил, как его использовать. Я бы просто использовал буфер обмена, если бы он был только для нескольких строк (как указано выше). Если это для сотен строк, тогда я бы перешел на гаджет поиска / замены.
Майкл Берр,

В режиме столбца создайте 5 курсоров слева. Затем используйте Ctrl-RightArrow, чтобы перейти вправо. Множественные курсоры, макросы и поиск-замена - все это отличные способы сделать это! Я не могу решить, какой из них мне больше нравится.
Daniel Alexiuc

1
Его Option + Shift + Click для Macbook. Все ярлыки Intellij: docs.google.com/document/d/…
Mehta,

Ответы:


175

Начиная с Idea IntelliJ IDEA 13.1 появилась возможность редактировать несколько строк.

Использование:

Alt+ Shift+ Щелчок мышью

для выбора. Подробнее об этом новом улучшении в блоге IntelliJ здесь . Очень полезная функция.


1
Спасибо за ссылку. Я случайно наткнулся на эту функцию, но почему-то не мог понять, какую комбинацию клавиш я случайно нажал :)
aberrant80

12
По состоянию на февраль 2015 г. Alt-Shift-Insert: режим выбора столбца ИЛИ просто Alt-Select. очень мощный и простой в использовании. Я не уверен, почему люди продолжают говорить OP использовать «поиск и замену», когда он явно спрашивает об одновременном редактировании строк - факт, который он спрашивает, говорит о том, что он достаточно умен, чтобы знать о поиске и замене.
RichieHH

4
Для Mac это Alt + Click.
Гаутхэм Гопалакришнан

5
А пока просто средняя кнопка мыши + перетаскивание.
WesternGun

1
Его Option + Shift + Click для Macbook. Все ярлыки Intellij: docs.google.com/document/d/…
Mehta,

114

Я использую режим выбора столбца ( Cmd+ Shift+ 8на Mac), который позволяет создавать несколько курсоров с помощью Shift+ Upили Shift+, а Downзатем редактировать все строки вместе.

Начиная с IntelliJ IDEA 14 есть также Clone Caret Above / below :

  • Окна Ctrl, Ctrl+ Up/Down
  • MacOS: Option, Option+ Up/Down

(удерживайте второе нажатие клавиши-модификатора, затем нажмите клавишу со стрелкой)


5
Я случайно нажал Cmd + Shift + 8 и, хоть убей, не мог понять, почему, черт возьми, все можно выбрать "многострочно". Спасибо за сочетание клавиш!
Робин Йонссон

4
Двойной <kbd> Ctrl </kbd> у меня не работает в IntelliJ Ultimate 2016.1. Мне нужно использовать двойной <kbc> Option </kbd>, удерживая второе нажатие, затем нажимать клавиши со стрелками.
Big McLargeHuge

1
@DaveKennedy Вы абсолютно правы, Jet Brains изменил ярлык по умолчанию.
Александр Богушов

решение с двойным ctrl лучше всего, поскольку оно позволяет мне держать руку на клавиатуре
Андрейс

Чтобы изменить сопоставление клавиш, чтобы оно соответствовало любому из ваших других редакторов, которые вы используете, перейдите в «Настройки» -> «Раскладка» и в правом поле поиска найдите «Клонировать каретку». Щелкните действие правой кнопкой мыши и выберите «Добавить сочетание клавиш». Если сохранение вызывает конфликт, все равно нажмите «ОК». Затем он добавит еще один запрос, спрашивающий, хотите ли вы «Удалить» другое назначение (возможно, то, что вы хотите), или «Оставить» его (намеренный запуск двух вещей одним ярлыком кажется странным ...) или «Отменить» (почему вы тогда раньше
нажимали

38

Другой подход, использующий только клавиатуру. Возможно (начиная с версии 13.1) использовать ярлыки Alt+ J/ Shift+ Alt+ J( Ctrl+ Gдля OS X) для создания нескольких курсоров. Alt+ Jвыбирает следующее вхождение текущего выделенного текста и добавляет еще один курсор.

  1. Выберите первую точку с запятой

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

  1. Затем нажмите Alt+ Jчетыре раза

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

  1. Отредактируйте то, что хотите

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

  1. Нажмите, Escчтобы вернуться к первой строке.

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


5
Боже, как я прожил без этой функции год! Большое спасибо!
coffman21

27

Поместите курсор в конец

Windows: CTRL + CTRL(Удерживать) +↑ / ↓

Mac: option + option(Удерживать) + ↑ / ↓.

Чтобы поместить курсор в конец строк: переместите курсор в верхнюю строку, клонируйте вниз и щелкните END.

Изменить горячую клавишу с несколькими картами

Чтобы добавить настраиваемую раскладку клавиш, CTRL+ SHIFT+ A, введите keymapи щелкните мышью с Settingsподтекстом. Ищите Clone Caret Aboveи Clone Caret Below.

Я сопоставил свой с ALT+ SHIFT+ ↑ / ↓в Windows и + ↑ / ↓на Mac.

Бонус

Попробуйте удерживающие комбинации CTRL, SHIFTи стрелки для повышения мощности отбора.


1
Спасибо за комментарий «КОНЕЦ», отлично подходит для общих присваиваний переменным разной длины.
Киган 82

1
Это должен быть ответ, поскольку это наиболее полный и точный ответ. +1.
Ариэль Мирра,

другой способ - удерживать «alt» и продолжать нажимать «j», он продолжит добавлять строки к многострочному выделению.
Gaurav

14

Режим столбца работает нормально: сначала выберите все строки в режиме столбца, затем нажмите END: каждый курсор переместится в конец соответствующей строки.

В Linux ( МЫШЬ НЕ ТРЕБУЕТСЯ ):

  1. ALT+ SHIFT+ INSERTдля входа в блочный режим

    вошел в режим редактирования столбца

  2. SHIFT + UPили SHIFT + DOWNвыбрать несколько строк

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

  3. END переходить в конец каждой строки

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

  4. теперь введите foo, он добавит его в каждую строку:

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

  5. Теперь отмените выбор всего с помощью ESCAPEи вернитесь в обычный режим выбора с помощью ALT + SHIFT + INSERT.


9

Вы также можете выбрать вертикальный блок кода, щелкнув колесико мыши и перетащив :

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


8

Выберите "Следующее вхождение":

      Alt+J on Windows, Ctrl-G on Mac OS X

Снимите отметку "Возникновение":

      Alt+Shift+J on Windows, Ctrl-Shift-G on Mac OS X

Выбрать все вхождения:

      Ctrl+Alt+Shift+J on Windows, Ctrl-Cmd-G on Mac OS X

для дополнительной информации: ссылка


Дело в (left) Alt + Jтом, что сначала нужно выбрать код.
ALIZEYN

7

Я просто использую макросы для таких вещей. Я начинаю записывать макрос, делаю это один раз, а затем воспроизводю макрос на каждой строке, которую хочу изменить. Вы будете поражены тем, насколько хорошо вы можете получить функцию записи / воспроизведения макросов.


Выбросить макросы очень удобно для внесения таких изменений. Как вы это описываете, это именно то, что я сделал бы, если бы вносил эти изменения в редакторе Zeus.
jussij

Если все строки сгруппированы таким образом, запишите макрос, чтобы также переместить курсор на следующую строку, тогда вам просто нужно запустить макрос на первой строке и повторить столько раз, сколько захотите.
weiji

Что значит «повторять сколько угодно раз»? Есть ли способ автоматически повторить макрос?
pypmannetjies

Правка-> Макросы-> Воспроизвести последний макрос. У меня это сопоставлено с F12, но у меня нестандартная привязка клавиш. Я делаю макрос один раз и начинаю снова и снова нажимать F12.
Крис Кессель

макросы - это хорошо, но если я использую ideavim в intellij, макросы не могут разрешить ярлык vim
Amitābha,

5

Мне потребовалось некоторое время, чтобы это выяснить, но на Mac вы можете дважды нажать Option(нажать один раз, отпустить, нажать еще раз, удерживать нажатой) и использовать клавиши Up/ Downдля создания / удаления каретки по своему желанию.

Вы также можете удерживать Shift+ Optionи щелкать для создания / удаления каретки в определенных точках.


Это здорово, но есть ли способ сделать это и выделить весь файл до конца? В противном случае мне придется прокрутить все это с помощью стрелки, и у нас будет несколько массивных файлов.
Джеки


3

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

";

на:

" + "foo";

Итак, если вы не знали: если у вас выделен текст во время замены (Ctrl + R или Cmd + R), он будет применяться только к выделенному фрагменту текста.





1

Для более новых версий используйте: Alt+ Shift+Insert


1
работает безотказно! спасибо @Meysam
Gaurav

другой способ - удерживать «alt» и продолжать нажимать «j», он продолжит добавлять строки к многострочному выделению.
Gaurav

0

Я обычно использую (NetBeans, но считаю, что его просто использовать в любой среде IDE): find&replace .

Вы просто найдете ;\nи замените его на+ $foo;\n тогда вы не применяете ко ВСЕМ строкам, но вы помещаете курсор в первую строку и просто нажимаете кнопку «заменить» (полагаю, в зависимости от вашей IDE) 7 раз, чтобы изменить 7 строк в кратчайшие сроки. Легко и просто, и это должно быть сделано с помощью самой базовой и самой продвинутой IDE, которую вы можете найти.

РЕДАКТИРОВАТЬ: В IntelliJ (не знаю, работает ли он и в других IDE) вы можете использовать поиск по регулярному выражению и замену только для выбора, чтобы вы могли фактически использовать «заменить все»


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

Так почему -1? Я ответил на его вопрос. -1 вопрос, если ты считаешь его глупым, не правильный ответ. Принятый ответ с макросом, на мой взгляд, более медленный метод, если честно.
Srneczek


0

Все приведенные выше ответы хороши, но если вы хотите многострочное редактирование в конце строк, вам нужно нажать клавишу «Конец», когда ваш многострочный выбор активен.

Для Mac Последовательность команд будет следующей:

shift option click # выбираем набор строк

command right arrow # перейти в конец строк

Это сделает многострочный выбор в конце строки, и вы можете отредактировать его по мере необходимости.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.