vim - 强制 Vim 在 Lisp 中对齐参数

标签 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 这样做?

最佳答案

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

相关文章:

lisp - 定义我自己的读取宏

functional-programming - 用于查找给定函数的列表的最小元素的 Racket 函数

scheme - 让 vs 定义延续中的用法

reference - 如何区分常量列表和动态创建的列表?

assembly - lisp 是如何用汇编语言实现的?

emacs - 为所有事件缓冲区重新加载 .emacs

linux - Vim(spf13) 保存时自动调试

vim - 如何从 Vim 内部发送转义序列?

vim - 如何取消映射 vim 上的插入键?

vim - 使用vim时如何停止SSH X11转发?