16

Lispコードを編集するとき、次のようにトップレベルの定義を完全にコメントアウトすると便利な場合があります。

;(defun some-fn-which-is-broken (x)
;  ...)

...または、次のようにs式の一部のみをコメントアウトします。

(foo x
;    y
     z)

...次に、ファイルを再コンパイルして、REPLなどで何かをテストします。

paredit-modeが有効になっていると、これは機能しません。ポイントが下の最初の親の直前にある場合は、次のようになります。

(defun some-fn (x)
  ...)

セミコロンを入力すると、入力されるのはセミコロンと改行です。

;
(defun some-fn (x)
  ...)

s式の一部をコメントアウトするのと同じです。

(foo x
;    
     y
     z)

定義がすべて1行にある場合、これは機能すると思います。

;(defparameter *foo* 10)

...しかし、そうでなければ私はこれを行う方法を見つけることができません。Pareditは素晴らしいです、私は本当にそれを使い続けたいです。これを回避する方法を知っているLispers、またはEmacsLispを少し作成して次のようなものにバインドできるEmacsウィザードはいますparedit-comment-out-s-exprか?

本質的に同じことを達成するためのより多くのLispyまたはEmacsyの方法があり、再コンパイルするソースの一部をコメントアウトする場合は、遠慮なくそれらを提案してください!

4

4 に答える 4

34

セックス全体の最初の文字にポイントを置き、セックス全体に。のマークを付け、C-M-space発行M-;してコメントを付けます。必要に応じて、ソースコードも再フォーマットされ、マークしたsexpのみがコメントに含まれ、同じ行にあるものは何も含まれなくなります。

簡単なコマンドやマクロを簡単に作成して、次のことを実行できます。

(defunコメント-sexp()
  「その時点でsexpをコメントアウトしてください。」
  (相互の作用)
  (保存エクスカーション
    (mark-sexp)
    (paredit-comment-dwim)))
于 2010-11-26T21:01:10.620 に答える
11

補足:

#+およびリーダー マクロは、#-sexp をコメント アウトするのに非常に便利です。指定されたシンボルが にない/見つかった場合、次の SENSP を無視することができ*FEATURES*ます。にないシンボルを選択して、次のよう*FEATURES*に使用します。#+

#+nil
(defun foo ()
  ...)

これで、関数定義は無視されます ( が にある場合を除きNILますが*FEATURES*、これはあまりありそうにありません)。

于 2010-12-01T12:41:48.343 に答える
4

その場しのぎの手段として、C-q( quoted-insert) を使用して、モード関連の魔法をトリガーせずに任意の文字を挿入できます。たとえば、Java モードでは、括弧を入力すると現在の行が再インデントされますが、これは必ずしも私が望むものではありません。C-qそのような場合、インデントを維持するために括弧を挿入します。(または、より頻繁に、括弧を入力し、インデントの変更を観察し、呪い、元に戻し、 で再入力しC-qます。)

一般的なコメントについては、セミコロンを手動で入力するよりもM-;( ) を使用する方がおそらく簡単です。comment-dwim

于 2010-11-26T20:43:26.550 に答える
2

を使用C-M-SPC M-;して、S 式をマーク ( C-M-SPCfor mark-sexp) し、コメント化 ( M-;for comment-dwim) できます。

paredit 23 では、タイプ;するだけでは、必要のないものは何も押し出されません。したがって、2番目の例では正しいことを行います。z代わりにコメントアウトしたい場合はy、終了区切り文字だけを別の行にプッシュします。

于 2013-06-13T20:25:54.913 に答える