Intellij Java/Scala: Удалить в качестве разделителя? (как Emacs Paredit)

Одной из замечательных особенностей режима "paredit" Emacs, который работает с Lisp-подобными, а также с другими языками, такими как Java/Scala, является возможность просто нажимать Ctrl-k (kill), и он будет аккуратно удалять текст до соответствующего разделителя, которая может быть закрывающей кавычкой или закрывающей скобкой / паренем / квадратной скобкой. Он по существу удалит вещи, сохраняя синтаксически правильный код, т. Е. Удалит точно правильное количество закрывающих скобок / скобок и т. Д.

Есть ли такое действие или сочетание клавиш в Intellij IDEA? Или как мне определить макрос для этого?

1 ответ

У меня есть решение, которое почти работает: запишите последовательность макросов (привязки клавиш Mac):

  1. Расширить выделение (Alt Up)
  2. Расширить выделение (Alt Up)
  3. Справа с выделением (Shift RightArrow)
  4. Вырезать выбор (Cmd X)

Затем я связываю этот макрос с Ctrl-K. Это прекрасно работает, например (вертикальная черта - это позиция каретки, когда это вызывается):

List( "first", "second", "third |string", "fourth") => List( "first", "second", "third ", "fourth")
{100, 200, {300|, 400, 500}, 20} => {100, 200, {300}, 20}

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

(1, 2, (3, |4, 5), 6, 7, 8) => (1, 2, (3, , 6, 7, 8)

Обратите внимание, что он удаляет вмещающие правые скобки, потому что Expand-Selection включает в себя заключающие в скобки. Если включающее выражение является строкой или содержит фигурные скобки, то Expand-Selection не включает в себя правые кавычки или фигурные скобки.

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

Другие вопросы по тегам