paredit怎么删除半个括号?

用paredit有一段时间了,感觉这个插件还是非常不错的。

不过有一个问题一直困扰着我:

就是怎么删除半个括号?

有时候剪切的时候会不小心残留半个括号,这半个括号怎么删除?backspace键无效!

举个例子:

(define aaa 1) 然后我删除了define aaa 1),残留了一个( 这个时候怎么删掉这个( ?


另外还有一个问题就是:如果我的代码是这样:

(require "./my-lib.rkt)

这是由于剪的时候不小心多剪了一个",然后我想补上"是不行的,他会变成:

(require "./my-lib.rkt\")

感谢~~

你是怎么删除的?

我的情况(竖线是光标的位置):

  1. (define aaa 1)| 然后按 backspace 删除,不会删除任何字符,但是把光标移到括号内了: (define aaa 1|)
  2. 连续按 backspace ,就是正常地每次删除一个字符,直到剩下空括号: (|)
  3. 再按 backspace ,左右括号一起删除掉了

保留一个键,不绑定 paredit- 函数,例如 C-h

(foo))|

选中半个括号, 然后 Ctrl + W

4 个赞

C-u C-d 我记得应该可以,如果C-d是paredit的delete,现在用smartparens了,不太记得

1 个赞

嗯,这个我知道。

但有时候需要使用鼠标来进行剪切和粘贴(比如:剪一些东西到另外的IDE里),这时候会不小心剪到半个。。

嗯,选中,然后按backspace也可以。

但需要先选中,这就比较麻烦了。。

最好能更加智能一些,直接能按backspace删除那半个括号

-Q 查看下回车对应的是哪个命令,然后给它绑定一个按键呢

paredit有结构化编辑的功能,smartparens能替代paredit吗?

我本来也用paredit,但是某天写go的时候出了问题,折腾无果,就换了smartparens,我也不是重度用户,就用几个基本的命令,用起来感觉是一样。

paredit是用来编辑s表达式的,你怎么用来写go,这完全错了吧。

事实上可以写其他语言,我是先用的smartparens,后来又用的paredit,然后又用回smartparens。smartparens就是支持很多语言,看代码都看到专门为各种语言所做的拓展。所以我用paredit的时候也这么用,其实除了go,我写其他的也没问题,于是在写go之前我都没发现问题,就一直用的paredit,因为smartparens还挺臃肿的。最后出了问题,就回到smartparens。

用paredit大部分都是成对出现的,如果括号不匹配就没法智能删除。

因为写算法判断匹配比较容易,写算法纠正错误的匹配就比较麻烦了。

这种情况很少出现,临时选择一下没啥问题。临时选中删除其实很好的,我十几年都是这样用的,没啥问题

我试了下,paredit在lisp代码中,无论半个括号是前半个还是后半个,都是可以删除的,其他mode不能删我也碰到过,暂时就用大家上面说的workaround吧,lisp mode可以删其他不可以,显然是paredit的一个bug/missing feature。

C-u backspace可以用,感觉是相对比较方便的方案。