Pareditを使用して、LISP S-Expのすべてまたは一部をどのようにコメントしますか?

StackOverflow https://stackoverflow.com/questions/4288339

  •  28-09-2019
  •  | 
  •  

質問

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

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

...または、このようなS-Expressionの一部のみをコメントします。

(foo x
;    y
     z)

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

Paredit-Modeを有効にすると、これは機能しません。以下の最初のパレンの直前にポイントがある場合、これが起こることです。

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

そして、あなたはセミコロンを入力します、入力されるのはセミコロンと新しいラインです:

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

S-Expressionの一部をコメントすることも同じです。

(foo x
;    
     y
     z)

定義がすべて1行にある場合、これは次のとおりです。

;(defparameter *foo* 10)

...しかし、それ以外の場合は、これを行う方法がわかりません。パレディットは素晴らしいです、私は本当にそれを使い続けたいです。これを回避する方法を知っているリスパー、または少しのemacs lispをホイップして、 paredit-comment-out-s-expr?

本質的に同じことを達成するためのよりリスピーまたはemacsyな方法がある場合は、ソースの部分をコメントして再コンパイルしてください。

役に立ちましたか?

解決

sexp全体の最初のキャラクターにポイントを配置し、sexp全体にマークを付けます CMスペース, 、および問題 m-; コメントをするために。そうする必要がある場合、ソースコードも再フォーマットされ、マークしたsexpのみが同じ行にあるものはコメントにありません。

簡単に簡単にコマンドを作成したり、マクロを作成したりできます。

(defun comment-sexp ()
  "Comment out the sexp at point."
  (interactive)
  (save-excursion
    (mark-sexp)
    (paredit-comment-dwim)))

他のヒント

ただのサイドノート:

#+#- 読者のマクロは、sexpsをコメントするのにかなりいいです。与えられたシンボルがではない場合、次のsexpを無視することを許可します *FEATURES*. 。シンボルを選択しないでください *FEATURES*, 、そしてそれを使用します #+ このような:

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

これで、関数定義は無視されます( NIL 入っています *FEATURES*, 、それはそうではありません)。

StopGapメジャーとして、使用できます CQ (quoted-insert)モード関連の魔法をトリガーせずに任意の文字を挿入する。たとえば、Java-Modeでは、括弧を入力すると、現在のラインが並んでいます。そのような場合、括弧を挿入します CQ 私のくぼみを維持するため。 (より頻繁に、括弧を入力し、インデントの変化を観察し、呪い、元に戻し、再入力します CQ.)

一般的にコメントするには、おそらく使いやすいでしょう m-; (comment-dwim)セミコロンを手動で入力するのではなく。

使用できます C-M-SPC M-; S-Expressionをマークするには(C-M-SPC にとって mark-sexp)そしてそれをコメントします(M-; にとって comment-dwim).

Paredit 23では、入力するだけです ; 何も押しません。ラインから外れる必要はありません。したがって、2番目の例で正しいことをします。そして、あなたがコメントしたいなら z それ以外の y クロージングデリミッターのみを別の行に押し上げます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top