2014-11-04 46 views
3

Emacs「paredit」模式的一個非常棒的功能,與Lisp-like以及Java/Scala等其他語言一起使用的功能之一就是能夠按Ctrl-k(kill),並且它會巧妙地刪除文本,直到適當的分隔符(可能是一個關閉引號)或一個右括號/ paren /方括號。它將基本上刪除東西,同時仍然保持您的代碼語法上的有效性,即它將刪除恰好合適的關閉對象/大括號等。Intellij Java/Scala:刪除分隔符? (如Emacs Paredit)

Intellij IDEA中是否存在這樣的操作或鍵盤快捷鍵?或者我將如何定義一個宏來做到這一點?

+2

我不知道IDEA中的這種功能,但可以按CMD + W(在編輯器中)選擇一個詞。繼續按下以增加此範圍。然後刪除。 – 2014-11-04 16:18:18

+0

是的,我知道(它是Cmd + W或Alt-UpArray),它不斷擴大選擇範圍。這將允許我刪除整個當前級別的塊或代碼或字符串。不過,我希望能夠將行終止到當前級別分隔符的末尾。 – 2014-11-04 16:55:12

回答

0

我有一個幾乎有效的解決方案:錄製宏序列(蘋果鍵綁定):

  1. 擴展選區(Alt上)
  2. 擴展選區(Alt上)
  3. 權與選擇(移位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不包含右側引號或大括號。

如果我知道如何在不包含括號的情況下進行擴展選擇,那麼這將是完美的,但我可以接受我現在擁有的東西。