我试图从命令行自动缩进一个.lisp文件,利用vim+slimv来进行缩进。
我试着编写脚本:
vi -c 'call SlimvConnectSwank()' -c 'normal gg=G' -c 'wq' -c 'q!' temp.lisp但是swank服务器不会被查询来执行缩进,所以这只是将文件缩进到.lisp vim的默认值(如果slimv和服务器没有运行)。
我是否需要在调用之后添加某种延迟/等待-c命令才能连接到swank服务器?似乎整个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文件。
发布于 2012-07-05 16:54:47
整个过程是单线程的,所以不需要增加延迟,每个命令都应该在下一个命令执行之前完成。您可以通过以下命令验证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
https://stackoverflow.com/questions/11337986
复制相似问题