在Lisp中强制Vim对齐参数



我在计算机科学课上,这门课要求Lisp风格是这样的:

(define append (as bs)
  (if (null? as)
      bs
      (cons (car as)
            (append (cdr as) bs))))

而不是像这样:

(define append (as bs)
  (if (null? as)
    bs
    (cons (car as)
          (append (cdr as) bs))))

即if分支应该对齐。是否有一种方法可以强制Vim这样做?

如果您希望Vim的Lisp模式将所有形式视为函数调用,以便多行表达式的项与第二个元素对齐,那么只需清除lispwords参数:

:set lispwords=

从您的示例中,您似乎确实希望分割define用缩进而不是对齐来处理。找出你想要缩进而不是对齐行为的表单集,并将该集合放入lispwords:

:set lispwords=define[,... whatever other symbols]

这可以根据自动加载的文件类型来完成。在你的.vimrc文件中,你可以有:

:au BufRead,BufNewFile *.scm set lispwords=define

暂时把它放在我的.vimrc中,如果我编辑一个新文件:

$ vim foo.scm

然后插入几行,它们会自动格式化成这样l

(define fun ()
  (if foo
      (then ...)
      (else ...)
~
~
~
:q!

我直接按回车;自动缩进开始了。Vim的配置已经将.scm文件与Scheme关联起来,并设置了Lisp模式。我们的au命令通过覆盖lispwords来定制它。

最新更新