emacs: поместите S-Expression, чтобы убить кольцо, не удаляя его

Я ищу команду, чтобы поместить S-выражение в список уничтожений, не удаляя его.

Следующий сценарий будет делать то же самое, однако выражение будет удалено при использовании M-x kill-sexp:

(foo (bar bam))
^
point here

3 ответа

Там нет одного аккорда, но вы можете сделать два:

  • both CM-SPC and CM-@ run the command mark-sexp
  • Mw runs the command kill-ring-save

Кроме того, вы можете сделать

  • CMk runs the command kill-sexp
  • C-/ runs the command undo

If your buffer is read-only, the first command will fail, but the S-expression will still be copied into the kill-ring,

Есть много способов сделать это (например, с помощью встроенного 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)

Я рекомендую установить SmartParens, а затем просто с помощью sp-copy-sexp,

Другие вопросы по тегам