您想要的直接实现是:
(defun copy-full-path-to-kill-ring ()
"copy buffer's full path to kill ring"
(interactive)
(when buffer-file-name
(kill-new (file-truename buffer-file-name))))
就是说,我发现能够获得迷你缓冲区中内容的完整路径非常有用,这就是我所使用的:
(define-key minibuffer-local-completion-map "\C-r" 'resolve-sym-link)
(defun resolve-sym-link ()
"Try to resolve symbolic links into true paths."
(interactive)
(beginning-of-line)
(let* ((file (buffer-substring (point)
(save-excursion (end-of-line) (point))))
(file-dir (file-name-directory file))
(file-true-dir (file-truename file-dir))
(file-name (file-name-nondirectory file)))
(delete-region (point) (save-excursion (end-of-line) (point)))
(insert (concat file-true-dir file-name))))
然后,如果我想在剪贴板中使用它,则只需删除行(C-a C-k)。但是我们可以轻松地在上面的命令中将真实名称复制到剪贴板,只需将最后一行更改为:
(insert (kill-new (concat file-true-dir file-name)))))
新的部分是'kill-new将字符串放入kill环的调用。
buffer-file-name是一个变量