2014-11-04 4 views
3

Одна из потрясающих особенностей режима «paredit» Emacs, которая работает с Lisp-подобным, а также на других языках, таких как Java/Scala, - это возможность просто нажать Ctrl-k (kill), и это будет умно удалите текст до соответствующего разделителя, который может быть закрывающей кавычкой или закрывающей скобкой/парной/квадратной скобкой. Это будет по существу удалять вещи, сохраняя при этом ваш код синтаксически действительным, то есть он удалит точно правильное количество закрывающих парсеров/фигурных скобок и т. Д.Intellij Java/Scala: Удалить в разделитель? (например, Emacs Paredit)

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

+2

Я не знаю такой функции в IDEA, но вы можете нажать CMD + W (в редакторе), чтобы выбрать слово, то есть слово. Продолжайте настаивать, чтобы увеличить эту область. Затем удалите. –

+0

Да, я знаю об этом (это либо Cmd + W, либо Alt-UpArray), он продолжает расширять выбор. Это позволит мне удалить весь текущий блок или код или строку текущего уровня. Однако я хочу, чтобы можно было убить линию до конца разделителя текущего уровня. –

ответ

0

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

  1. Expand Selection (Alt Up)
  2. Expand Selection (Alt Up)
  3. Направо с выбором (Shift Rightarrow)
  4. Cut Selection (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 без включения круглых скобок, то это было бы прекрасно, но я могу жить с тем, что у меня есть сейчас.