Intellij Java/Scala: Удалить в качестве разделителя? (как Emacs Paredit)
Одной из замечательных особенностей режима "paredit" Emacs, который работает с Lisp-подобными, а также с другими языками, такими как Java/Scala, является возможность просто нажимать Ctrl-k (kill), и он будет аккуратно удалять текст до соответствующего разделителя, которая может быть закрывающей кавычкой или закрывающей скобкой / паренем / квадратной скобкой. Он по существу удалит вещи, сохраняя синтаксически правильный код, т. Е. Удалит точно правильное количество закрывающих скобок / скобок и т. Д.
Есть ли такое действие или сочетание клавиш в Intellij IDEA? Или как мне определить макрос для этого?
1 ответ
У меня есть решение, которое почти работает: запишите последовательность макросов (привязки клавиш Mac):
- Расширить выделение (Alt Up)
- Расширить выделение (Alt Up)
- Справа с выделением (Shift RightArrow)
- Вырезать выбор (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 без включения в него круглых скобок, то это было бы прекрасно, но я могу жить с тем, что имею сейчас.