Common Lispのvimで自動書式設定/自動インデントをカスタマイズする最適な方法を知りたいと思います。Common Lispのvimで自動書式設定/自動インデントをカスタマイズする最も良い方法
自動フォーマット(これは通常、コマンドモードで行ごとに '=='と入力することで行います)は、vimのベースのlisp言語でうまく動作します(例:defmacro、defun、lambda、if、with-output-to (例えば、マクロを使用して)新しい言語構造が定義されているときはいつでも、新しい構造の書式設定はしばしば私が望むものではないことがわかります。
例えば、ここではどのようにvimの形式「(標準Lispの構文)と」awhen(の一般的に使用される照応バージョンです;にawhen「ではないのLisp標準の一部)
(when 'this
(process 'this))
(awhen 'this
(process it))
私は希望を」自動フォーマット 'のようなときに。どのように私はこれを行うことができます任意のアイデア?
編集:Slimvのお勧めギリガンとTamas。テストとして、私はMacVimをダウンロードしました(これはターミナルのvimで動作する必要がありますが、それは別の問題です)、slimvをslimvのダウンロードを〜/ .vimにrsynchedし、MacVimを起動して.lispファイルをロードしました。
その後、私はデフォルトのlisp実行可能ファイルとコアファイルをロードしたlispサーバを起動しました(MacVimを使ってGUIを実行しました)。
*私のコアファイルには、私がよく使用する言語拡張機能(既に1つ)がロードされているため、すぐに正しい形式で書式設定されています。
私はこのソリューションが本当に好きです。 [1] vimに特定の関数を適切にインデントする方法を習得し、[2]定義した言語拡張ごとに明示的にコードを書く、[3]新しいコードを追加するたびにコードを更新する言語構造。代わりに、私はslimvを利用して私のフォーマットをしています。そしてslimvは、サーバセッションが使用しているlispコアにすでにロードされている限り、新しい言語拡張を「学ぶ」ことができます。かなり滑らか!
これは、特定のクラスの言語拡張でうまく機能することがわかりました。通常は、マクロとして定義され、本体のキーワードは&です。これはほとんどの場合、「正しいことをする」ようですが、私が使用するマクロは、まだ適切に自動フォーマットされていません。私は、マクロが他のどの言語よりもどのように書かれているか(非標準言語拡張)の問題である可能性が高いと言います。
このソリューションは、ほとんどの場合私にとってはうまく機能し、何もコード化(および保守)する必要はありませんでした。素晴らしいもの!
私はあなたがslimvが好きだとうれしいです。インデントの問題がある場合は、私に報告してください(私はslimvの作者です。私の電子メールアドレスはドキュメントにあります)。 –
Slimvの答えは、Common LispではないLisp方言の標準フォームをよりよくインデントしたい人にとってはあまり役に立ちません。 – Kaz