Emacs

2012-05-08 8 views
6

के भीतर से दूरस्थ एसएसएच कनेक्शन this सहित कई प्रश्न, Emacs के भीतर से एसएसएच कनेक्शन से संबंधित पहलुओं पर चर्चा करें। मुझे अपने प्रश्न का उत्तर नहीं मिला है: मैं Emacs के भीतर से रिमोट मशीन में कैसे जा सकता हूं?Emacs

मैं इमाक्स के भीतर से दूरस्थ मशीन पर एक फ़ाइल संपादित नहीं करना चाहता हूं। मुझे M-xshell से पता है जो मेरी स्थानीय मशीन पर एक खोल खोलता है और मुझे रिमोट मशीन पर एसएसएच पर फ़ाइल संपादित करने के लिए TRAMP का उपयोग करने के बारे में पता है। हालांकि, इनमें से कोई भी इस सवाल से संबंधित नहीं है।

(मतदान बंद करने के लिए करने के बजाय, शायद सवाल किसी अन्य साइट पर चले जाते हैं।)

संपादित करें: संबंधित चर्चा here

+0

दोनों 'एम-एक्स खोल' और ट्रम्प * डू * आपके प्रश्न से संबंधित हैं जैसा कि बताया गया है। तो कृपया समझदारी से समझाएं कि यह क्या नहीं है। मैं समझता हूं कि आप ट्रम्प की तुलना में अधिक कुछ करना चाहते हैं, लेकिन आप क्या करना चाहते हैं कि 'एम-एक्स शैल' आपको ऐसा करने नहीं देता है? – Stefan

+0

मैं 'एम-एक्स एसएसएच' या एसएसएच कनेक्शन बनाने के समान कुछ टाइप करना चाहता हूं, जैसे कि मैं सीधे डेटाबेस में कनेक्शन बनाने के लिए 'एम-एक्स एसक्यूएल-पोस्टग्रेस्क्ल' टाइप कर सकता हूं। 'एम-एक्स खोल' सिर्फ एक खोल खोलता है, जिसमें से मैं * एसएसएच, या जो कुछ भी कर सकता हूं। मैं पूछ रहा था कि क्या Emacs के भीतर से ssh * सीधे * का कोई तरीका है। – SabreWolfy

+0

आप वास्तव में एसएसएच पर क्या करना चाहते हैं जो रिमोट फाइलों को संपादित नहीं कर रहा है या रिमोट टर्मिनल खोल रहा है? – Tyler

उत्तर

9

सबसे पहले, मुझे एक देशी elisp ssh क्लाइंट से अनजान है (और कल्पना न करें कि एक लिखने के लिए प्रेरणा का एक बड़ा सौदा है), इसलिए आपको निश्चित रूप से बाहरी एसएसएच क्लाइंट प्रक्रिया के साथ बातचीत करने की आवश्यकता होगी।

जैसा कि आप ssh इंटरैक्टिव का उपयोग करना चाहते हैं, एसएसएच प्रक्रिया को कनेक्शन के स्थानीय पक्ष पर टर्मिनल की आवश्यकता होती है।

इसलिए प्रश्न बन जाता है: क्या Emacs एक टर्मिनल लागू करता है जिसके लिए एक एसएसएच प्रक्रिया संलग्न की जा सकती है?

उत्तर है: yes - term.el एक मजबूत टर्मिनल कार्यान्वयन प्रदान करता है, जिसके माध्यम से एसएसएच को बिना खोल के आवश्यकता के सीधे चलाया जा सकता है।

आप एम एक्सtermआरईटी आप एक प्रोग्राम के लिए प्रेरित किया जाएगा चलाते हैं। (यह एक खोल करने के लिए चूक, लेकिन यह निश्चित रूप से इस प्रक्रिया का एकमात्र प्रकार आप चला सकते हैं नहीं है।)

अज्ञात कारणों से, इंटरैक्टिव term (और ansi-term) कार्यों निर्दिष्ट कार्यक्रम है, जो renders करने के लिए तर्क गुजर का समर्थन नहीं करते यदि आप ssh [email protected] जैसे कुछ चलाने की कामना करते हैं तो उन्हें कम उपयोगी। आप इसके बजाय तर्कों को संभालने वाली एक स्क्रिप्ट निर्दिष्ट कर सकते हैं, लेकिन हम इसे elisp में भी प्रबंधित कर सकते हैं:

term फ़ंक्शन वास्तव में एक साधारण आवरण है जो प्रोग्राम शुरू करने के लिए make-term पर कॉल करता है और फिर उचित मोड सेट करता है। make-term प्रोग्राम तर्क स्वीकार करते हैं, term की परिभाषा को कॉपी करने और संशोधित करने के लिए यह काफी सरल है।

(defun my-ssh (user host port) 
    "Connect to a remote host by SSH." 
    (interactive "sUser: \nsHost: \nsPort (default 22): ") 
    (let* ((port (if (equal port "") "22" port)) 
     (switches (list host "-l" user "-p" port))) 
    (set-buffer (apply 'make-term "ssh" "ssh" nil switches)) 
    (term-mode) 
    (term-char-mode) 
    (switch-to-buffer "*ssh*"))) 

या शायद यह बेहतर है:

यहाँ एक बहुत ही सरल कार्यान्वयन है

(defun my-ssh (args) 
    "Connect to a remote host by SSH." 
    (interactive "sssh ") 
    (let ((switches (split-string-and-unquote args))) 
    (set-buffer (apply 'make-term "ssh" "ssh" nil switches)) 
    (term-mode) 
    (term-char-mode) 
    (switch-to-buffer "*ssh*"))) 

जाहिर है सुधार की गुंजाइश नहीं है, लेकिन मुझे लगता है कि काफी उपयोगी के रूप में है।

आपको यह सुनिश्चित करना चाहिए कि आप term-mode के quirks से परिचित हैं।देखें:

  • एम:(info "(emacs) Terminal emulator")आरईटी
  • एम:(info "(emacs) Terminal Mode")आरईटी
  • सी एचterm-modeआरईटी
+0

मैं पोर्ट निर्दिष्ट कैसे करूं? मैंने आपके उदाहरण में कुछ संशोधन किए हैं, लेकिन मुझे नहीं पता कि "-p पोर्ट" कहां निर्दिष्ट करना है। मेरे पास जानकारी पृष्ठ नहीं हैं, इसलिए मुझे उस जगह कहीं और खोजना होगा। – SabreWolfy

+0

मैंने एक पोर्ट तर्क जोड़ा है।आप Emacs कैसे स्थापित किया? जानकारी मैनुअल उपलब्ध नहीं है एक महत्वपूर्ण कमी है। – phils

+0

धन्यवाद। दोनों उदाहरण अब मेरे लिए काम करते हैं। – SabreWolfy

1

मुझे यकीन नहीं है कि मैं समझता हूं। M-x ansi-term खोलें और ssh [email protected] चलाएं?

+0

तो Emacs के पास एक शैल प्रोग्राम नहीं है जिसका हमें उपयोग करना चाहिए? समाधान केवल एक खोल बनाना है (यहां तक ​​कि "एम-एक्स खोल" के साथ) और फिर वहां से बस ssh? मैं इसे Emacs SQL मोड से तुलना कर रहा हूं जहां Emacs स्वयं रिमोट कनेक्शन बनाता है। – SabreWolfy

+0

एलिसप में लिखा गया एक खोल है, जिसे एशेल कहा जाता है, यदि आपका यही मतलब है। –

+1

सही, कई खोल कार्यान्वयन हैं, लेकिन AFAIK कोई एसएसएच ग्राहक कार्यान्वयन नहीं है। – Mario

2

यह पता चला है, वहाँ है कि आप क्या चाहते:

(setq rlogin-program "ssh") 
(setq rlogin-process-connection-type t) 

और फिर M-x rlogin RET <myhost> RET कि क्या करेंगे।

+0

मैं उपयोगकर्ता नाम, पासवर्ड और पोर्ट कैसे निर्दिष्ट करूं? न तो 'एम-एक्स rlogin आरईटी आरईटी' और न ही 'एम-एक्स rlogin आरईटी <उपयोगकर्ता नाम @ होस्ट: पोर्ट> आरईटी' काम किया। http://emacswiki.org/emacs/RloginMode उपयोगी नहीं था। – SabreWolfy

+0

वे काम नहीं करते हैं क्योंकि न तो 'ssh होस्ट उपयोगकर्ता नाम' और न ही 'ssh उपयोगकर्ता नाम @ होस्ट: पोर्ट' मान्य आमंत्रण हैं। आप 'उपयोगकर्ता नाम @ होस्ट-पी पोर्ट' या 'होस्ट -एल उपयोगकर्ता नाम-पोर्ट' का उपयोग कर सकते हैं। या '(setq rlogin-clear-args' ("-l" "उपयोगकर्ता नाम" "-p" "पोर्ट" का उपयोग करें)) '। आपको आम तौर पर एक बंदरगाह निर्दिष्ट करने की आवश्यकता नहीं होगी। 'सी-एच एफ rlogin' जांचें। चूंकि 'rlogin'' comint-mode' का उपयोग करता है, तो आप भी 'ansi-color-for-comint-mode-on' भी उपयोगी हो सकते हैं। – phils

+0

मुझे 'टर्म-चार-मोड 'के साथ' टर्म 'दृष्टिकोण मिल रहा है इससे थोड़ा अधिक ठोस। विशेष रूप से, दूरस्थ खोल कार्यों में टैब पूर्णता। जब गोले की बात आती है, तो 'कॉमिंट' दूरदराज के लोगों की तुलना में स्थानीय की ओर अधिक गहराई से दिखता है, जबकि 'टर्म' ऐसी कोई धारणा नहीं करता है। – phils

1

शायद ssh.el जो आप ढूंढ रहे हैं वह है। Ssh कमांड एसएएस के माध्यम से Emacs में रिमोट शैल बनाने के लिए एक एकल चरण प्रदान करता है, जिसमें उपयोगकर्ता नाम को प्राकृतिक तरीके से निर्दिष्ट करना और वांछित होने पर ट्रम्प निर्देशिका ट्रैकिंग सक्षम करना शामिल है।