10

C などのプログラミング モードで paredit を使用する場合、関数を呼び出そうとすると ( と入力すると、括弧の前にスペースが挿入され、次のようになります。

foo ()

paredit のソースを変更せずにスペースの挿入を無効にする方法はありますか?

4

3 に答える 3

12

さて、pareditが機能しているように見えるのは、構文テーブルをチェックして、単語/記号などの直後にペアを挿入しているかどうかを確認することです。この場合、スペースが強制的に挿入されます。その機能をオーバーライドする必要があります。これは、アドバイス、関数決定スペースの再定義、構文テーブルの変更など、さまざまな方法で実行できます。

私は簡単に試してみます:

(defun paredit-space-for-delimiter-p (endp delimiter)
  (and (not (if endp (eobp) (bobp)))
       (memq (char-syntax (if endp (char-after) (char-before)))
             (list ?\"  ;; REMOVED ?w ?_
                   (let ((matching (matching-paren delimiter)))
                     (and matching (char-syntax matching)))))))

これは明らかに、を使用するすべての場所に適用されますparedit。よりモード固有のものが必要な場合は、そのandステートメントにいくつかの条件を追加できます(例(and ... (memq major-mode '(c-mode lisp-mode))))。

だから...私は「ソース」を変更したと思いますが、同じことを1つのピースで行うことができますdefadvice...それはすべてelispなので、違いは最小限です。このタイプの動作を制御するための設定はないようです。

于 2009-05-27T03:36:21.463 に答える
5

見るparedit-space-for-delimiter-predicates

于 2011-02-14T17:53:02.503 に答える
4

そうですね、PareditはS式で構築された言語を編集するのに理想的です。クロージングパレンを自動的に挿入する方法が気に入った場合は、機能スケルトンペアを使用してください。

(setq skeleton-pair t)
(global-set-key "(" 'skeleton-pair-insert-maybe)
于 2009-05-27T07:17:57.603 に答える