0

「..」を追加/削除するトグルが必要です (スペースがありますが、もっとはっきりさせることはできません) 文字列 (ポイント) の上のすべての行の前に。これが私の最善の策です:

(defun rst-comment-above (Point)
  (interactive "d")
  (save-excursion
    (goto-char 1)
    (cond

     ((numberp (get this-command 'state))
      ((replace-regexp "^\\.\\. " "" nil (point) (get this-command 'state)))
      (put this-command 'state ""))

     (t
     (replace-regexp "^" ".. " nil (point) Point)
     (put this-command 'state Point))
)))

初めて機能しますが、2回目は次のように述べています。

(invalid-function
 (replace-regexp "^\\.\\. " "" nil (point) (get this-command (quote state))))

編集

@ ユーザー 4815162342:

だから私は上記のことをコメントします:

上記のことをコメントします

次に、新しい行を挿入します。

新しい行を挿入します

次に、コメントを外したいのですが、次のようになります。

物事のコメントを外すと、私は得る

しかし、おそらくそれほど重要ではありません。私は通常、コメント欄には何も入力しません。私はただ問題に注意します。さらに重要なこと'stateは、指定されたファイルをセッション間で保存することです。実装するのは難しいですか?

4

2 に答える 2

1

このエラーは、 を呼び出す行の余分な括弧のセットから発生しますreplace-regexp。その行は次のようになります。

(replace-regexp "^\\.\\. " "" nil (point) (get this-command 'state))

コードには他にもいくつかの問題があります。

  1. ポイントの現在の値を格納することは、バッファに文字を追加するため、うまく機能しません。これにより、ポイントが前方に移動します。これにより、(上記の構文エラーが修正されると) 関数は ".." の最後のいくつかのインスタンスを失います。
    • 修正は、ポイント マーカーを保存することです。
  2. (point-min)1 から始まるバッファーをハードコーディングする代わりに使用する必要があります。そうしないと、バッファーのナローイングが有効なときにコードが機能しなくなります。
  3. 最後にreplace-regexp、ドキュメントに記載されているように、 は Lisp プログラムから呼び出されることを意図していません。

関数の改訂版は次のとおりです。

(defun rst-comment-above ()
  (interactive)
  (let ((pm (point-marker))
        (prev-marker (get this-command 'rst-prev-marker)))
    (save-excursion
      (goto-char (point-min))
      (cond ((null prev-marker)
             (while (< (point) pm)
               (insert "..")
               (forward-line 1))
             (put this-command 'rst-prev-marker pm))
            (t
             (while (< (point) prev-marker)
               (when (looking-at "^\\.\\.")
                 (replace-match ""))
               (forward-line 1))
             (put this-command 'rst-prev-marker nil))))))
于 2012-09-07T18:09:15.033 に答える
0

M-;in を使用しない理由はありますrst-modeか?

于 2012-09-08T20:46:16.087 に答える