2009-02-01 26 views
51

मैं विम और पायथन के बीच बहुत समय बर्बाद करता हूं। मुझे पाइथन से विम तक मैन्युअल रूप से कॉपी-पेस्ट करने के लिए बहुत धीमा लगता है और इसके विपरीत। एक अच्छा टूटा उदाहरण है:आप विम में पायथन का उपयोग कैसे कर सकते हैं?

%! Xrange (25) में i के लिए python; प्रिंट 6 * i \ n

आप विम में इस तरह के बदलाव कैसे कर सकते हैं? [हल]

[स्पष्टीकरण] मैं विम करने के लिए चीजें, मुद्रण दृश्यों, arithmetics ... की तरह की जरूरत है - चीजें मैं विम में नहीं कर सकते।

कोई इस बात विस्तार से बता सकते हैं [?]: "अपनी स्क्रिप्ट stdin से पढ़ सकते हैं दिया तर्ज पर सीधे संचालित करने के लिए (।,%, ...)।"

[आगे स्पष्टीकरण]

अगर मैं लाइनों 4,5, 6 और 7 के लिए 'नमस्ते' प्रिंट करना चाहते हैं, क्या गलत है:

: 4-7 अजगर -c "प्रिंट 'हैलो' '

डॉट। वर्तमान लाइन को संशोधित करता है।

:: 7,32,99 अजगर -c "प्रिंट 'हैलो' '

जाहिर है काम नहीं कर रहा मैं कई पंक्तियों 7, 32 और 99 पर प्रिंट कर सकते हैं। कैसे?

+1

इस एक सवाल है पर बफर में लिखा जाएगा और दुर्भाग्य से नहीं जब तक बफर में सभी लाइनों का मतलब है? –

+0

क्या आप कृपया विस्तार से बता सकते हैं, आप क्या करने की कोशिश कर रहे हैं? – Alex

उत्तर

164

अपने vim खिड़कियों में से किसी में, टाइप कुछ इस तरह:

for x in range(1,10): 
    print '-> %d' % x 

दिखने में (दृश्य मोड शुरू करने के लिए वी) इन दोनों रेखाओं का चयन करें, और निम्न लिखें:

:!python 

क्योंकि आप दबाया ':' दृश्य मोड में, इस तरह की तलाश में खत्म हो जाएगा:

:'<,'>!python 

हिट दर्ज करें और चयन print कथन के आउटपुट द्वारा प्रतिस्थापित किया गया है।

:vnoremap <f5> :!python<CR> 
+12

मैं वर्षों से विम और पायथन का उपयोग कर रहा हूं और फिर भी यह सुझाव सिर्फ मेरे दिमाग को उड़ा दिया। कोई विचार नहीं कि यह मेरे लिए कभी क्यों नहीं हुआ। – rhettg

+0

यह वास्तव में कमाल है। –

+3

असल में मुझे एहसास नहीं हुआ कि एचएल ने अपने प्रश्न पूछने तक इसे इतनी आसानी से किया जा सकता है और मुझे जवाब देना पड़ा ... –

5

आपके उदाहरण से, ऐसा प्रतीत होता है कि आप एक पायथन स्क्रिप्ट निष्पादित करना चाहते हैं और वर्तमान विम बफर में स्क्रिप्ट का आउटपुट दिखाई देता है। यदि यह सही है, तो आप विम में आदेश पंक्ति पर निम्न कर सकते हैं:

%!python -c "for i in xrange(25): print 6*i" 

python को -c विकल्प इसे चलाने के लिए एक स्क्रिप्ट देता है। हालांकि, आप इस तकनीक को केवल बहुत ही कम मामलों में उपयोगी पा सकते हैं, क्योंकि कुछ अन्य भाषाओं के विपरीत, पाइथन पूरी तरह से एक लाइन पर पूर्ण कार्यक्रम लिखने के लिए खुद को उधार नहीं देता है।

1

मुझे लगता है कि आप अभी -c ध्वज नहीं खो रहे हैं। उदाहरण के लिए:

:.!python -c "print 'hello'" 

आप चाहिए स्क्रिप्ट है कि आप लाइन चयन पर एक फिल्टर के रूप में कार्य करता है प्रदान करते हैं कि नहीं। यही है, आपकी लिपि stdin से सीधे दी गई लाइनों पर संचालित करने के लिए पढ़ सकती है (., %, ...)। सरलतम कार्यों से कहीं भी कुछ भी, और आप पाइथन कमांड को अपनी स्क्रिप्ट फ़ाइल में डालने से बेहतर होंगे।

6

कोई इस बात विस्तार से बता सकते हैं: "। अपनी स्क्रिप्ट stdin से पढ़ सकते हैं दी तर्ज पर सीधे संचालित करने के लिए (।,%, ...)" आप आसानी से एक मानचित्रण में बदल सकता है

एक आम उपयोग आपके खोल में उपलब्ध 'सॉर्ट' कमांड का उपयोग करके पाठ की रेखाओं को सॉर्ट करना है। उदाहरण के लिए, आप इस आदेश का उपयोग पूरी फ़ाइल सॉर्ट कर सकते हैं:

:%!sort 

या, आप कर सकते थे तरह सिर्फ उन्हें दृश्य मोड में चयन करके और फिर टाइप करके कुछ पंक्तियां:

:!sort 

आप लाइनों को सॉर्ट कर सकता है 5-10 इस आदेश का उपयोग:

:5,10!sort 

आप अपनी खुद की कमांड लाइन स्क्रिप्ट (यह मानते हुए आप ऐसा करने के लिए कैसे पता है), जो पाठ की तर्ज पराजयों लिख सकते हैं। यह इस तरह से काम करता है:

bash$ myreverse 'hello world!' 
!dlrow olleh 

आप इसे अपने खुले फ़ाइलों में से एक के लिए vim में ठीक उसी तरह आप sort इस्तेमाल किया में लागू हो सकते हैं:

:%!myreverse  <- all lines in your file are reversed 
+0

:%! मेरा रिम विम में मेरे लिए काम नहीं करता है। यह आउटपुट देता है:/bin/bash: myreverse: कमांड नहीं मिला –

+1

@ मासी: विचार यह है कि, यदि आपने 'myreverse' कमांड लिखा था, तो इस तरह आप इसे निष्पादित करेंगे। –

0

अगर मैं 'नमस्ते' प्रिंट करना चाहते हैं लाइन 4,5, 6 और 7 के लिए, क्या गलत है:

यदि आप अपनी फ़ाइल में यादृच्छिक रूप से चुने गए स्थानों में कुछ करना चाहते हैं, तो आप कीस्ट्रोक रिकॉर्डिंग और उन्हें फिर से चलाने के बेहतर हैं । पहली पंक्ति पर जाएं जिसे आप बदलना चाहते हैं, और पंजीकरण z में रिकॉर्डिंग शुरू करने के लिए qz दबाएं। जब आप समाप्त कर लें तो उस पंक्ति के लिए जो कुछ भी आप चाहते हैं उसे करें और q फिर से समाप्त करें। अगली पंक्ति पर जाएं जिसे आप बदलना चाहते हैं और मैक्रो को फिर से चलाने के लिए @z दबाएं।

0

आप अजगर दुभाषिया के साथ vim संकलन के बिना कुछ अजगर कॉल करना चाहते हैं (है कि आप अजगर में प्लग-इन लिख करने की अनुमति होगी, और यह भी Omnicomplete के लिए आवश्यक है वैसे भी) तो आप इस रूप में की कोशिश कर सकते हैं:

:.!python -c "import os; print os.getcwd()" 

यह आपको बताएगा कि आप ड्राइव (वर्तमान पथ) में कहां हैं।

आइए अब कुछ लाइनें संख्या, एक खाली फ़ाइल से शुरू तो हम परिणाम को आसानी से देख सकते हैं:

:.!python -c "for i in range(1,101): print i" 

(1 से vim संख्या लाइनें नहीं 0) अब हम सिर्फ प्रत्येक पंक्ति की संख्या है लाइन 100 तक प्रत्येक पंक्ति में।

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

print "hi" 

try: 
    while True: 
     i=raw_input() 
     print "this was:",i 
except EOFError: 
    print "bye" 

तो तुम, उदाहरण के लिए (कल्पना करें कि आप यह कहा जाता है कॉल कर सकते हैं "what.py"):

: 10,20 अजगर what.py

(नोट फ़ाइल नाम की उस टैब पूरा होने से काम करता है, तो आप यह वास्तव में रास्ते में है)

आप के रूप में सत्यापित कर सकते हैं देख सकते हैं, प्रत्येक इनपुट स्क्रिप्ट को मानक इनपुट के रूप में खिलाया जाता है। सबसे पहले यह "हाय" आउटपुट करता है, अंत में "अलविदा" और बीच में, आपके द्वारा आउटपुट की जाने वाली प्रत्येक पंक्ति के लिए "यह था:" प्लस लाइन। इस तरह आप लाइन-बाय-लाइन को संसाधित कर सकते हैं। ध्यान दें कि आप लाइन द्वारा प्रोसेसिंग लाइन की तुलना में अधिक जटिल चीजें कर सकते हैं, आप वास्तव में पिछली लाइनों पर विचार कर सकते हैं। ऐसी चीजों के लिए मैं sys आयात करना चाहता हूं और इसे इस तरह करता हूं:

import sys 

print "hello" 

for i in sys.stdin.readlines(): 
    i = i.rstrip("\n") # you can also prevent print from doing \n instead 
    print "here lyeth",i 

print "see you" 

आशा है कि मदद करता है।

+0

मुझे लगता है कि यह छोटा किया जा सकता है। मुझे काम करने की लंबी विधि नहीं मिली। –

0

मुझे लगता है कि आप वास्तव में क्या चाहते हैं here समझाया गया है।

1

आप, कोड निष्पादित कर सकते हैं कर्सर पर उत्पादन पढ़ सकते हैं और u के साथ खत्म करें, मान लीजिए कि आप पाइथन कोड निष्पादित कर रहे हैं। सरल और त्वरित।

:r !python % 

u 

मैं मानचित्रण और चयन करने में दृश्य मोड, too-much-php साथ की तरह खत्म हो गया यह पसंद है, क्योंकि यह आधार सरल रहता है!

+0

यदि आप एक टीएमपी बफर का उपयोग कर रहे हैं तो यह संभव नहीं है - आपको इसे पहले सहेजना है, फिर यह काम करता है - किसी भी मौके पर आप यह जानते हैं कि इस काम को टेम्परी बफर के लिए कैसे बनाया जाए? – serup

1

मैंने अभी निम्न मॉड्यूल लिखा है जो आपको पाइथन दुभाषिया में सीधे अस्थायी बफर संपादित करने देता है।

http://philipbjorge.github.com/EditREPL/

0

Windows पर, आप संपादन कर रहे हैं, तो अजगर स्क्रिप्ट, बस कार्य करें:

!start python my... 

और उपलब्ध फ़ाइल नाम के साथ चक्र के tab दबाते हैं, तो जब तक आप अपने मेल मिलता है:

!start python myscript.py 

यह एक नई cmd विंडो में चलाएगा।व्यक्तिगत रूप से मैं !start cmd करना पसंद करता हूं और वहां से पाइथन चलाता है, क्योंकि अंतिम त्रुटि संदेशों से डीबग करना आसान होता है।

:0,$!python 

आप एक कोई नाम नहीं बफर है जब तो आप '%' उपयोग नहीं कर सकते, इसलिए:

1

यदि आप एक नया [कोई नाम नहीं] बफर में अपने अजगर स्क्रिप्ट में लिखा है, तो आप निम्न का उपयोग कर सकते 0 के लिए की जरूरत, $ जो लाइन शून्य के साथ शुरू अंतिम पंक्ति

उत्पादन अंत

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

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