Vim 从命令行自动缩进.lisp文件,并使用slimv进行缩进

Vim 从命令行自动缩进.lisp文件,并使用slimv进行缩进,vim,clojure,common-lisp,swank,slimv,Vim,Clojure,Common Lisp,Swank,Slimv,我试图从命令行自动缩进一个.lisp文件,利用vim+slimv进行缩进 我尝试编写脚本: vi -c 'call SlimvConnectSwank()' -c 'normal gg=G' -c 'wq' -c 'q!' temp.lisp 但是不会查询swank服务器来执行缩进,因此这只是将文件缩进到.lisp vim默认值(如果slimv和服务器未运行) 我是否需要在调用之后放置某种类型的delay/wait-c命令来连接到swank服务器?似乎整个vi过程结束得太快了,这并没有给swa

我试图从命令行自动缩进一个.lisp文件,利用vim+slimv进行缩进

我尝试编写脚本:

vi -c 'call SlimvConnectSwank()' -c 'normal gg=G' -c 'wq' -c 'q!' temp.lisp
但是不会查询swank服务器来执行缩进,因此这只是将文件缩进到.lisp vim默认值(如果slimv和服务器未运行)

我是否需要在调用之后放置某种类型的delay/wait-c命令来连接到swank服务器?似乎整个vi过程结束得太快了,这并没有给swank一个连接的机会。如果swank连接发生在一个单独的线程上,我想可能就是这种情况

感谢您的想法/意见/建议

谢谢

塔马斯明白了。它是(我检查了这一点,两者都是实际需要的;真的:))一个sleep命令和swank命令使它工作

我将其添加到我的.bashrc中,并将其别名为“ai”,以便可以轻松地从命令行缩进.lisp文件:

alias ai="vi \
        -c 'call SlimvConnectSwank()' \
        -c 'sleep 1' \
        -c 'call SlimvEval(['0'])' \
        -c 'normal gg=G' \
        -c 'wq' \
        -c 'q!'"
现在“ai temp.lisp”自动将temp.lisp缩进到slimv+vim+swank等标准


为自动缩进lisp文件的repo编写脚本的各种方法,一旦有bash命令为一个文件编写脚本。

整个过程是单线程的,因此不需要添加延迟,每个命令都应在下一个命令执行之前完成。您可以通过以下命令验证Slimv的缩进是否负责:

vi-c“调用SlimvConnectSwank()”-c“设置本地indentexpr?”temp.lisp

它应该打印
indentexpr=SlimvIndent(v:lnum)

我怀疑您的
temp.lisp
中有一些影响缩进的定义。首先,必须将这些定义告知swank服务器,否则swank服务器不知道,例如函数参数等。请记住:整个过程是动态的,运行时信息用于缩进表单

所以我认为首先需要评估整个缓冲区,然后再进行缩进。您可以使用以下命令:


vi-c“call SlimvConnectSwank()”-c“call SlimvEvalBuffer()”-c“normal gg=G”-c“wq”-c“q!”temp.lisp

嘿,塔马斯;服务器中已经加载了正确缩进表单所需的所有代码;同样需要澄清的是,服务器已经在运行;只是用函数调用连接。今晚我会再做一点实验,所以这是另外一件事。然后,您可以通过将
let g:swank_log=1
添加到
.vimrc
中来研究swank命令的顺序和时间。查找
:缩进更新
,可能Slimv在执行实际缩进后收到它太晚了。在这种情况下,插入与swank通信的任何命令可能足以强制接收
:缩进更新。例如,
vi-c“call SlimvConnectSwank()”-c“call SlimvEval(['0'])”-c“normal gg=g”-c“wq”-c“q!”temp.lisp
在连接后但缩进前计算
0