我在计算机科学课上,这门课要求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
来定制它。