Lisps中的行式重构

时间:2015-03-01 14:45:55

标签: vim scheme

Scheme(例如在SICP书中)通常遵循此缩进模型:

(define (abs n)   
  (cond ((> n 0) n)
        ((< n 0) (- 0 n))
        (else 0)))

我发现很难用这种结构重构代码,因为在许多其他语言中,惯例是在不同的行上隔离模拟结构,例如:

if (n > 0) {
    return n;
} else if {
    return -n;
} else {
    return 0;
}

因此,可以通过删除第三行和第二行(例如,使用else的Vi)删除d2d

我想知道如果这些重构影响最后一行,其中包含)个字符,那么这些重构是如何有效地执行的呢?

2 个答案:

答案 0 :(得分:3)

  1. 转到该行。

  2. da(至&#34; d elete a(&#34;,结果

    (define (abs n)
      (cond ((> n 0) n)
            ((< n 0) (- 0 n))
            ))
    
  3. kJ向上移动一行并将此行加入下一行,从而产生

    (define (abs n)
      (cond ((> n 0) n)
            ((< n 0) (- 0 n))))
    
  4. 因此,对于您的示例,这将是Gda(kJ

    mini screencast

答案 1 :(得分:2)

我使用paredit从结构上编辑Lisp代码(这可以让你处理s表达式,而不是像线条那样可能有歧义的单位)。似乎有一个等效的vim versiongithub上的mirrored)我无法评论,因为我从未使用它。