2013-12-08 35 views
0

我用M-d以刪除線一樣長子字符串:Emacs。如何刪除直到包括括號?

if (aaaaa[dddd(d,s,d)] + bbbbbb[ssd]) { 

但它總是討厭我,我需要刪除最後一個支架。例如要刪除第一項aaaaa[dddd(d,s,d)]我需要按M-d 4次和C-d 2次。

我想知道,是否有一個命令會刪除每一件東西,直到一個右括號,對應於第一個左括號?

所以應該刪除整個dddd(d,s,d)如果你的光標停留在d,整個aaaaa[dddd(d,s,d)]如果從a和全if (aaaaa[dddd(d,s,d)] + bbbbbb[ssd])如果你開始在該行的起點開始。

原則上命令集M-d C-space M-C-f C-w將完成這項工作,但我尋找一個標準的解決方案。

回答

3

嘗試M-C-kkill-sexp)或M-z ]zap-to-char)。

0

我正在使用this question 中的代碼來完成您描述的任務。

這基本上是一個廣義的kill-sexp - 它會殺死 任何列表裏面的點。也適用於字符串。

1

smartparens-modehttps://github.com/Fuco1/smartparens或MELPA)知道如何處理用各種括號/括號/等括起來的表達式。它的行爲往往是語言特定的。舉例來說,如果你綁定

(define-key sp-keymap (kbd "C-M-k") 'sp-kill-sexp) 

那麼,如果你在你的表達式中的第(Ç-M-K會殺死一切,包括最後)。或看到這個c++ example。我意識到這不是你描述的確切行爲,但該軟件包有許多(模式特定的)調整配置選項。

作爲替代方案,常規的zap-up-to-charzap-to-char接受數字參數。我綁定zap-up-to-charM-z,所以,說C-u 2 M-z)殺死所有東西直到最後的)