2009-05-11 15 views
34

मैंने कुछ दिनों पहले अपने मुख्य संपादक के रूप में emacs का उपयोग शुरू किया, और मैं आवश्यक सभी अनुकूलन एकत्र करने की प्रक्रिया में हूं।Emacs के साथ दूरस्थ विकास कैसे करें?

मुख्य उपयोग मैं इसे दे रहा हूँ एक दूरस्थ Linux मशीन पर एक सी परियोजना के विकास के लिए (RHEL 5) है। अब तक मैं सादा विम (केवल एक पाठ संपादक के रूप में) और खोल स्क्रिप्ट का एक गुच्छा का उपयोग कर रहा था, और एक दिन मैंने फैसला किया कि मैं emacs कोशिश करेंगे। अब तक मुझे यह पसंद है।

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

मैं आवारा के बारे में पता है, लेकिन है कि केवल दूरस्थ फ़ाइलें संपादित करता है के रूप में तक मुझे पता है। बड़ी बाधा रिमोट मशीन पर सिंगल कीस्ट्रोक के साथ शेल कमांड चला रही है (मैंने दूरस्थ मशीन के emacs पर कस्टम संकलन कमांड चलाने के लिए F5 को बाध्य किया है)।

कैसे आप एक ही Emacs कीस्ट्रोक के साथ एक दूरस्थ मशीन पर खोल आदेशों चला सकता हूँ? क्या आप किसी अन्य सुझाव को जानते हैं & पूर्ण रिमोट डेवलपमेंट करने के लिए चालें?

+0

आप एक्स-फ़ॉरवर्डिंग के साथ एसएसएच का उपयोग कर सकते हैं और अपने कंप्यूटर पर प्रदर्शित दूरस्थ मशीन पर Emacs चला सकते हैं। – Nifle

+4

Emacs 23.2 में "संकलन" जब एक आवारा बफर से चलाने के आदेश स्वचालित रूप से दूरस्थ है। – MarcH

उत्तर

10

जब दूरस्थ विकास कर रही है, मैं screen जो कई आभासी दूरस्थ कुंजी के एक जोड़े की प्रेस पर उपलब्ध टर्मिनलों प्रदान करता है का उपयोग करें। यह मेरे लिए अनिवार्य है। न केवल यह वर्चुअल टर्मिनल प्रदान करता है, लेकिन यदि आपका कनेक्शन किसी भी कारण से गिरता है तो आपका सत्र सर्वर पर संरक्षित है।

screen के साथ शुरू करने के बारे में अधिक जानकारी के लिए GNU Screen Survival Guide प्रश्न देखें।

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

+4

'tmux' भी एक लोकप्रिय, सक्रिय रूप से विकसित 'स्क्रीन' जैसी प्रोग्राम है। –

23

आवारा दूरस्थ मशीन (जिस पर फ़ाइलों रहते हैं) पर संकलन और डिबगिंग समर्थन करता है। यह स्वचालित और अपेक्षाकृत निर्बाध होना चाहिए। remote processes के लिए प्रलेखन देखें।

18

चिंता न करें। आप एक ही कीस्ट्रोक के साथ Emacs में कुछ चला सकते हैं। दूसरों तरीकों से आप सुंदर ढंग से आवारा साथ ऐसा कर सकते का उल्लेख किया है, लेकिन यदि आपको सूट नहीं करता है (जो भी कारण के लिए) आप भी बस अपने खुद के समारोह का उपयोग कर पकाना सकता है:

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


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

मान लिया जाये कि आप को चलाने के लिए नहीं करना चाहते हैं आपके रिमोट मशीन पर टर्मिनल मोड में emacs तो यह काफी आसान है। जैसा कि आप जानते हैं कि आप दूरस्थ फ़ाइलों को संपादित करने के लिए TRAMP का उपयोग कर सकते हैं। मैं बस संकलन-कमांड को 'ssh me @ remote "cd /पथ/से/रूट & &" "बनाते हैं और इसके साथ किया जाता है।

2

मैं सिर्फ रिमोट मशीन में SSH और बजाय आवारा का उपयोग करने का टर्मिनल मोड में Emacs चलाना शामिल है। ट्रैम्प वास्तव में धीमा है जब आप कम से कम मेरे अनुभव में धीमे होने की अपेक्षा नहीं करते हैं। मैंने यह भी अजीब तरीके से असफल देखा है, और यह हमेशा स्पष्ट नहीं होता है कि इसे कैसे "ठीक करें"। यदि आप एसएसएच करते हैं, तो आप मेन्यू इत्यादि जैसे एमएसीएस यूआई सामान का उपयोग नहीं कर पाएंगे, लेकिन चूंकि आप वीआई के लिए उपयोग किए जाते हैं जो आपके लिए कोई मुद्दा नहीं होना चाहिए। असल में, आप उन्हें बंद कर सकते हैं ताकि आपके एसएसएम एमएसीएस अनुभव आपके स्थानीय अनुभव (यदि स्थानीय! = टर्मिनल मोड) (1) के समान ही हो।

स्क्रीन का उपयोग करना उपयोगी हो सकता है यदि आप कनेक्शन ड्रॉप के मामले में अपने सत्र को संरक्षित करने की परवाह करते हैं - इसके अलावा आपको एमेक्स बफर के साथ वर्चुअल टर्मिनलों के समान कार्यक्षमता मिलती है। उदाहरण के लिए, आप कई शैल बफर खोल सकते हैं और Emacs बफर में विभिन्न खोल आदेश चला सकते हैं। मैं एसकप्लस के कई उदाहरण चलाने के लिए इसका उपयोग करता हूं (नाम बदलें-बफर का उपयोग उन्हें सभी अच्छे, दोस्ताना नाम देने के लिए करें)।

जब से तुम दूरस्थ मशीन में ssh'd रहे हैं, आप "दूरस्थ" खोल आदेशों चलाने के बारे में चिंता करने की जरूरत नहीं है।

दूसरी तरफ, मुझे यकीन नहीं है कि "मैं देखता हूं कि इमैक चलाने के लिए पर्यावरण की स्थापना करना एक लंबा रास्ता है"। यदि आपके पास स्रोत नियंत्रण है, तो यह छोटा होना चाहिए ... (मुझे यकीन है कि आपके पास एक अच्छा कारण है)।

(1) मेनू, उपकरण पट्टी और स्क्रॉल बार बंद कर दें:

(यदि (fboundp 'मेनू बार-मोड) (मेनू बार-मोड -1))

(अगर (fboundp 'उपकरण-बार-मोड) (टूल-बार-मोड -1))

((fboundp अगर' स्क्रॉल बार-मोड) (स्क्रॉल बार-मोड -1))

+0

मैं वर्तमान में इस तरह से विकास कर रहा हूं, लेकिन उदाहरण के लिए ऑनलाइन दस्तावेज देखने के लिए काम करने के लिए w3m सेट अप करने के लिए मुझे निर्भरताओं को स्थापित करने और हल करने के लिए आरपीएम की एक गुच्छा की आवश्यकता है, या सीडेट संकलित करें (कोई यम नहीं है)। विकास का एक हिस्सा हाल ही में प्रयुक्त सिस्टम पर इंस्टॉलर का परीक्षण कर रहा है, इसलिए हर अब और फिर सर्वर तैयार किया गया है और मुझे फिर से emcas इंस्टॉल करने की आवश्यकता है। या, मैं एक और सर्वर पर कुछ कोड बदलने की जरूरत है, और मैं भी Emacs स्थापित करने की आवश्यकता होगी। vim के साथ वहाँ कोई समस्या नहीं है, क्योंकि यह नहीं है "बॉक्स से बाहर" (कम से कम एक साधारण पाठ संपादक के रूप में)। – German

-2

दो सेंट: अगर बैंडविड्थ एक बड़ी चिंता नहीं है, मैं वीएनसी में एक दरार दूंगा।

5

ट्रे जैक्सन से अच्छा जवाब, लेकिन मैथ्यू फ्लैंचन के जवाब ने वास्तव में मुझे और मदद की।

मुझे TRAMP संकलन करने का कोई तरीका नहीं मिला, लेकिन गलती से मुझे remote-compile आदेश मिला।

अब मैं सिर्फ अपनी .emacs ये पंक्तियां जोड़ें:

(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) 

और कुछ भी करने से पहले, ControlMaster का उपयोग कर ssh कनेक्शन की स्थापना की और मैं पासवर्ड को लिखना नहीं है।

सारांश:

  • संपादन दूरस्थ फ़ाइलें: आवारा
  • एकाधिक टर्मिनलों बचत कहता है: स्क्रीन
  • परिभाषित Emacs कीबाइंडिंग दूरदराज के आदेश पर अमल करने के लिए: मैथ्यू Flaschen प्रतिक्रिया
  • रिमोट संकलन देखें: कमान कंट्रोलमास्टर
01 के साथ दूरस्थ-संकलन

मुझे लगता है कि रिमोट-डेवलपमेंट करने के लिए कुछ महत्वपूर्ण कार्रवाइयां शामिल हैं।

+0

आप नियमित रूप से "संकलन" आदेश का उपयोग कर सकते हैं: जब एक दूरस्थ बफर (कम से कम Emacs 23.2 में) से चला यह स्वचालित रूप से आवारा उपयोग करता है।मैंने "रिमोट-कंपाइल" की कोशिश की और यह बुरी तरह विफल रहा: शायद क्योंकि यह दो बार रिमोट करने की कोशिश की। – MarcH

+0

'rcompile.el (रिमोट-कंपाइल) 'Emacs 24.4 के बाद अप्रचलित बना दिया। उबंटू 'rcompile.el' पर निर्देशिका'/usr/share/emacs//lisp/अप्रचलित/'निर्देशिका में पाया जा सकता है। – Vivek

1

मैं आपके जैसी स्थिति के लिए पहले आवारा की कोशिश की है, लेकिन मैं भी यह अजीब तरीके में असफल, और सामान्य रूप से धीमी गति से मिल गया।

मैं अब Emacs उपयोग कर रहा हूँ फ़ाइलों को संपादित करने के लिए एक sshfs माउंट से अधिक रखा होगा। यह मेरे लिए बहुत अच्छा काम करता है।

(यह मानते हुए आप मेजबान .ssh/config में सही तरीके से सेट और एक पासवर्ड के बिना कनेक्ट करने के लिए सार्वजनिक कुंजी की स्थापना की है)

$ sshfs remote:dir localdir 

और संपादित के रूप में आप तब से पसंद दूरस्थ फाइल सिस्टम माउंट करने के लिए!

संकलन के लिए, अन्य उत्तरों देखें, वे इसे पूरी तरह से कवर करते हैं।

1

ट्रम्प के बारे में यह आपके द्वारा उपयोग किए जा रहे ट्रम्प संस्करण पर निर्भर हो सकता है।

personnally मैं डिफ़ॉल्ट आवारा पैकेज और plink के साथ समस्या का बहुत encoutering था के रूप में बैकएंड दूरस्थ मेजबान से कनेक्ट करने, तो मैं एक और अधिक हाल के संस्करण में आवारा उन्नत बनाया है और कई मुद्दों को हल।

दरअसल मैं रिमोट संकलन और ब्राउज़िंग निर्देशिकाओं के लिए एक लिनक्स (आरएच 5) तक पहुंचने वाली विंडोज मशीन पर हूं, कुछ फाइलें पढ़ने/लिखने, रिमोट मशीन पर काम करने के लिए ठीक काम करता है।

0

किसी भी चीज का उल्लेख नहीं किया गया है, रिमोट मशीन से emacs चला रहा है, आपके वर्तमान डिस्प्ले के अनुरूप वैध $ DISPLAY चर के साथ।

स्पष्ट रूप से आपको अपने स्थानीय प्रदर्शन के लिए एक एक्स सर्वर चलाया जाना चाहिए, लेकिन यह विंडोज़ पर भी एक बड़ा सौदा नहीं है [सिगविन में निर्मित एक्स सर्वर का उपयोग करें]।

यह आमतौर पर नेटवर्क विलंबता < 50ms की आवश्यकता होती है। यदि आप उस रिमोट बॉक्स को पिंग करते हैं और कुछ> 50ms प्राप्त करते हैं, तो आप इस दृष्टिकोण से निराश होंगे।

नीचे, महान काम करता है।

आपको एक्स पोर्ट को एसएसएच मानचित्र करना होगा, उस पर बहुत से दस्तावेज़ हैं।

0

क्या मैं के बारे में 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 

अब ESC-`रन संकलन, और ESC- ~ चलाता है/रिमोट/संकलन। यह आपको होस्टनाम के लिए पूछेगा, और फिर कमांड को पूर्व-पॉप्युलेट करेगा। दोनों संकलन समान इतिहास बफर साझा करते हैं।

यह बहुत आसान है। यह एक विशेषता यह है कि दशकों के लिए एक ही काम किया है का लाभ उठाता है, और यह काम करने के लिए किसी अन्य उठाने की आवश्यकता नहीं है - और यह सिर्फ एक ssh से अधिक पाठ है, तो यह बहुत संवेदनशील और लंबे समय तक या धीमी गति से या भीड़भाड़ लिंक पर कुशल होने जा रहा है। मैंने पाया है कि यह नेटवर्क क्रोध की मुट्ठी को थोड़ा और रोकता है।

संबंधित मुद्दे