2013-06-30 41 views
6

當使用Paredit,我經常面臨着以下時,爲了避免多餘的空格字符(管道符代表光標):如何啜第一表達

(foo |bar baz) 

我想請用括號bar,所以我用paredit-wrap-around中號 - )得到這個:

(foo (|bar) baz) 

同樣適用,當我想要把欄中顯示的字符串,而不是裏面,我可以使用中號 - 得到這個:

(foo "|bar" baz) 

然而,Clojure中也使用方括號[]和花括號{}爲載體,地圖和套。這些似乎沒有paredit'wrap around'命令。所以在這種情況下,例如把巴到載體,我通常使用[鍵來創建一個新的向量:

(foo [|] bar baz) 

後跟一個paredit-forward-slurp-sexpÇ - ),這導致:

(foo [| bar] baz) 

我想刪除在bar之前插入的空格字符。這可能嗎?爲什麼從空表達式轉換到包含一個項目時,paredit保留一個空格字符?不應該將第一個項目添加到S表達式總是被推向正確的方向嗎?

+0

這個假設可能是你要把新東西放在新列表的頭部。我想你可以使用組合C- C-d。 – d11wtq

+2

我必須提到,最新的信任版20130722.1324(來自MELPA)的'paredit-forward-slurp-sexp'會自動刪除空格字符。所以你可以按'[C-]'來獲得'[bar]'。另外,'[''綁定到'paredit-open-square'這是一個dwim命令:選擇一個表達式並按'''會將該表達式包裝到一個向量中。所以按下'C-M-SPC ['是另一種方式。我使用後一種方式,因爲它更直觀,我可以改變主意來選擇兩個表達式,並且在autopair模式下以非lisp緩衝區和paredit模式下的lisp緩衝區保持相同的習慣。 –

回答

4

Paredit已經有相當長的一段時間了,它有paredit-wrap-curlyparedit-wrap-square。如果你想使用它們,只需將它們綁定到一個聽起來很有聲音的鍵上,然後就可以了。如果你使用的是這樣一個老版本的paredit,這些函數不存在,你應該升級(但我不認爲你是,因爲slurp命令與他們一起工作)。

1

paredit的最新開發版本將M-[綁定到paredit-wrap-square,它完全符合您的需求。 Emacs的已經結合M-{backward-paragraph,但如果你千萬不要使用,你可以自定義paredit影子吧:

(eval-after-load 'paredit 
    '(progn 
    (define-key paredit-mode-map (kbd "M-{") 'paredit-wrap-curly))) 

如果你想刪除周圍的點的所有空間,你可以鍵入M-\delete-horizontal-space

相關問題