2012-07-05 20 views
3

我试图从命令行自动缩进.lisp文件,利用vim + slimv来完成缩进。从命令行自动缩进一个.lisp文件,并使用slimv进行缩进

我试图脚本它:

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

但斯旺克服务器未查询到做缩进,所以这只是缩进.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!'" 

现在“人工智能temp.lisp”自动缩进温度。slp到slimv + vim + swank等标准。

各种各样的方法来脚本此自动缩进lisp文件的回购,一旦你有bash命令做一个文件。

回答

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

+0

Hey Tamas;所有需要正确缩进表单的代码已经加载到服务器中;还要清楚,服务器已经在运行;只是在与函数调用进行连接。我今天晚上再试验一下 –

+0

啊,所以这是别的。然后,您可以通过在'.vimrc'中添加'let g:swank_log = 1'来调查swank命令的顺序和时间。寻找':indentation-update',也许Slimv在实际缩进执行后收到它太晚了。在这种情况下,插入任何与swank通信的命令可能足以强制接收':indentation-update'。例如。 'vi -c“调用SlimvConnectSwank()”-c“调用SlimvEval(['0'])”-c“normal gg = G”-c“wq”-c“q!” temp.lisp'在连接之后但在缩进之前评估'0'。 –