В emacs я часто открываю несколько буферов оболочки и использую rename-buffer, чтобы отслеживать их. Иногда я непреднамеренно закрываю оболочку, нажимая слишком много ^D, или я работаю в системе, которая автоматически отключает неактивные оболочки. Есть ли способ запустить новую оболочку в том же буфере? Потому что я переименовал буфер изоболочкаввод Mx shell запустит оболочку в новомоболочкабуфер, а не текущий буфер.
решение1
Вместо оболочки Mx запустите следующий код emacs lisp, используя M-:
(shell (current-buffer))
решение2
Это не идеально, но это дает вам большую часть того, что вы хотите. Поместите этот код в ваш .emacs
файл запуска:
(defun my-shell-mode-hook ()
"Added to shell-mode-hook. This function runs every time function shell
starts a shell."
(rename-buffer "My Shell" 'unique))
(add-hook 'shell-mode-hook 'my-shell-mode-hook)
Можете свободно изменить строку "My Shell"
на какое-нибудь другое имя. Если вы сделаете это M-x shell RET
в буфере My Shell
, то новая оболочка запустится в том же буфере. К сожалению, если вы сделаете это в другом буфере, то вы получите новый буфер с именем My Shell<2>
, что не так красиво. Я думаю, что последний эффект можно устранить с помощьюконсультированиеfunction shell
, так что она переключается на буфер My Shell
перед фактическим запуском реальной shell
функции.