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
,