将shell命令的输出插入emacs缓冲区

huw*_*uwr 37 emacs

我想设置一个键绑定来将日期插入缓冲区.我在我的.emacs文件中写了以下lisp .以date身份为例:

;;put the date                                                                  
(global-set-key
 (kbd "C-c C-d")
 (shell-command "date" (current-buffer))
)
Run Code Online (Sandbox Code Playgroud)

当我使用其他命令时,键绑定工作正常'next-line,但是当读取.emacs并将其保留shell-command*scratch*缓冲区时,它会将其放入缓冲区.

也许我需要使用shell-command-on-region.

Anu*_*pam 76

对于将任何shell命令输出插入当前缓冲区的一般情况,您可以使用内置键盘和弦:

C-u M-! <shell-command>
Run Code Online (Sandbox Code Playgroud)

它运行相同的shell-command功能,并将输出插回当前缓冲区中的点.

整个键击行程本身可以保存为宏(并可能分配给快捷方式),以便更容易地调用常见的shell命令.

  • 最好的。我的天啊。这立即使我的生活变得很棒。 (2认同)

huw*_*uwr 11

我的一位朋友在工作中帮助了我.

(defun put-the-date ()
  (interactive)
  (insert (shell-command-to-string "date")))

(global-set-key
 (kbd "C-c C-d")
 'put-the-date
 )
Run Code Online (Sandbox Code Playgroud)

  • 没有必要调用shell来获取可以在emacs中获得的东西:( insert(format-time-string"%Y-%m-%d%H:%M:%S")) (6认同)
  • `(global-set-key(kbd"Cc Cd")(lambda()(交互式)(insert(shell-command-to-string"date"))))`使用匿名函数,更加简洁. (4认同)
  • 谢谢,但我只是用它作为shell脚本的一个例子,它输出某种字符串...可能是"echo hi"或"ls"真的...... (3认同)
  • 对于邪恶模式的人来说: `(define-keyvil-normal-state-map (kbd "SPC f d") (lambda () (interactive) (insert (shell-command-to-string "date +%F_ %T"))))` (2认同)
  • @sjas 尽管额外的长度很小,但我实际上更喜欢使用单独的命令和键绑定。1) 这是内置函数和大多数包使用的模式。2) 浏览键映射(`Ch m` 或类似)将显示有用的概述,而不是匿名函数。3) 您可以在浏览可用功能时找到新命令,例如在“Mx”下使用选项卡完成时。 (2认同)