2009-05-11 26 views
34

Tôi bắt đầu sử dụng emacs làm trình soạn thảo chính của mình cách đây vài ngày và tôi đang trong quá trình thu thập tất cả các tùy chỉnh tôi cần.Làm cách nào để phát triển từ xa với Emacs?

Cách sử dụng chính tôi đưa ra là để phát triển dự án C trên máy Linux từ xa (RHEL 5). Cho đến nay tôi đã sử dụng đồng bằng vim (chỉ như một trình soạn thảo văn bản) và một loạt các kịch bản shell, và một ngày tôi quyết định tôi sẽ cố gắng emacs. Cho đến nay tôi thích nó.

Nhưng như một nhược điểm, tôi thấy rằng việc thiết lập môi trường chạy các emacs là một chặng đường dài để đi và thay vì sử dụng nó trực tiếp trên máy phát triển (và thiết lập môi trường trên mọi máy tôi sử dụng) chỉ cần sử dụng nó từ máy tính xách tay của tôi và làm phát triển từ xa.

Tôi biết về TRAMP nhưng chỉ chỉnh sửa các tệp từ xa theo như tôi biết. Trở ngại lớn đang chạy các lệnh shell trên máy từ xa với một phím tắt (tôi đã ràng buộc F5 để chạy lệnh biên dịch tùy chỉnh trên các emacs của máy từ xa).

Làm thế nào để bạn chạy các lệnh shell trên máy từ xa bằng một lần nhấn phím emacs? Bạn có biết mẹo nào khác về các thủ thuật & để thực hiện phát triển từ xa đầy đủ không?

+0

Bạn có thể sử dụng ssh với x-forwarding và chạy Emacs trên máy từ xa được hiển thị trên máy tính của bạn. – Nifle

+4

Trong Emacs 23.2 lệnh "biên dịch" tự động điều khiển từ xa khi chạy từ bộ đệm TRAMP. – MarcH

Trả lời

10

Khi thực hiện phát triển từ xa, tôi sử dụng screen cung cấp nhiều thiết bị đầu cuối từ xa ảo có sẵn khi nhấn một vài phím. Điều này là không thể thiếu đối với tôi. Nó không chỉ cung cấp các thiết bị đầu cuối ảo, mà phiên của bạn được lưu trữ trên máy chủ nếu kết nối của bạn bị ngắt vì bất kỳ lý do gì.

Xem câu hỏi GNU Screen Survival Guide để biết thêm thông tin về cách bắt đầu với screen.

Tôi thường có một thiết bị đầu cuối mở cho các hoạt động kiểm soát nguồn, một để chỉnh sửa, một để biên dịch (tôi chỉ cần chuyển sang nó và nhấn UpArrow + Enter) và một để gỡ lỗi. Tùy thuộc vào môi trường và ứng dụng tôi đang làm việc, tôi có thể có nhiều hơn hoặc ít hơn thế này, nhưng đó là bố cục chung.

+4

'tmux' cũng là một chương trình giống như màn hình phổ biến, được phát triển tích cực. –

23

TRAMP hỗ trợ biên dịch và gỡ lỗi trên các máy từ xa (trên đó các tệp cư trú). Điều này sẽ tự động và tương đối liền mạch. Xem tài liệu cho remote processes.

18

Đừng lo lắng. Bạn có thể chạy mọi thứ trong Emacs bằng một lần nhấn phím. Những người khác đã lưu ý cách bạn có thể làm điều này thanh lịch với TRAMP, nhưng nếu điều đó không phù hợp (vì lý do gì), bạn có thể cũng chỉ nấu lên chức năng của riêng bạn sử dụng:

(defun arbitrary-remote-command() 
    (interactive) 
    (shell-command 
    "ssh [email protected] arbitrary-command")) 


(global-set-key (kbd "<f5>") 'arbitrary-remote-command) 
1

Giả sử bạn không muốn chạy emacs trong chế độ đầu cuối trên máy từ xa của bạn sau đó nó khá dễ dàng. Như bạn đã biết, bạn có thể sử dụng TRAMP để chỉnh sửa các tệp từ xa. Tôi chỉ cần thiết lập lệnh biên dịch thành 'ssh me @ remote' cd /path/to/root & & làm cho "'và được thực hiện với nó.

2

Tôi chỉ ssh vào máy từ xa và chạy các emac ở chế độ đầu cuối thay vì sử dụng TRAMP. TRAMP thực sự chậm khi bạn không mong đợi sự chậm chạp, ít nhất là trong kinh nghiệm của tôi. Tôi cũng thấy nó thất bại theo những cách kỳ lạ, và nó không phải luôn luôn rõ ràng như thế nào để "sửa chữa" nó. Nếu bạn ssh trong, bạn sẽ không thể sử dụng giao diện người dùng emacs UI, như các menu vv, nhưng kể từ khi bạn đang sử dụng để vi đó không phải là một vấn đề cho bạn. Trong thực tế, bạn chỉ có thể tắt chúng để trải nghiệm ssh emacs của bạn rất giống với trải nghiệm địa phương của bạn (nếu địa phương! = Chế độ đầu cuối) (1).

Sử dụng màn hình có thể hữu ích nếu bạn quan tâm đến việc bảo vệ phiên trong trường hợp kết nối bị ngắt - ngoài việc bạn nhận được chức năng tương tự như thiết bị đầu cuối ảo với bộ đệm emacs. Ví dụ, bạn có thể mở nhiều bộ đệm vỏ và chạy các lệnh shell khác nhau trong bộ đệm emacs. Tôi sử dụng điều này để chạy nhiều trường hợp sqlplus (sử dụng đổi tên bộ đệm để cung cấp cho họ tất cả các tên thân thiện, đẹp).

Vì bạn đang ssh'd vào máy từ xa, bạn không cần phải lo lắng về việc chạy lệnh "remote" shell.

Mặt khác, tôi không chắc chắn ý của bạn là gì "Tôi thấy rằng việc thiết lập môi trường để chạy các emacs là một chặng đường dài để đi". Nếu bạn có kiểm soát nguồn, điều này sẽ là tầm thường ... (Tôi đặt cược bạn có một lý do chính đáng).

(1) tắt menu, thanh công cụ và thanh cuộn:

(if (fboundp 'menu-bar-mode) (menu-bar-mode -1))

(if (fboundp 'công cụ-bar-mode) (công cụ-bar-mode -1))

(if (fboundp' di chuyển-bar-mode) (di chuyển-bar-mode -1))

+0

Tôi hiện đang phát triển theo cách này, nhưng ví dụ để thiết lập w3m để xem tài liệu trực tuyến, tôi cần một nhóm rpm để cài đặt và giải quyết các phụ thuộc, hoặc biên dịch cedet (không có yum). Một phần của quá trình phát triển đang thử nghiệm trình cài đặt trên một hệ thống đã được định dạng gần đây, vì vậy, mỗi khi máy chủ được định dạng và tôi cần phải cài đặt lại toàn bộ hệ thống. Hoặc, tôi cần thay đổi một số mã trên máy chủ khác và tôi cũng cần phải cài đặt các emac. Với vim không có vấn đề bởi vì nó có "ra khỏi hộp" (ít nhất là một trình soạn thảo văn bản đơn giản). – German

-2

Hai xu: nếu băng thông không phải là một mối quan tâm lớn, tôi sẽ đưa ra một vết nứt tại VNC.

5

Câu trả lời hay từ Trey Jackson, nhưng câu trả lời từ Matthew Flaschen thực sự đã giúp tôi nhiều hơn.

Tôi không thể tìm cách để nhận được TRAMP thực hiện việc biên dịch, nhưng vô tình tôi đã tìm thấy lệnh remote-compile.

Bây giờ tôi chỉ cần thêm những dòng này để emacs của tôi:

(setq remote-compile-user "root") 
(setq remote-compile-host "localhost -p 3000") ;This is just when tunneling 
(setq compile-command " cd /usr/src/nexus/traffic && ./builder.sh compile ; cat builder.log") 
(global-set-key (kbd "<f5>") 'remote-compile) 

Và trước khi làm bất cứ điều gì, thiết lập kết nối ssh sử dụng ControlMaster và tôi không cần phải gõ mật khẩu.

Tóm tắt:

  • Chỉnh sửa tập tin từ xa: TRAMP
  • Nhiều nhà ga quốc gia tiết kiệm: SCREEN
  • Xác định emacs keybindings để thực hiện lệnh từ xa: Xem Matthew Flaschen phản ứng
  • biên dịch từ xa: Lệnh biên dịch từ xa với ControlMaster

Tôi nghĩ rằng bao gồm một số hành động quan trọng để thực hiện phát triển từ xa.

+0

Bạn có thể sử dụng lệnh "biên dịch" thông thường: nó sẽ tự động sử dụng TRAMP khi chạy từ bộ đệm từ xa (ít nhất là trong Emacs 23.2).Tôi đã thử "biên dịch từ xa" và nó đã thất bại thảm hại: có lẽ bởi vì nó đã cố gắng điều khiển từ xa hai lần. – MarcH

+0

'rcompile.el (từ xa biên dịch)' đã lỗi thời kể từ khi Emacs 24.4. Trên Ubuntu 'rcompile.el' có thể được tìm thấy trong thư mục'/usr/share/emacs//lisp/obsolete/'. – Vivek

1

Tôi đã thử TRAMP trước đây cho một tình huống như của bạn, nhưng tôi cũng thấy nó không theo những cách kỳ lạ và chậm nói chung.

Tôi hiện đang sử dụng Emacs để chỉnh sửa các tệp được gắn trên một giá sshfs. Điều này làm việc rất tốt cho tôi.

Để gắn kết hệ thống tập tin từ xa (giả sử bạn có máy chủ được thiết lập đúng trong .ssh/config và thiết lập khóa công khai để kết nối mà không cần mật khẩu)

$ sshfs remote:dir localdir 

và chỉnh sửa theo ý muốn từ đó trở đi!

Để biên soạn, hãy xem các câu trả lời khác, chúng bao gồm đầy đủ.

1

Giới thiệu về tramp nó có thể phụ thuộc vào phiên bản tramp bạn đang sử dụng.

Cá nhân tôi đã đóng gói rất nhiều vấn đề với gói tramp mặc định và plink làm phụ trợ để kết nối với máy chủ từ xa, vì vậy tôi đã nâng cấp tramp lên phiên bản mới hơn và giải quyết nhiều vấn đề.

Thực ra tôi đang truy cập máy tính Windows (RH5) để biên dịch và duyệt thư mục từ xa, đọc/ghi một số tệp, biên dịch trên máy từ xa hoạt động tốt.

0

Một điều không ai đề cập đến là chạy các emac ra khỏi máy từ xa, với biến $ DISPLAY hợp lệ tương ứng với màn hình hiện tại của bạn.

Rõ ràng bạn phải chạy X Server cho màn hình cục bộ của bạn, nhưng đó không phải là vấn đề lớn ngay cả trên cửa sổ [sử dụng X Server được tích hợp vào Cygwin].

Điều này thường yêu cầu độ trễ mạng < 50ms. Nếu bạn ping hộp điều khiển từ xa đó và nhận thứ gì đó> 50ms, bạn sẽ thất vọng với cách tiếp cận này.

Dưới đây, hoạt động tuyệt vời.

Bạn sẽ cần phải có bản đồ SSH cổng X, có rất nhiều tài liệu trên đó.

0

Những gì tôi đã sử dụng từ khoảng 1994:

cat <<-EOF >> ~/.emacs 
(define-key global-map "\e`" 'compile) 
(define-key global-map "\e~" 'remote-compile) 
(require 'compile) 
(setq remote-shell-program "ssh") 
EOF 

Bây giờ ESC-'chạy biên dịch, và ESC- ~ chạy/từ xa/biên dịch. Nó sẽ hỏi bạn tên máy chủ, và sau đó điền trước lệnh. Cả hai bộ sưu tập đều chia sẻ cùng một bộ đệm lịch sử.

Thật dễ dàng. Nó thúc đẩy một tính năng hoạt động tương tự trong nhiều thập kỷ và không yêu cầu bất kỳ thao tác nâng cao nào khác hoạt động - và nó chỉ là văn bản trên ssh, vì vậy nó sẽ rất nhạy và hiệu quả trên các liên kết dài hoặc chậm hoặc tắc nghẽn. Tôi đã tìm thấy điều này ngăn chặn Fists of Network Rage nhiều hơn một chút.

Các vấn đề liên quan