2013-09-23 44 views
6

假設我有這樣的代碼如何包裝形式與已經寫入外部形式paredit

(hello world) 
(hi world) 

然後,它在我腦海中,我應該換以下列形式:

(let (acc) 
    <> 
    (nreverse acc)) 

造成這種代碼:

(let (acc) 
    (hello world) 
    (hi world) 
    (nreverse acc)) 

下面是我平時做的包裝。首先,我喜歡這個待包裹的形式之前寫一個不完整的外形:

(let (acc)) 
(hello world) 
(hi world) 

然後我按01​​(paredit-forward-slurp-sexp)兩次以發出聲音的東西:

(let (acc) 
    (hello world) 
    (hi world)) 

然後我完成了通過添加最後是(nreverse acc)

現在我想知道的是,如果我是從第一次編寫完整的外部表單模板開始的?

(let (acc) 
    (nreverse acc)) 
(hello world) 
(hi world) 

或類似這樣的

(hello world) 
(hi world) 
(let (acc) 
    (nreverse acc)) 

是否存在的paredit或非paredit命令,我可以按完成從開始工作的短序列?

我可以移動點,剪下兩個待包裝的表格,移動點,粘貼表格。但我想知道是否有更方便的方法。

我很滿意我如何做包裝,但感覺就像我可能會錯過一些其他整潔的編輯技巧,這是從不同的開始。

+0

如果所有的失敗,使用鍵盤宏。你也可以擴展paredit去做任何你想做的事情。 GNU Emacs是可擴展的。 –

回答

7

而不是反覆使用paredit-forward-slurp-sexp或殺死,yank'ing的區域,你可以標記sexps的區域包圍,並使用paredit-wrap-roundM-(

如果我輸入您的例子,我會先從最後一個表達式:

(hello world) 
(hi world) 
(nreverse acc)_ 

C-SPC大犬大犬C-M-一個M-(產量

(_(hello world) 
    (hi world) 
    (nreverse acc)) 

插入let (acc)和完成與RETC-M-HTAB到reindentify。

有可能是一個更好的方式=),但即使你不使用transient-mark-mode您可以提供其他選項來包裝:

  • 包裝到緩衝區的結束或封閉列表
  • 銅#包裝以下#表達

查看文檔字符串爲paredit-wrap-sexp

+3

此。請注意,只要使用'('當區域處於激活狀態並且啓用了'transient-mark-mode'時就可以達到與使用'paredit-wrap-sexp'相同的效果。我使用它,並且它使得包裝區域具有括號感自然。 –

1

你也可能想看看redshank,一個emacs的包,做了很多這樣的有用的東西。非常好地使用paredit。