有时候我会看到人们参考文件名和行号来粘贴部分代码。像如何使用行+文件引用从emacs缓冲区复制/粘贴区域?
;; ----- line:3391 file: simple.el.gz -----;;;
(if (eq last-command 'kill-region)
(kill-append (filter-buffer-substring beg end) (< end beg))
(kill-new (filter-buffer-substring beg end)))
;; ----- line:3394 --------------------------;;;
东西这主要是有用的通过邮件对代码发送意见。我可以轻松地为自己包装一个简单的功能,但我相信有人已经以聪明而美丽的方式完成了这个任务。
谢谢。
[编辑]
由于此功能仅偶尔,并且仅对于一个复制/粘贴操作所需的,我结束了使用的替代解决方案由@thisirs提出的触发版本。
(defun kill-with-linenum (beg end)
(interactive "r")
(save-excursion
(goto-char end)
(skip-chars-backward "\n \t")
(setq end (point))
(let* ((chunk (buffer-substring beg end))
(chunk (concat
(format "╭──────── #%-d ─ %s ──\n│ "
(line-number-at-pos beg)
(or (buffer-file-name) (buffer-name))
)
(replace-regexp-in-string "\n" "\n│ " chunk)
(format "\n╰──────── #%-d ─"
(line-number-at-pos end)))))
(kill-new chunk)))
(deactivate-mark))
它是基于Unicode和产生这样的输出:
╭──────── #3557 ─ /usr/share/emacs/24.1.50/lisp/simple.el.gz ──
│ (if (eq this-command t)
│ (setq this-command 'yank))
│ nil)
╰──────── #3559 ─
你应该张贴您的代码回答你自己题。这对我很有效。谢谢! –
这是一个非常好的功能家伙! – sshaw