emacs:将S-Expression放入戒指而不删除它

时间:2016-05-30 13:24:32

标签: emacs copy-paste kill-ring

我正在寻找一个命令,将一个S表达式放入杀戮戒指,而不是删除它。

以下方案可以解决问题,但在使用M-x kill-sexp时,表达式将被删除:

(foo (bar bam))
^
point here

3 个答案:

答案 0 :(得分:3)

没有单个和弦,但你可以做两个:

或者,您可以

如果您的缓冲区是只读的,则第一个命令将失败,但是 S表达式仍将被复制到kill-ring

答案 1 :(得分:1)

有很多方法可以做到这一点(例如,使用内置thing-at-point,或只是通过kill-sexp调用call-interactively并在之后恢复原始缓冲区内容。)

虽然稍微修改后的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)

答案 2 :(得分:0)

我建议安装smartparens,然后只使用sp-copy-sexp