2009-07-15 32 views
9

Tôi có xu hướng chạy vỏ của tôi trong các emacs, nhưng khi tôi sử dụng nó để ssh vào một máy tính khác, điều này sẽ phá vỡ hoàn thành tab. Có cách nào để sửa lỗi này?Vỏ từ xa Emacs

+0

bạn có thể xây dựng? Bạn có mong đợi hoàn thành tên tệp trên một đường dẫn cụ thể cho máy (ví dụ: đĩa cục bộ) không? Lệnh nói chung? –

Trả lời

9

Hãy thử:

M-x cd /hostname:/current/path/in/the/shell 

Điều đó sẽ thiết lập ange-ftp (hoặc lang thang), và sau đó hoàn thành TAB cho đường dẫn nên hoạt động đúng cho vỏ đó - cho đến khi bạn đăng nhập vào một máy tính khác nhau.

Bạn có thể thiết lập một bộ lọc quá trình tình báo thông tin để nhận ra khi bạn gõ ssh để làm điều đó cho bạn tự động, nhưng đó là khó khăn để có được quyền như nó phải trở lại khi bạn thoát khỏi phiên ssh, nhưng không bị lừa bởi các ứng dụng khác của exit.

Để có giải pháp tự động, tôi khuyên bạn nên tăng thêm the approach I personally use để giữ Emac được đồng bộ hóa với thư mục làm việc hiện tại của bộ đệm vỏ. Chỉ cần thêm một chút thông tin với tên máy chủ và sử dụng để đặt tên máy chủ và đường dẫn như được hiển thị ở trên.

1

Bạn có thể thử M-x ansi-term để lưu trữ trình bao nếu bạn nhận được hành vi không mong muốn bằng ánh xạ chính. Có nói rằng tôi không thể tái sản xuất các vấn đề mô tả của bạn trên thiết lập của bạn.

0

Tôi đã có một vấn đề tương tự tôi suy nghĩ và giải quyết nó bằng cách chỉnh sửa của tôi ~/.bash_login trên máy loại bỏ và thêm

export TERM=xterm 

tôi sử dụng OS X và có vấn đề khi kết nối với Linux (Debian Lenny)

2

trong một chủ đề khác, ai đó đã đề cập đến eshell mà tôi chưa bao giờ sử dụng nhưng tôi đã thử nó với SSH và tất cả các loại tích hợp tốt đẹp đang xảy ra. Đã đến lúc học eshell.

0

Tôi vừa viết một chức năng nhỏ để mở vỏ trên máy chủ từ xa. Cuộc gọi cd trước shell được hoàn thành tab.

Điều này có thể khác với bạn muốn, vì nó mở một vỏ mới thay vì ssh'ing trong trình bao cục bộ. Ngoài ra, bạn có thể xem xét việc hack các emacs Directory Tracking (hoặc xem ai khác có).

(defun remote-shell (&optional host) 
    "Open a remote shell to a host." 
    (interactive) 
    (with-temp-buffer 
    (let ((host (if host host (read-string "Host: ")))) 
     (cd (concat "/scp:" host ":")) 
     (shell (concat "*" host "*"))))) 

(defun myserver-shell() (interactive) (remote-shell "myserver")) 
0

M-x shell được gọi trong bộ đệm A sẽ chuyển sang bộ đệm vỏ B; thường là vỏ. Không ngạc nhiên khi nó tạo B nếu cần. Một tiền tố arg sẽ làm cho nó để yêu cầu tên B. Nếu A đang xem một cái gì đó trên một máy chủ từ xa thì vỏ sẽ được chạy trên máy chủ từ xa. Nhưng chỉ khi nó không thể tìm thấy một B. hiện tại Tại thời điểm đó tên tập tin hoàn thành sẽ làm việc.

Có một số lưu ý về cách sửa đổi nội dung này trong wiki emacs. Xem ví dụ hàm my-shell trong this section, sẽ mở rộng tên mặc định cho B để các tệp từ xa nhận được các shell từ xa. Tôi làm điều tương tự bằng cách advising the shell function.

Hoàn thành tự động tên tệp sẽ hoạt động tốt. Lệnh tự động hoàn thành? Ít hơn. Đối với tôi nó chặn emacs và sau đó không thực sự làm việc.

0

Tôi sử dụng dired để truy cập máy từ xa và mở vỏ ở đó.

Dưới đây là các chức năng tôi sử dụng, thực hiện và sửa đổi từ Tikhon Jelviss' emacs configuration:

(defun anr-shell (buffer) 
    "Opens a new shell buffer where the given buffer is located." 
    (interactive "sBuffer: ") 
    (pop-to-buffer (concat "*" buffer "*")) 
    (unless (eq major-mode 'shell-mode) 
    (dired buffer) 
    (shell buffer) 
    (sleep-for 0 200) 
    (delete-region (point-min) (point-max)) 
    (comint-simple-send (get-buffer-process (current-buffer)) 
         (concat "export PS1=\"\033[33m" buffer "\033[0m:\033[35m\\W\033[0m>\"")))) 

Ví dụ:

(anr-shell "/[email protected]#2222:/vagrant/") 
Các vấn đề liên quan