Позднее редактирование : Насколько я ценю положительные отзывы, ответ Юрты - это путь. И взлом Грега аккуратнее моего.
Я оставлю здесь все остальное, потому что это может чего-то стоить, но ...
M-x shell-command-on-region
, что по умолчанию связано с M-|
.
Я вижу, что это не совсем то, о чем просил Рохит. Использование C-h f shell-command-on-region
показывает, что желаемое поведение доступно в неинтерактивной версии команды (путем установки аргумента replace
не равным nil). Мы должны быть в состоянии написать оболочку для этого.
Попробуйте это (загрузите его в *scratch*
и запустите M-x eval-buffer
, если он работает, скопируйте его в файл .emacs):
(defun shell-command-on-region-replace (start end command)
"Run shell-command-on-region interactivly replacing the region in place"
(interactive (let (string)
(unless (mark)
(error "The mark is not set now, so there is no region"))
;; Do this before calling region-beginning
;; and region-end, in case subprocess output
;; relocates them while we are in the minibuffer.
;; call-interactively recognizes region-beginning and
;; region-end specially, leaving them in the history.
(setq string (read-from-minibuffer "Shell command on region: "
nil nil nil
'shell-command-history))
(list (region-beginning) (region-end)
string)))
(shell-command-on-region start end command t t)
)
И заметьте, как я сказал в комментариях, что это не очень истощающая вещь. Но я думаю, что это работает.
Для любых читателей, которые не знают, как выбрать регион:
- Переместите «точку» (текущую позицию курсора) в один конец области и используйте
C-space
для активации «отметки»
- Переместить точку на другой конец области
- Готово, вызовите команду