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

时间:2012-07-05 04:50:22

标签: 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且服务器没有运行)。

在调用连接到swank服务器后,是否需要设置某种delay / wait -c命令?似乎整个vi进程的关闭速度太快了,并没有让swank有机会连接。如果swank连接发生在一个单独的线程上,我想可能就是这种情况。

赞赏我们的想法/意见/建议。

谢谢!

Tamas得到了它。这是(我检查了这两个,实际上都需要;真的:))一个睡眠命令和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等标准。

一旦您使用bash命令为一个文件执行此操作,可以使用各种方法对此脚本进行自动缩进lisp文件的回购。

1 个答案:

答案 0 :(得分:2)

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

vi -c "call SlimvConnectSwank()" -c "setlocal 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