Câu trả lời:
C-u M-x shell sẽ làm điều đó.
Nó sẽ nhắc tên cho shell mới, chỉ cần nhấn return cho mặc định (sẽ giống như thế *shell*<2>
.
Cũng hoạt động với eshell.
Một mẹo khác, nếu bạn sử dụng eshell: giống như M-x eshellđưa bạn trở lại *eshell*
(thay vì bắt đầu một eshell mới), nếu bạn sử dụng một đối số tiền tố số, nó sẽ đưa bạn đến bộ đệm eshell đó. Ví dụ, C-3M-xeshellsẽ đưa bạn đến *eshell*<3>
. Đáng buồn thay nếu bạn sử dụng shell (chứ không phải eshell), thủ thuật này dường như không hoạt động (ít nhất là trong Emacs 24.0.50.1 của tôi.)
C-u
chạy lệnh universal-argument
. Đó là một cách để đưa một đối số vào lệnh tiếp theo. Bạn có thể đọc thêm về nó với C-h k C-u
( C-h k
chạy describe-key
, rất tiện dụng!)
C-h f eshell
( C-h f
chạy describe-function
) cho thấy hàm eshell
lấy một đối số tùy chọn. Trích dẫn: Một tiền tố số arg (như trong C-u 42 M-x eshell RET
) chuyển sang phiên có số đó, tạo nó nếu cần thiết. Một tiền tố nonnumeric arg có nghĩa là để tạo một phiên mới.
Nhìn vào MultiTerm , nó làm cho việc quản lý nhiều thiết bị đầu cuối trong Emacs dễ dàng hơn nhiều.
Nó cũng có thể hữu ích khi sử dụng giao diện giống như màn hình cho hệ vỏ của bạn. Tôi đã viết riêng của mình, nhưng có những người khác ở ngoài đó, như EmacsScreen .
Sau hơn bốn năm, tôi thấy rằng đôi khi một số người vẫn đang xem xét vấn đề này, vì vậy tôi sẽ xuất bản một chức năng nhanh mà tôi đã viết để tải một trình bao và hỏi tên của nó. Bằng cách đó, bạn có thể đặt tên cho một "tập tin sắp xếp" shell nếu nó được dành riêng để sắp xếp các tập tin và một "tổ ong" khác nếu nó dành riêng để chạy các truy vấn tổ ong. Bây giờ tôi sử dụng nó hàng ngày (trên emacs 24):
(defun create-shell ()
"creates a shell with a given name"
(interactive);; "Prompt\n shell name:")
(let ((shell-name (read-string "shell name: " nil)))
(shell (concat "*" shell-name "*"))))
Điều này sẽ tự động tạo một phiên bản shell mới trong bất kỳ bộ đệm nào bạn đang sử dụng; liên kết nó với MS hoặc đôi khi như thế và niềm vui tức thì:
(defun new-shell ()
(interactive)
(let (
(currentbuf (get-buffer-window (current-buffer)))
(newbuf (generate-new-buffer-name "*shell*"))
)
(generate-new-buffer newbuf)
(set-window-dedicated-p currentbuf nil)
(set-window-buffer currentbuf newbuf)
(shell newbuf)
)
)
Rất cám ơn các phils đã đề xuất viết lại bằng cách sử dụng let, mặc dù kết quả thậm chí còn là dấu ngoặc đơn khủng khiếp hơn ...: \
let
các biến nếu chúng được sử dụng cho mục đích địa phương. Vì bây giờ bạn có các giá trị toàn cầu cho currentbuf
và newbuf
.
Điều này sẽ mở một shell mới mỗi khi bạn gọi hàm và tự động đổi tên nó nếu cần. Điểm cộng được thêm vào là nếu bạn đang chỉnh sửa các tệp từ xa (dired / tramp ...), điều này sẽ mở một vỏ trên máy chủ từ xa và tự động đổi tên nó với tên máy chủ từ xa:
(defun ggshell (&optional buffer)
(interactive)
(let* (
(tramp-path (when (tramp-tramp-file-p default-directory)
(tramp-dissect-file-name default-directory)))
(host (tramp-file-name-real-host tramp-path))
(user (if (tramp-file-name-user tramp-path)
(format "%s@" (tramp-file-name-user tramp-path)) ""))
(new-buffer-nameA (format "*shell:%s*" host))
(new-buffer-nameB (generate-new-buffer-name new-buffer-nameA))
(currentbuf (get-buffer-window (current-buffer)))
)
(generate-new-buffer new-buffer-nameB)
(set-window-dedicated-p currentbuf nil)
(set-window-buffer currentbuf new-buffer-nameB)
(shell new-buffer-nameB)
))