【发布时间】:2013-04-07 23:33:46
【问题描述】:
我想设置一个相当于标记整个缓冲区的函数,并运行C-u M-| 以提示输入命令,将缓冲区传递给命令并用输出替换缓冲区。然后可能将其设置为 shift-f5 或其他东西。
我只知道这个:
(defun shell-command-on-buffer ()
(interactive)
(mark-whole-buffer))
剩下的怎么办?
【问题讨论】:
我想设置一个相当于标记整个缓冲区的函数,并运行C-u M-| 以提示输入命令,将缓冲区传递给命令并用输出替换缓冲区。然后可能将其设置为 shift-f5 或其他东西。
我只知道这个:
(defun shell-command-on-buffer ()
(interactive)
(mark-whole-buffer))
剩下的怎么办?
【问题讨论】:
这对我有用:
(defun shell-command-on-buffer (command)
(interactive "sShell command on buffer: ")
(shell-command-on-region (point-min) (point-max) command t))
【讨论】:
shell-command-on-region 具有相同的 C-u 行为。编辑以更好地满足您的要求
-q),它对我有用。什么版本的emacs?
这个的优点是使用“shell 命令”minibuffer 历史而不是一般的 minibuffer 历史。
(defun shell-command-on-buffer ()
(interactive)
(shell-command-on-region (point-min) (point-max) (read-shell-command "Shell command on buffer: ") t))
【讨论】:
@killdash9 的答案的增量改进,即:
用 emacs 27.1 测试
(defun shell-command-on-buffer ()
(interactive)
(let ((line (line-number-at-pos)))
;; replace buffer with output of shell command
(shell-command-on-region (point-min) (point-max) (read-shell-command "Shell command on buffer: ") nil t)
;; restore cursor position
(goto-line line)
(recenter-top-bottom)))
【讨论】: