我正在上一门计算机科学课,要求 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!
我只是按了 Enter 键;自动缩进启动。Vim 的配置已经将 .scm
文件与 Scheme 关联起来并设置 Lisp 模式。我们的 au 命令通过覆盖 lispwords 来自定义它。
关于vim - 强制 Vim 在 Lisp 中对齐参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39704805/