有时,我想将 Emacs 命令的结果(已在 echo 区域中回显)插入另一个缓冲区或另一个正在运行的 X 程序。所以,我想把它放在杀戮环上。有什么方便的方法可以做到这一点?
例如:我可以在 dired 模式下使用 shell 命令运行查询,例如:(!rpm -qf
以找出哪个包拥有目录列表中的选定文件),然后想将结果插入其他地方。
或者,另一个例子:如果我需要当前缓冲区的文件名(如在Emacs中是否有一个用户界面允许人们方便地“获取”缓冲区的文件名?),并且还没有任何预定义的命令,我可以至少做M-:(buffer-file-name)
然后使用这种通用方式将显示的结果复制到 kill-ring 以便稍后粘贴。(当然,我可以 eval (kill-new (buffer-file-name))
,但这里的这个例子是为了说明什么样的通用方法来抓取我正在寻找的回显结果。)
C-u
在M-:
或之前键入M-!
以插入结果而不是发送到回声区域。
为了让事情直接进入杀戮环,你需要涉足 Elisp。像这样的东西(未经测试):
;;; kill ring version of M-!
(defun shell-command-to-kill-ring (command)
(interactive
(list
(read-shell-command "Shell command: " nil nil
(let ((filename
(cond
(buffer-file-name)
((eq major-mode 'dired-mode)
(dired-get-filename nil t)))))
(and filename (file-relative-name filename))))
current-prefix-arg
shell-command-default-error-buffer))
(kill-new (shell-command-to-string command)))
;;; kill-ring version of M-:
(defun eval-expression-to-kill-ring ()
(interactive)
(call-interactively 'eval-expression)
(kill-new (car values)))
Run Code Online (Sandbox Code Playgroud)
消息区域中回显的所有消息都保存在*Messages*
缓冲区中,因此只需切换到缓冲区(C-h e
, view-echo-area-messages
)并选择您想要的内容即可。
如果你想获取不依赖于当前缓冲区的表达式的值,你也可以切换到缓冲区*scratch*
。输入您的表达式并按C-j
( eval-print-last-sexp
)。
归档时间: |
|
查看次数: |
2324 次 |
最近记录: |