3

コマンドラインから.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に接続する機会を与えていません。スワンク接続が別のスレッドで発生する場合は、これが当てはまる可能性があると思います。

考え/コメント/提案をいただければ幸いです。

ありがとう!

タマスはそれを手に入れました。それは(そして私はこれをチェックしました、両方とも実際に必要です;本当に:))それを機能させるのはsleepコマンドと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などの標準に自動インデントします。

1つのファイルに対して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 に答える