2013-04-07 117 views
5

我想建立,做標記整個緩衝區,並運行C-u M-|提示輸入一個命令,管緩衝到命令和替換與輸出緩衝器的等效的功能。然後可能將它設置爲shift-f5或其他東西。Emacs的外殼命令上緩衝

我只得到儘可能的:

(defun shell-command-on-buffer() 
    (interactive) 
    (mark-whole-buffer)) 

我該怎麼辦的休息嗎?

回答

5

這個工作對我來說:

(defun shell-command-on-buffer (command) 
    (interactive "sShell command on buffer: ") 
    (shell-command-on-region (point-min) (point-max) command t)) 
+0

謝謝,我試過了。這爲我打開了一個新的緩衝區 - 理想情況下,我希望它將當前緩衝區替換爲C-u M- |確實。 – teppic 2013-04-08 00:29:50

+0

啊,對不起,我最初的建議與'shell-command-on-region'具有相同的C-u行爲。編輯以更好地回答您的請求 – brontitall 2013-04-08 00:46:25

+0

沒有運氣我害怕 - 它會提示我輸入命令,但會給出錯誤數量的參數。 – teppic 2013-04-08 00:58:22

4

這其中有使用,而不是一般的小緩衝區的歷史的「shell命令」小緩衝區的歷史優勢。

(defun shell-command-on-buffer() 
    (interactive) 
    (shell-command-on-region (point-min) (point-max) (read-shell-command "Shell command on buffer: ") t)) 
+1

請注意,read-shell-command是在23.1版本中引入GNU Emacs的。如果你需要兼容舊版本,那麼你不會想用這個,否則你將需要添加,試圖調用之前檢查讀殼命令的存在的代碼。 – 2014-07-15 20:16:14