Emacs और ssh के साथ रिमोट फाइल खोलने का सबसे अच्छा तरीका क्या है


80

मैं रिमोट मशीन से जुड़ता हूं ssh user@192.168.1.5। जब मुझे दूरस्थ मशीन में एक फ़ाइल खोलने की आवश्यकता होती है, जैसे,

emacs /usr/share/nginx/html/index.html

और जो index.htmlशेल में फ़ाइल को खोलता है । मैंने देखा कि कुछ emacs कमांड काम करते हैं लेकिन अन्य काम नहीं करते हैं। उदाहरण के लिए, C-wकाम नहीं करता है; M-<काम नहीं करता। मैं इसे कैसे ठीक कर सकता हूं, और emacs और ssh के साथ काम करने का सबसे अच्छा तरीका क्या है?

मुझे यह सवाल मिला लेकिन इसने मुझे और भ्रमित कर दिया।


1
काम करने वाले आदेशों के कुछ उदाहरण क्या हैं? (कभी-कभी अलग-अलग कीबाइंडिंग दूरस्थ मशीन पर मौजूद होती हैं - रिमोट मशीन पर अपनी .emacs फ़ाइल की जाँच करें - और कभी-कभी एक पूरी कुंजी अलग तरीके से काम करती है - उदाहरण के लिए जीएनयू स्क्रीन डिफ़ॉल्ट रूप से Ctrl-A कमांड को अवशोषित करने से पहले प्राप्त कर सकती है।)
kbshimmyo

1
सी-स्पेस, सीएफ, सीजी काम
ज़ीनल

मुझे अब दूरस्थ मशीन में .emacs फ़ाइल नहीं मिल रही है, लेकिन मुझे पता है कि मैंने दूसरी मशीन में कोई नई कुंजी बाँध नहीं बनाई है
Zeynel

हां, मुझे यकीन नहीं है कि कीबाइंडिंग के इस सेट से क्या काम नहीं होगा। क्या emacs फ़ाइल को दूरस्थ सर्वर पर उसी मोड में खोलते हैं जैसे कि वह इसे स्थानीय रूप से खोलेगा (जहां सभी कमांड काम कर रहे हैं)? शायद यह एक सुराग दे सकता है - M-x describe-mode
kbshimmyo

क्या आप भी अपने स्थानीय मशीन पर emacs चलाते हैं? क्या कोई कारण है कि आप दूरस्थ emacs बनाम एक स्थानीय का उपयोग करना चाहते हैं?
कार्ल ग्रोनर

जवाबों:


157

मैं आमतौर पर एक स्थानीय Emacs उदाहरण से दूरस्थ फ़ाइलों को खोलने को प्राथमिकता देता हूं।

अपने स्थानीय मशीन पर Emacs चलाते समय , ssh के ऊपर एक दूरस्थ फ़ाइल खोलना, किसी भिन्न फ़ाइल को थोड़ा अलग वाक्यविन्यास के अलावा खोलने से ज्यादा अलग नहीं है ।

Ssh के लिए, आप टाइप कर सकते हैं C-x C-f। अब, उस मीनबफ़र में, जिसे आप टाइप करना चाहते हैं /ssh:user@host:/path/to/file(ध्यान दें कि टैब पूरा होने के बाद आप एक रास्ता लिखना शुरू कर देंगे। प्रमुख /चरित्र पर भी ध्यान दें )। यहां पूर्ण डॉक्स देखें ।

आपके उदाहरण में, यह होगा:

C-x C-f /ssh:user@192.168.1.5:/usr/share/nginx/html/index.html

अब आप अपने स्थानीय कॉन्फ़िगरेशन और किसी भी स्थापित पैकेज, आदि का उपयोग करते हुए Emacs में ssh पर दूरस्थ फ़ाइलों को संपादित कर सकते हैं ...


24
ओपी को यह जानने में रुचि हो सकती है कि यह कार्यक्षमता कहा जाता है: trampऔर यह उन सबसे उपयोगी चीजों में से एक है जिन्हें आप कभी भी उपयोग करेंगे। यह दूर से भी संकलन करता है!
दोपहर 12

यह महान काम करता है और सभी कमांड काम करते दिखाई देते हैं, लेकिन मैं देखता हूं कि यह मुझे संपादित नहीं करने देगा index.htmlक्योंकि यह कहता है कि बफर केवल-पढ़ने के लिए है। यदि मैं दूरस्थ कंप्यूटर पर खोलता हूं तो मैं उसी फ़ाइल को संपादित कर सकता हूं। वैसे, जब मैंने C-x C-f /ssh:user@host filenameइसके साथ फाइल खोली तो मुझसे पासवर्ड पूछा।
ज़ीनल

मैंने दस्तावेज़ निर्देशिका से एक और फ़ाइल की कोशिश की और मैं उस एक को समस्या के बिना संपादित कर सकता हूं।
ज़ीनल

क्या आप जानते हैं कि इसके साथ पोर्ट कैसे निर्दिष्ट करें?
फिलिप किर्कब्राइड

5
@PhilipKirkbride पूरा दस्तावेज वाक्यविन्यास है/method:user@host#port:filename
कार्ल ग्रोनर

28

बस ऊपर दिए गए उत्तर में जोड़ने के लिए, आप उन मशीनों के लिए शॉर्टकट लिख सकते हैं जिन्हें आप अक्सर उपयोग करते हैं:

(defun connect-remote ()
  (interactive)
  (dired "/user@192.168.1.5:/"))

इससे diredरिमोट मशीन पर बफर खुल जाएगा । आप इस बफ़र को तभी नेविगेट कर सकते हैं जब आप स्थानीय होंगे।

यदि आपने दूरस्थ मशीन के लिए ssh कीज़ लगाई हैं, तो आपको पासवर्ड दर्ज करने की भी आवश्यकता नहीं है।

यदि आपके पास दूरस्थ मशीनों का एक गुच्छा है, तो आप प्रत्येक फ़ंक्शन को कुछ पहचानने योग्य नाम दे सकते हैं, उदाहरण के लिए connect-cupcake, connect-kitkatऔर smexपूरा करने के लिए पैकेज का उपयोग करें ।


यह भी खूब रही। मैं इसे आजमाऊंगा। क्या आपके पास उस प्रश्न के लिए भी उत्तर है जो मैंने ऊपर टिप्पणी में पूछा था: /usr/share/nginx/html/index.htmlअगर मैं इसे रिमोट मशीन में खोलता हूं तो मैं इस फाइल को संपादित कर सकता हूं; लेकिन जब मैंने इसे ssh के साथ खोला, index.htmlतो केवल पढ़ने के लिए है। ऐसा क्यों है?
ज़ीनल

मैं अनुमान लगा रहा हूं कि आप रूट उपयोगकर्ता से नहीं जुड़ रहे हैं, और आमतौर पर केवल वह ही लिख सकता है /usr/share/
अबो-अबो

लेकिन मैं रूट उपयोगकर्ता के रूप में कैसे जुड़ूं? मैंने कुछ चीजों की कोशिश की, C-x C-f /sudo ssh:user@host filenameलेकिन यह काम नहीं करता है।
ज़ीनल

1
यह एक ऐसी समस्या है जिसे मैंने कुछ समय पहले सुलझाने का प्रयास किया था जिसमें कोई सफलता नहीं मिली। मैं रिमोट से कनेक्ट करने के लिए, या सुडो के रूप में स्थानीय से कनेक्ट करने के लिए ट्रम्प का उपयोग कर सकता हूं, लेकिन दोनों नहीं। वर्कअराउंड अपने आप को /usr/share/nginx/html/फोल्डर का मालिक बनाना है chown
अबो-अबो

मैंने फ़ाइल को खोला /etc/nginx/sites-available/example.com.confऔर उसे संपादित किया और उसे सहेज कर बंद कर दिया। अब मैंने इसे फिर से खोला, और इस बार मैं इसे संपादित नहीं कर सकता? मुझे लगता है कि इसे अनुमति के साथ कुछ करना होगा। क्या आप मुझे यह समझने में मदद कर सकते हैं कि ऐसा क्यों हो रहा है?
Zeynel

18

और "शॉर्टकट" के बारे में @ abo-abo की पोस्ट में जोड़ने के लिए -

Emacs बुकमार्क्स का उपयोग करें। जब आप किसी दूरस्थ फ़ाइल या निर्देशिका पर जाते हैं, तो सामान्य रूप से बुकमार्क बनाएं। तो बस उपयोग करेंC-x r b एक दूरस्थ बुकमार्क पर जाने के लिए करें, जिसका नाम आप प्रदान करते हैं (पूरा होने के साथ)।

यदि आप बुकमार्क + का उपयोग करते हैं, तो दूरस्थ बुकमार्क विशेष रूप से हाइलाइट किए जाते हैं *Bookmark List*, ताकि आप उन्हें अधिक आसानी से पहचान सकें। और दूरस्थ बुकमार्क जिन्हें suया sudo( root) द्वारा एक्सेस किया जाना चाहिए उन्हें अलग तरीके से हाइलाइट किया गया है।

यदि आप Dired + का उपयोग करते हैं, तो आप भी कई दूरस्थ फ़ाइलों या निर्देशिकाओं को बुकमार्क कर सकते हैं, Dired में उनकी दूरस्थ निर्देशिका पर जाकर, उन्हें चिह्नित करके और मार कर C-x b। बुकमार्क के नाम देने की आवश्यकता नहीं है; उन्हें फ़ाइलों के नाम पर रखा गया है। यहां तक ​​कि अगर आप दूरस्थ फाइलों पर नेविगेट करने के लिए उन बुकमार्क का उपयोग कभी नहीं करते हैं, तो आप उन्हें फ़ाइलों को व्यवस्थित करने के लिए बुकमार्क + टैग के साथ उपयोग कर सकते हैं और इस प्रकार उनके सबसेट पर काम कर सकते हैं।

यदि आप आइकनों का उपयोग करते हैं तो जब भी आप किसी बुकमार्क पर जाने के लिए कमांड का उपयोग करते हैं, तो आप पूर्ण होने वाले उम्मीदवारों को संकीर्ण कर सकते हैं जो पूरा होने से टकराने से दूरस्थ हैं C-M-@


10

मूल पोस्टर ने रूट उपयोगकर्ता के रूप में दूरस्थ फ़ाइलों को खोलने में रुचि व्यक्त की। यह कमांड के साथ किया जा सकता है:

C-x C-f /ssh:you@remotehost|sudo:remotehost:/path/to/file RET

अधिक दस्तावेज यहां देखे जा सकते हैं: https://www.emacswiki.org/emacs/TrampMode#toc14


3

एक साधारण उत्तर जो रिमोट मशीन पर केंद्रित है:

यदि मैं अपने सभी ईमेक को रिमोट मशीन पर काम करने की योजना बनाता हूं, तो मैं उपयोग करता हूं

ssh -X username@hostname

और फिर दूरस्थ सत्र में emacs चलाते हैं, मेरी स्थानीय मशीन पर प्रदर्शित होता है। यह एक पुराना प्रश्न है लेकिन मैं इसे पूर्णता के लिए फेंकना चाहता था। दी गई है कि कुछ xhost / X config मुद्दे हैं, लेकिन कई नेटवर्कों में यह बल्ले से सही काम करेगा!


2

Emacs के लिए SSH मोड वह है जो आप खोज रहे हैं।

एक बार जब आप इसे स्थापित करते हैं तो आप बस चलाते हैं

M-x ssh RET hostname RET

फिर यह आपके पासवर्ड के लिए आपको दो बार (कमांड लाइन के लिए, एक बार फ़ाइलों को लोड करने के लिए) संकेत देता है।

अधिकांश भाग के लिए आप इसे किसी अन्य शेल (गैर-संवादात्मक और कुछ मामूली अंतरों की तरह समझ सकते हैं, लेकिन यह ऐसा है)।

यह इस बात पर नज़र रखता है कि आप किस निर्देशिका में हैं, इसलिए जब आप निर्देशिका से कोई फ़ाइल खोलना चाहते हैं, तो आप देख रहे हैं कि यह स्वचालित रूप से सही निर्देशिका में शुरू होती है और आपको फ़ाइल नाम में प्रवेश करने की आवश्यकता होती है।

Emacs Wiki की अधिक जानकारी भी है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.