将 shell 命令的输出插入 emacs 缓冲区
Posted
技术标签:
【中文标题】将 shell 命令的输出插入 emacs 缓冲区【英文标题】:Insert the output of shell command into emacs buffer 【发布时间】:2012-09-06 02:37:36 【问题描述】:我想设置一个键绑定来将日期插入缓冲区。我在.emacs
文件中编写了以下 lisp。以date
为例:
;;put the date
(global-set-key
(kbd "C-c C-d")
(shell-command "date" (current-buffer))
)
当我使用'next-line
等其他命令时,键绑定可以正常工作,但shell-command
会在读取.emacs 时将其放入*scratch*
缓冲区并保留它。
也许我需要使用shell-command-on-region
。
【问题讨论】:
(current-buffer)
在您的 .emacs
运行时得到评估。您希望使用(shell-command "date" t)
将其插入到调用命令时的当前缓冲区中,或者将其封装在defun
中,以便在执行函数时对其进行评估。
【参考方案1】:
对于将 shell 命令的任何输出插入到当前缓冲区的一般情况,您可以使用内置键盘和弦:
C-u M-! <shell-command>
它运行相同的shell-command
函数,并将输出插入回当前缓冲区中的点。
整个按键本身可以保存为一个宏(也可能分配给一个快捷方式),以便于调用常用的 shell 命令。
【讨论】:
太棒了,尽管在某些情况下最好通过删除末尾的换行符来解决(例如在 ERC、rcirc 等中),在这种情况下转到行/输出的末尾(C-e)然后删除换行隐藏字符:C-d(此添加来自 Mickery Petersen 的 Mastering Emacs 站点)。 有史以来最好的。我的天啊。这立即让我的生活变得更加精彩。【参考方案2】:我的一个朋友在工作中帮助了我。
(defun put-the-date ()
(interactive)
(insert (shell-command-to-string "date")))
(global-set-key
(kbd "C-c C-d")
'put-the-date
)
【讨论】:
不需要调用shell来获取可以在emacs中获取的东西:(insert (format-time-string "%Y-%m-%d %H:%M:%S ")) 谢谢,但我只是将它用作输出某种字符串的 shell 脚本的示例......可能是“echo hi”或“ls”真的......跨度>(global-set-key (kbd "C-c C-d") (lambda () (interactive) (insert (shell-command-to-string "date"))))
使用匿名函数,更简洁。
对于那些邪恶模式的人:(define-key evil-normal-state-map (kbd "SPC f d") (lambda () (interactive) (insert (shell-command-to-string "date +%F_%T"))))
@sjas 我实际上更喜欢单独的命令和键绑定,尽管额外的长度很小。 1) 这是内置函数和大多数包使用的模式。 2) 浏览键盘映射(C-h m
或类似)将显示有用的概述,而不是匿名函数。 3)您可以在浏览可用功能时找到新命令,例如在M-x
下使用制表符补全时。以上是关于将 shell 命令的输出插入 emacs 缓冲区的主要内容,如果未能解决你的问题,请参考以下文章