我是一个计算机科学课,要求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这样做?
答案 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
来自定义。