我正在寻找一个命令,可以将S表达式放入kill环中,而不会将其删除。
下面的场景可以实现此操作,但是当使用M-x kill-sexp
时,该表达式将被删除:
(foo (bar bam))
^
point here
我正在寻找一个命令,可以将S表达式放入kill环中,而不会将其删除。
下面的场景可以实现此操作,但是当使用M-x kill-sexp
时,该表达式将被删除:
(foo (bar bam))
^
point here
没有单一的命令,但你可以这样做:
mark-sexp
kill-ring-save
或者你也可以这样做:
如果你的 buffer 是只读的,第一个命令会失败,但 S 表达式仍然会被复制到kill-ring
中。
有许多方法可以做到这一点(例如使用内置的thing-at-point
,或者只是通过call-interactively
调用kill-sexp
并在之后恢复原始缓冲区内容)。
作为稍微修改过的kill-sexp
,这非常容易实现。这就是我使用的代码:
(defun copy-sexp-as-kill (&optional arg)
"Save the sexp following point to the kill ring.
ARG has the same meaning as for `kill-sexp'."
(interactive "p")
(save-excursion
(let ((orig-point (point)))
(forward-sexp (or arg 1))
(kill-ring-save orig-point (point)))))
(global-set-key (kbd "M-K") #'copy-sexp-as-kill)
C-M-SPC
+M-w
应该可以工作。 - jkiiski