M-;パーエディットモードに入る前に、現在の行をコメントアウトしたり、マークセットのある領域をコメントアウトしたりするために使用します。
しかし、pareditモードでは、手動でC-a挿入するか、前に行をマークしない限り、現在の行をコメントアウトできないようです。このモードでは、行の先頭と中央または最後に挿入するためです。 of lineは、コメントを終了する行を挿入します。;M-;M-;;;;
だから私の質問は、現在の行をよりエレガントな方法でコメントアウトする方法ですか?
paredit は行をコメントアウトするコマンドを提供していないと思うので、paredit を使用するかどうかに関係なく機能するヒントを共有します。
次のコードがあるとします。
(defun my-hi ()
(dotimes (_ 2)
(print "hello")
(print (+ 1
2))
(print "world"))
(print "the end"))
3 行目をコメントアウトする場合は、式を選択して を押しM-;ます。つまり、ポイントを式の前の空白に移動し、(print "hello")を押しC-M-SPCて式を選択し、 を押して式M-;をコメントアウトします。
(print (+ 1 2))たとえば、2 行をコメント アウトしたい場合、 2 行にまたがる式をコメント アウトしたい場合はどうすればよいでしょうか。同じです。ポイントを式の開始前の任意の空白に移動してから、 を押しC-M-SPC M-;ます。
式を含む行をコメントアウトしたい場合はどうすればよいでしょう(print "world")か? しかし、それは悪い考えです。代わりに、式のみをコメントアウトします(print "world")。どうやってするか?繰り返しますが、同じです。
(print (+ 1 2))ループ内の最初のステートメントを除くすべてのステートメントをコメント アウトしたい場合、つまりandをコメント アウトしたい場合はどうすればよいでしょう(print "hello")か? コメントアウトする最初の式の開始点の前にポイントを移動し、 をC-M-SPC 2 回押して 2 つの式を選択し、 を押しM-;ます。
式の選択 (行の選択とは対照的に) は安全であるだけでなく (かっこの不一致を導入しないという意味で)、より便利です。たとえば、dotimes フォームをどのようにコメントアウトしますか? を使用C-M-SPCして dotimes フォーム全体を選択する方が、5 行ずつ選択するよりも便利です。
ここでの話の教訓は、次の Vim の教訓に似ています。
Lisp 編集では、行や文字ではなく、式 (sexp) を操作するのがコツです。
より便利にするために、コマンドが連続して呼び出される回数または前置引数によって N が指定されるポイントに続く最初の N 個の式をコメント化するコマンドを定義することができます。または、ポイントに続く 1 つの式をコメント アウトし、次の式の先頭にポイントを移動するコマンド (存在する場合)。
入力するだけ;で、その行でコメントできるすべてのものをコメントアウトできます。(後続の終了区切り文字は次の行に移動されます。)
現在の行を本当にコメントアウトしたい場合は、 Cq と入力します。行頭に。
問題は、それがあなたが望んでいることはほとんどないということです。
空行または行末にコメントを付けようとする場合は、あるべき;場所でカーソルを使用してください。コード;をコメント アウトするときは、行ではなくs 式をコメント アウトすることを検討する必要があります。このようにして、括弧のバランスを保つことができます。Paredit は、このための便利なインターフェイスを提供します。
;キーは低レベルのフォームに使用でき、paredit によって自動的にバランスが調整されますが、もっと醜いと思います: (カーソルはorではあり|ません)#||#
(foo (bar | baz) quuz)
になります:
(foo (bar ; baz
) quuz)
しかし
|(blah bla bl a)
エラーが発生します。
SLIME がインストールされている場合は、バランスの取れた括弧を維持しながらslime-insert-balanced-commentsコメントを挿入することができます。このコメントはたまたま and を使用した読み取りマクロです。への歓迎は常にありますが、それはそれらをアンバランスにします。パーディットの要点は、それらのバランスを保つことです。#||#C-q ;
(|defun (blah) blah) -> #|(defun (blah) blah)|#
可能な限り低いレベルのフォームをコメントアウトします。
(foo (bar | fuux) duux) -> (foo #|(bar | fuux)|# duux)
デフォルトではキーにバインドされていないため、.emacs.elファイルにこれがあります。slime-insert-balanced-comments
(global-set-key (kbd "C-c ;") 'slime-insert-balanced-comments)