3

我正在尝试从命令行自动缩进 .lisp 文件,利用 vim+slimv 进行缩进。

我尝试编写脚本:

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

但是没有查询 swank 服务器进行缩进,所以这只是将文件缩进到 .lisp vim 默认值(如果 slimv 和服务器没有运行)。

我需要在调用连接到 swank 服务器之后放置某种延迟/等待 -c 命令吗?似乎整个 vi 进程关闭得太快了,并且没有给 swank 连接的机会。如果 swank 连接发生在单独的线程上,我想可能是这种情况。

想法/评论/建议表示赞赏。

谢谢!

塔马斯明白了。它是(我检查了这一点,实际上两者都是需要的;真的:))一个睡眠命令和 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 文件的存储库。

4

1 回答 1

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

于 2012-07-05T08:54:46.633 回答