В emacs я часто открываю несколько буферов оболочки и использую rename-buffer для их отслеживания. Иногда я случайно закрываю оболочку, нажимая слишком много ^ D, или нахожусь в системе, которая автоматически отключает неактивные оболочки. Есть ли способ запустить новую оболочку в том же буфере? Поскольку я переименовал буфер в командной оболочке, Mx shell запустит оболочку в новом буфере оболочки , а не в текущем буфере.
2 ответа
Вместо оболочки Mx запустите следующий код emacs lisp, используя M-:
(shell (current-buffer))
Это не идеально, но дает вам большую часть того, что вы хотите. Поместите этот код в ваш файл запуска .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>
, который не так хорош. Я думаю, что последний эффект можно устранить, посоветовав функцию shell
, чтобы она переключалась в буфер My Shell
до фактического запуска реальной функции shell
.