2009-11-05 12 views
12

में एक शब्द को उल्टा करें मैं विम में एक शब्द को कैसे उलट सकता हूं?विम

आपकी मदद के लिए धन्यवाद

शब्द => drow: एक regex या सामान्य मोड आदेशों, लेकिन अन्य तरीकों के साथ अधिमानतः स्वागत भी कर रहे हैं! पीएस: मैं विंडोज़ XP

पायथन मेरे विम में समर्थित है, लेकिन पर्ल नहीं है।

+0

मुझे यह फ़ंक्शन अक्सर दिखाई देता है। बिल्कुल: आपको इसकी आवश्यकता क्यों है? ;) – wishi

+2

हाय @ विशी_! मेरी प्रेमिका दिमाग में शब्दों को बहुत तेज़ कर सकती है और मैं इसे देखना चाहता हूं :-) – Jogusa

उत्तर

2

विम के अपने संस्करण का समर्थन करता है, तो आप कर सकते हैं vw\is या viw\is (कमांड लिखने से पहले शब्द के पहले अक्षर पर अपना कर्सर रखें) ... लेकिन मैं उस के साथ संगतता समस्याओं का एक बहुत कुछ किया है। सुनिश्चित नहीं है कि संकलित या चालू होना क्या है लेकिन यह कभी-कभी काम करता है।

संपादित:

\is है:

:<C-U>let [email protected]<CR> 
\ :let [email protected]"<CR> 
\ gv"ay :let @a=substitute(@a, '.\(.*\)\@=', '\[email protected][strlen(submatch(1))]', 'g')<CR> 
\ gvc<C-R>a<Esc> :let @a=old_reg_a<CR> 
\ :let @"=old_reg<CR> 

याद नहीं था वह कहाँ से आया है लेकिन एक Google खोज vim.wikia.com पर इस लेख आते हैं। जो एक ही चीज़ दिखाता है तो मुझे लगता है कि यह है। आप कुछ समय है, तो

nmap ,r :ReverseWord<CR> 
+0

हम्म, यह मेरे लिए काम नहीं कर रहा है, अगर आप "नक्शा" टाइप करते हैं, तो आपने मुझे क्या मैप किया है? – Benj

4

आप यह मानते हुए पर्ल समर्थन vim करने के लिए बनाया है, तो आप ऐसा कर सकते हैं:

command! ReverseWord call ReverseWord() 
function! ReverseWord() 
perl << EOF 
    $curword = VIM::Eval('expand("<cword>")'); 
    $reversed = reverse($curword); 
    VIM::Msg("$curword => $reversed"); 
    VIM::DoCommand("norm lbcw$reversed"); 
EOF 
endfun 

और संभवतः इसलिए की तरह एक कीस्ट्रोक है कि बाँध अपने हाथों पर, आप वर्णों को क्रमशः ट्रांसफर करके (xp) ...

+0

हम्म, बस एहसास हुआ कि अगर आप शब्द के पहले अक्षर पर हैं तो काम नहीं करता है, आपको दो और पत्र पर होना चाहिए। – Benj

+0

ठीक है, इसे ठीक किया और मेरा जवाब संपादित किया, मूल रूप से आवश्यक मानक एलबीसीडब्ल्यू बस बीसीडब्ल्यू – Benj

+0

यह मेरे लिए काम नहीं कर रहा है, शायद perl कोई समर्थित नहीं है। लेकिन पायथन समर्थित है! आपके प्रयास के लिए धन्यवाद। – Jogusa

3

मेरे पास पाइथन मेरे वीआईएम पर समर्थित नहीं है, लेकिन ऐसा लगता है कि इसे पायथन के साथ करना बहुत आसान होगा। This article कैसे विम में अजगर का उपयोग करने का एक अच्छा विवरण की तरह लगता है और मैं तुम्हें कुछ इस तरह करते हैं चाहते हैं अनुमान लगा रहा हूँ:

:python 'word'[::-1] 

लेख इंगित करता है कि परिणाम, स्थिति पट्टी में दिखाई देगा जो गैर होगा - अगर आप किसी दस्तावेज़ में स्ट्रिंग को प्रतिस्थापित करने का प्रयास कर रहे थे, लेकिन यदि आप सिर्फ यह देखना चाहते हैं कि आपकी प्रेमिका अपने सिर में तारों को ठीक से उलट रही है, तो यह ठीक होना चाहिए।

:echo join(reverse(split('hello', '.\zs')), '') 
olleh 

आप बफर में सभी शब्दों को बदलने के लिए चाहते हैं,

:%s/\(\<.\{-}\>\)/\=join(reverse(split(submatch(1), '.\zs')), '')/g 

यह पहली की एक सूची बनाकर काम करता है:

6

यहाँ एक और (pythonic) समाधान यह कैसे काम करता है के आधार पर शब्द में वर्ण, जो उलट है और शब्द बनाने के लिए वापस शामिल हो गए। विकल्प कमांड प्रत्येक शब्द को पाता है और फिर अभिव्यक्ति में शब्द को पास करता है और परिणाम को प्रतिस्थापन के रूप में उपयोग करता है।

1

ठीक है आप फिल्टर कमांड के माध्यम से लाइन को रिवर्स करने के लिए पाइथन का उपयोग कर सकते हैं।कहें कि आपने जो पाठ लिखा था वह था:

Python 

आप इसे जारी करके इसे उलट सकते हैं।

:1 ! python -c "print raw_input()[::-1]" 

और अपने पाठ बनने के लिए बदल दिया जाएगा:

nohtyP 

"1" में आदेश vi बताता अजगर बयान है जिसमें हम क्रियान्वित कर रहे हैं करने के लिए लाइन 1 भेजने के लिए: "प्रिंट raw_input() [:: - 1] "। तो अगर आप कुछ अन्य पंक्तियों को उलटना चाहते थे, तो आप उस पंक्ति संख्या को तर्क के रूप में भेज देंगे। पायथन कथन तब इनपुट की रेखा को उलट देता है।

0

यदि आपके पास rev स्थापित है (उदा। MSys या Cygwin के माध्यम से) तो यह वास्तव में यह मुश्किल नहीं है।

क्या आप रिवर्स और उसे फ़िल्टर (%! <cmd>) करना चाहते हैं यह: अपने खोल करने के लिए अपने चयन

:%! rev 

यह पाइप, जबकि यह एक आदेश पारित करने।