在Emacs中删除当前(非原子)s表达式

5
有没有一种简单的方法根据光标位置删除最小的非原子s表达式?我想把这个转换成("|"是光标)
(defun foo (bar)
  (if bar
      |789
    (+ 456 123)))

转换为这样

(defun foo (bar)
  |)

看起来这是一件非常有用的事情,但我在Paredit cheat sheet上没有找到相关的(一步)命令。

3个回答

4

我也没有找到预定义的命令。

不过,使用Emacs编写自己的命令非常容易。

例如:

(define-key global-map (kbd "C-c C-d") 
    (lambda () (interactive) (backward-up-list) (paredit-kill)))

6
我建议使用“C-M-u C-M-k”组合键代替这个原子命令。 - m2ym
@m2ym 非常感谢!我花了很多时间试图找到这个函数。由于某种原因,“paredit-backward-up”(绑定到“C-M-u”)在ParEdit参考卡中没有列出(至少不是在Google的首个结果中)。 - Jay

1

C-M-u在paredit 23中可以正确处理字符串,因此即使在字符串内部,`C-M-u C-M-k'也能正常工作。


0

假设光标不在数字789上,而是在字符串“Foo”的某个位置。

那么这个命令将失败。

这就是为什么ar-kill-parentized-atpt和相关扩展存在的原因。

http://launchpad.net/s-x-emacs-werkstatt/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接