मैं विम में एक पंक्ति के अंत में ".w" मूल्यांकन का परिणाम कैसे डाल सकता हूं?


5

मैं Vim में Javascript (या अन्य कोड) की एक रेखा का मूल्यांकन करने में सक्षम होना चाहता हूं, और परिणाम पंक्ति के अंत में एक टिप्पणी में दिखाई देता है।

उदाहरण के लिए, अगर मेरे पास एक फ़ाइल है:

console.log(4 + 5);

और मेरा कर्सर उस लाइन पर है, और मैं कमांड का उपयोग करता हूं :.w !node -e, परिणाम " 9" नीचे बफर में दिखाई देगा। अगर मैं का उपयोग :. !node -e, पूरे लाइन, परिणाम से बदल दिया जाएगा 9

मैं इसके बजाय एक कमांड कैसे बना सकता हूं जो परिणाम को एक टिप्पणी में लाइन के अंत तक जोड़ देगा, जैसे:

console.log(4 + 5);    // 9

नोट का यह :rभी है कि अगली लाइन में जो भी पास होगा उसे प्रिंट करके इस्तेमाल करना होगा। कर्सर के नीचे की रेखा पर r !echo "This is text."" This is text." प्रविष्ट करेगा । हालांकि एक आदेश की तरह ...

:r ". !node -e"

... ". !node -e"एक आदेश के बजाय एक फ़ाइल के रूप में पढ़ने की कोशिश करेंगे; मैं वास्तव में इस व्यवहार को नहीं समझता, लेकिन यह चीजों को थोड़ा सहज बनाता है।

मैं अंतिम परिणाम को कुछ हद तक याद रखना चाहता हूं कि जिस तरह से एटम टेक्स्ट एडिटर हाइड्रोजन कर्नेल को संभालता है, कोड के बाईं ओर दिखाई देने वाले कोड इवल के परिणाम के साथ। वर्तमान लाइन का मूल्यांकन करने और परिणाम प्रदर्शित करने के लिए कीबाइंडिंग ( <C-Enter>या <F5>) बनाने की योजना है ।

जवाबों:


3

यदि आपकी रेखाएं ऐसी दिखती हैं: 4 + 5 = आप कुछ का उपयोग कर सकते हैं जैसे:

 : मानचित्र "_ay / = ^ Mo ^ [!! echo ^ Ra \ | bc ^ MkJ |
  1. _ ............... वास्तविक लाइन की शुरुआत करने के लिए कूदने के लिए
  2. "ay / = ^ M ... yank तक = बफ़र में a
  3. o ^ [ ........... एक नई खाली लाइन बनाएं
  4. !! .............. इस नई पंक्ति में परिणाम लिखने के लिए एक शेल प्रोग्राम शुरू करें
  5. ^ रा .......... कॉमैंड में बफर की सामग्री डालें: इको ^ रा \ | बीसी ^ एम
  6. k ………… .पहली पंक्ति में जाएं
  7. J .............. अगली लाइन (परिणाम) को aktual लाइन में मिलाते हैं
  8. शायद आप x से जुड़ने से रिक्त को हटाना चाहते हैं

मुझे आशा है कि यह वही है जो आप हैं।


अरे वाह, यह लगभग पूरी तरह से काम करता है! अब मुझे कोड का विश्लेषण करने के लिए इसे अनुकूलित करने का एक तरीका खोजने की जरूरत है। क्या लाइन के अंत तक इसे पढ़ने का कोई तरीका है, और फिर लाइन को इसके बजाय nodeया python3इसके लिए पाइप करें ? मैं एक बार स्वीकार किए गए उत्तर के रूप में सेट करूँगा, जब मैं यह पता लगाऊंगा कि यह कैसे करना है, क्योंकि यह तकनीकी रूप से मेरे प्रश्न का सटीक उत्तर नहीं देता है। उस ने कहा, यह बहुत करीब है!
डिप्लोमैटिकड्यूपेलर

इसे जोड़ने के लिए, मुझे लगता है कि आपके पास कमांड के पहले दो अक्षर हैं जो चारों ओर स्वैप किए गए हैं; यह होना चाहिए _"ay/...
diplomaticDeveloper

2

हॉर्स्ट के सुझाव के लिए धन्यवाद, मैं पार्स करने में सक्षम था कि किसी भी भाषा के साथ ऐसा करने के लिए विम कैसे प्राप्त करें, जिसमें "मूल्यांकन" विकल्प लाइन है। जावास्क्रिप्ट के लिए, मेरे द्वारा एक साथ रखी गई कमांड इस प्रकार है:

imap <F5> ^[_"ay$o//^[kJo^[!!node -e "^Ra"^MkJi
nmap <F5> _"ay$o//^[kJo^[!!node -e "^Ra"^MkJ

एक टूटने के लिए:

  1. के लिए INSERTमोड मानचित्रण, (भागने ^[) सामान्य मोड पर लौट आता है।
  2. _"ay$पूरी लाइन को रजिस्टर में रखता है a
  3. o//^[kJ एक टिप्पणी के लिए "//" जोड़ता है।
  4. o^[ एक और नई लाइन शुरू करता है।
  5. !!node -e "^Ra"^M Node.js के माध्यम से रजिस्टर (लाइन) चलाता है और वर्तमान लाइन पर परिणाम देता है।
  6. अंत में, kJइस नई लाइन को टिप्पणी बनने के लिए पहले तक खींचता है।
  7. ( INSERTमोड के लिए, iमोड NORMALको INSERTफिर से लौटाता है ।)

कुछ मामूली संपादन के साथ अजगर के लिए भी ऐसा ही किया जा सकता है:

imap <F5> ^[_"ay$o#^[kJo^[!!python -c "import math; ^Ra"^MkJi
nmap <F5> _"ay$o#^[kJo^[!!python -c "import math; ^Ra"^MkJ

इसके लिए, //टिप्पणी को पायथन के साथ बदल दिया गया है #। इसके अलावा, मैं स्वचालित रूप से mathमॉड्यूल को आयात करता हूं , क्योंकि यह उस तरह से त्वरित गणना के लिए बहुत उपयोगी हो सकता है।

मेरी सिफारिश है कि इनमें से प्रत्येक मैपिंग को अपनी संबंधित ~/.vim/ftplugin/<language>.vimफाइलों में रखें, और set ftplugin onअपने स्थान पर रखें .vimrc। यह मैपिंग को उस भाषा के आधार पर बदलने की अनुमति देता है जिस पर आप काम कर रहे हैं!

मुझे आशा है कि जो कोई भी Vim में संवादात्मक रूप से कोड चलाना चाहता है, वह इसे पा सकता है और संभवतः इस पर सुधार भी कर सकता है। एक विशाल "धन्यवाद!" इस सवाल का जवाब देने और इस छोटी सी परियोजना को शुरू करने के लिए होर्स्ट में जाता है !

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