在Emacs中将某个东西插入到kill ring中

12

我想写一个函数,在当前缓冲区中插入文件名到kill ring中,以便我可以在另一个窗口的终端中粘贴它。如何编程将字符串插入到kill ring中?

(<SOME FUNCTION> (buffer-file-name))

有没有(内置)函数可以实现这个功能,或者我需要将想要的字符串插入缓冲区然后删除它?

我尝试了类似于这样的代码:

(defun path ()
  (interactive)
  (save-excursion
    (let ((begin (mark)))
      (insert (buffer-file-name))
      (kill-region begin (mark)))))

但是它不起作用。

1个回答

22

有一个相应的函数可以完成这个任务:

(defun copy-buffer-name ()
  (interactive)
  (kill-new (buffer-file-name)))

1
你可能更喜欢使用“buffer-name”而不是“buffer-file-name”。因为有些缓冲区与文件无关。 - yves Baumes
@yvesBaumes buffer-file-name很好,因为我只需要获取文件名。 - jcubic
2
@jcubic请注意,(buffer-file-name)可能为nil,这会导致kill-new发出错误信号。您应该使用(when (buffer-file-name) …)来保护表达式。 - user355252
2
@lunaryorn 好的,我的函数现在是:(let ((path (buffer-file-name))) (when path (kill-new path))) - jcubic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接