强制Vim在Lisp中对齐params

时间:2016-09-26 13:53:33

标签: vim scheme lisp

我是一个计算机科学课,要求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这样做?

1 个答案:

答案 0 :(得分:1)

如果您希望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

然后插入几行,它们会自动格式化为thisL

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

我只是按Enter键;自动缩进开始了.Vim的配置已经将.scm文件与Scheme相关联并设置了Lisp模式。我们的au命令通过覆盖lispwords来自定义。