Intellij Java/Scala:删除到分隔符?(如Emacs Paredit)



类似Lisp以及Java/Scala等其他语言的Emacs"paredit"模式的一个令人敬畏的功能是,只需点击Ctrl-k(kill),它就会智能地删除文本,直到找到合适的分隔符,可以是右引号,也可以是右大括号/括号/方括号。它将从本质上删除内容,同时仍然保持代码的语法有效性,即它将删除正确数量的右括号/大括号等。

Intellij IDEA中有这样的操作或键盘快捷键吗?或者我该如何定义一个宏来实现这一点?

我有一个几乎有效的解决方案:记录宏序列(Mac密钥绑定):

  1. 展开所选内容(Alt向上)
  2. 展开所选内容(Alt向上)
  3. 向右选择(向右移动箭头)
  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)

请注意,它删除了右括号,这是因为"展开选择"包含了右括号。如果封闭表达式是字符串或具有大括号,则"展开当前选择"不包括右侧引号或大括号。

如果我知道如何在不包含圆括号的情况下进行"展开选择",那么这将是完美的,但我可以接受现在的情况。

最新更新