2011-10-09 33 views
13

मैं अपने आदर्श Haskell संपादन कार्यप्रवाह के बारे में सोच रहा था पर GHCi और चल hlint पुन: लोड:स्वचालित रूप से फ़ाइल अद्यतन

  • मैं तीन टर्मिनलों (विभाजन iterm2 उपयोग करते हुए) को खोलें।
  • टर्मिनल 1 हैकेल स्रोत फ़ाइलों को संपादित करने के लिए vim चलाता है।
  • टर्मिनल 2 स्वचालित रूप से बदली गई फ़ाइलों पर हॉलिंट चलाता है जब कभी भी मौजूदा निर्देशिका या उपनिर्देशिका अद्यतन में कोई फ़ाइल या
  • टर्मिनल 3 बदलती फ़ाइलों को स्वचालित रूप से लोड/पुनः लोड करने के लिए ghci चलाता है।

क्या किसी ने इस तरह कुछ स्थापित किया है? लक्ष्य है कि स्टाइल समस्याओं के लिए लगातार मेरा कोड देखें और ghci में फ़ाइल को सहेजने के अलावा कुछ भी करने के बिना, त्वरित परिवर्तनों के लिए ghci उपलब्ध हो।

मैं स्वचालन के लिए watchr जैसे कुछ का उपयोग करने की सोच रहा था।

+1

स्वचालित रूप से चल रहा है 'hlint' के लिए, मेरा उत्तर [यहां] को देखने के (http: // stackoverflow।com/प्रश्न/6323150/एसबीटी की तरह-सुविधाओं-इन-द-Haskell-निर्माण पारिस्थितिकी तंत्र/6324784 # 6324784)। जीएचसीआई थोड़ा सा ट्रिकियर है क्योंकि यह इंटरेक्टिव है। – hammar

+3

आईएमओ आप वास्तव में नहीं चाहते हैं कि ghci स्वचालित रूप से परिवर्तन पर पुनः लोड हो जाए, क्योंकि सभी बाइंडिंग खो जाती हैं। जैसे-जैसे मुझे टाइपिंग करते समय कभी-कभी 'सी-एस' मारा जाता है, मैं हमेशा अपने बारे में नाराज हूं, क्योंकि मुझे उन अस्थायी बाइंडिंग को फिर से लोड करना होगा। मैं उन्हें फाइल में भी रख सकता था, लेकिन मैं ऐसा करने के लिए बहुत आलसी हूं। फ़ाइल को दोबारा लोड करना उतना ही आसान है जितना [:], [आर], [प्रवेश] उस अनुक्रम में, तो क्या बात है? – fuz

+1

ऐसा क्यों नहीं है कि इमैक का आविष्कार किया गया था? :-) – pat

उत्तर

7

आप BufWrite autocommand का उपयोग कर vim में मनमाने ढंग से खोल कमांड चलाने कर सकते हैं:

उदाहरण के लिए, अपने ~/.vimrc में रखते:

au BufWrite *.hs !echo % >> ~/saves.txt 

यह echo <CURRENT FILENAME> >> ~/saves.txt हर बार जब आप एक haskell फ़ाइल को सहेजने चलेंगे।

तो बाहरी स्क्रिप्ट को ट्रिगर करने का यह एक आसान तरीका है।

अब आप अपने अन्य टर्मिनलों को रिले आदेशों के लिए कुछ iterm scripts लिख सकते हैं। की तरह कुछ:

tell my_ghci_terminal 
    write text ":r\n" 
end tell 
tell my_hlint_terminal 
    write text "<RUN HLINT ON WHATEVER>" 
end tell 

तो तुम उचित iterm स्क्रिप्ट को गति प्रदान करने vim autocommand का उपयोग करें (वर्तमान फ़ाइल नाम गुजर तो स्क्रिप्ट GHCi और hlint जो फ़ाइल पर कार्रवाई करने में बता सकते हैं) कर सकते हैं।

आप शायद इसे चालू और बंद करना चाहते हैं (आप इसे हर हैकेल फ़ाइल के लिए नहीं करना चाहते हैं), इसलिए एक विम फ़ंक्शन में कार्यक्षमता को लपेटने के बारे में सोचें जो आपको इसे टॉगल करने देता है (साथ ही तर्क सेट करता है इसके लिए कैसे आपके ghci और hlint टर्मिनल मिलना चाहिए)।

1

आप अपने संपादक के लिए एक स्क्रिप्ट लिखने का प्रयास कर सकते हैं जो ghci में हुक करता है और जब भी आप C-s पर हिट करते हैं तो ":r\n" भेजें। मुझे नहीं पता कि आप यह कैसे कर सकते हैं, लेकिन मैं काफी आशावादी हूं कि विम का उपयोग करने का एक तरीका है।

2

यह सुनिश्चित नहीं है कि आप अभी भी देख रहे हैं, लेकिन आपकी ऑटो-हलिंट समस्या का समाधान Syntastic है, जो स्वचालित रूप से आपकी फ़ाइल पर ह्लिंट या ghc-mod चलाता है और लाइनों पर हाइलाइट करता है/स्थानों में रखता है त्रुटि/चेतावनियां/शैली चेतावनी।

इसके अतिरिक्त, जब आप अपने कर्सर को उस पंक्ति पर ले जाते हैं, तो यह स्टेटस बार में संदेश/टिप्पणी प्रदर्शित करता है।

0

https://github.com/ndmitchell/ghcid फाइल परिवर्तनों पर ऑटो पुनः लोडिंग जीएचसीआई का समर्थन करता है।

उदाहरण के लिए: ghcid '--command=stack ghci' --test=main

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