我想要toggler,它会添加/删除“..”(有一个空格 - 但我不能让它更明显)字符串在上面的每一行(点)之前。这是我最好的选择:
(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))
)))
它第一次起作用,但是第二次它说:
(invalid-function
(replace-regexp "^\\.\\. " "" nil (point) (get this-command (quote state))))
修改:
@ user4815162342:
所以我评论上面的内容:
然后我插入新行:
然后我想取消注释,我得到:
但可能它并不那么重要。我通常不会在评论区域输入任何内容。我只是注意到这个问题。更重要的是 - 在会话中存储给定文件的'state
。难以实施吗?
答案 0 :(得分:1)
错误来自您调用replace-regexp
的行上的一组额外括号。该行应该是:
(replace-regexp "^\\.\\. " "" nil (point) (get this-command 'state))
您的代码还有其他一些问题。
(point-min)
而不是对缓冲区进行硬编码
从缓冲区缩小开始,或者您的代码将无法工作
效果。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))))))
答案 1 :(得分:0)
您在M-;
中未使用rst-mode
的任何原因?