我试图从命令行自动添加.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文件的回购。
答案 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