何时使用 paredit barf 命令

3

Paredit提供了“吞入”和“呕出”命令。我知道何时应该使用“吞入”命令,但不确定何时应该使用“呕出”命令。

假设我有以下代码:

(foo num)
(bar num)

我会这样写:

我会写成这样:

(let ((numb blah)))
(foo num)
(bar num)

然后 slurp 两次,得到这个结果:

(let ((numb blah))
  (foo num)
  (bar num))

一开始我认为相反的任务可能需要使用barf,但其实只需将点移动到(foo num)的开头,然后按下<M-up>键,这将运行命令paredit-splice-sexp-killing-backward并得到以下结果:

(foo num)
(bar num)

在哪些情况下使用barf命令会非常方便?

注意:当您多次重复使用slurp命令时,可以调用undo命令来取消其中的一些操作。


使用撤销功能来处理barf会影响撤销树。此外,拥有可逆操作也是很好的。我将slurp和barf绑定到><键上,因此非常方便。 - abo-abo
另外,考虑一下当你想要“取消合并”某些不是你最后一次编辑操作的内容,或者重构代码时。 - Chris
1个回答

4

所有Paredit社区成员普遍认为,切入和删除括号在此模式下是不可分割的。使用Paredit编写一些Lisp代码时,将需要这些操作。这更多是由于结构编辑的本质和Paredit对不平衡括号的厌恶,而非其他因素。

当不使用Paredit时,可以通过光标导航(或鼠标)来添加和删除括号。Paredit不允许用户以这种不良方式违反其括号规则,因此自然结论是Paredit用户必须进行切入和删除操作。

例如:

创建了一个代码块,一个if语句。

(when (|so bar fuux baz)
     (foo suux duux))

这个块需要使用 and 逻辑运算符来测试两个条件,而不是仅测试一个条件。M-( 可以用来包装,但它不会包装美味的 bar fuux baz 符号。

(when ((|so) bar fuux baz)
      (foo suux duux))

Slurp

(when ((|so bar fuux baz))
      (foo suux duux))

一次错误发生了,Baz 应该属于第二个条件块。barf
(when ((|so bar fuux) baz)
      (foo suux duux))

其余部分不包括 slurpage 或 barfage 的使用。
(when (and (|so bar fuux) baz)
      (foo suux duux))

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