Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
强制Vim在Lisp中对齐参数_Vim_Scheme_Lisp - Fatal编程技术网

强制Vim在Lisp中对齐参数

强制Vim在Lisp中对齐参数,vim,scheme,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)))) 而不是像这样: (define app

我参加的计算机科学课程要求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))))
而不是像这样:

(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=
在exmaple中,您似乎确实希望使用缩进而不是对齐来处理拆分
define
。找出需要缩进而不是对齐行为的表单集,并将该精确集放入
lispwords

:set lispwords=define[,... whatever other symbols]
这可以根据自动加载的文件类型来完成。在
.vimrc
文件中,您可以拥有:

:au BufRead,BufNewFile *.scm set lispwords=define
暂时将其放入我的
.vimrc
后,如果我编辑了一个新文件:

$ vim foo.scm
然后再插入几行,它们会自动格式化成这样

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

我刚按了回车键;自动缩进开始了。Vim的配置已经将
.scm
文件与Scheme关联,并设置Lisp模式。我们的
au
命令通过重写
lispwords

来定制它,如果您真的想使用vim,这并不是很有帮助,但是您给出的示例是按照您的意愿使用Emacs的Scheme模式格式化的(默认配置)。@coredump谢谢您,但我不需要像这样的奇特功能——只是不同的缩进。另请参阅