क्या यह विम में किया जा सकता है?
मेरा क्या मतलब है: 'बैडजॉब' की खोज करना और 'गुडजोब' के स्थान पर निम्न प्रतिस्थापन करना
'badjob' -> 'goodjob' 'BadJob' -> 'GoodJob' 'badJob' -> 'goodJob' 'BADJOB' -> 'GOODJOB'
क्या यह विम में किया जा सकता है?
मेरा क्या मतलब है: 'बैडजॉब' की खोज करना और 'गुडजोब' के स्थान पर निम्न प्रतिस्थापन करना
'badjob' -> 'goodjob' 'BadJob' -> 'GoodJob' 'badJob' -> 'goodJob' 'BADJOB' -> 'GOODJOB'
जवाबों:
एबोलिड्स का उपयोग करें। रिम :
:%S/badjob/goodjob/g
BadJob
और मैं इसे बदलना चाहता GoodJob
हूं, तो मैं इसका उपयोग नहीं कर सकता %S/badjob/goodjob/g
। यह एक मैच का पता लगाने में विफल रहता है।
%S/BadJob/GoodJob/g
तो, Subvert कमांड मिश्रित-केस मोड में स्विच हो जाएगा और ओपी द्वारा दिए गए सभी सबस्टेशनों को करेगा।
मुझे नहीं पता कि यह किस तरह का समाधान है जिसकी आप तलाश कर रहे हैं ... लेकिन मैंने इसका उपयोग किया है: Keepcase.vim
वहाँ कोई समर्थन नहीं है तो विम में ...
यकीन है कि आप कर सकते हैं
:s/\cbad/\= strpart(submatch(0), 0 ,1) == toupper(strpart(submatch(0), 0, 1)) ? "GOOD" : "good"/
ps। मैं रख-रखाव का अनुमान लगा रहा हूँ। कुछ इसी तरह के तर्क का सामना करना पड़ता है :)
:set ignorecase
। 2. के बजाय Bad
द्वारा प्रतिस्थापित किया GOOD
जाएगा Good
। 3. job
प्रश्न के " " भाग को नजरअंदाज किया जाता है, इसलिए यह भी lambada
→ बदल देगा lamgooda
। मेरे जवाब में इन बगों और कुछ अन्य चीजों के लिए फ़िक्स और स्पष्टीकरण । (इसके अलावा LOLOWLs!)
आप इसे केवल पेस्ट कर सकते हैं और इसे अनुकूलित कर सकते हैं:
(बेशक, यदि आप समय-समय पर ऐसा करते हैं, तो आप इस राक्षसी के बजाय एक प्लगइन चाहते हैं। लेकिन कुछ लोगों के लिए जो जल्दी में हैं और केवल एक बार इसकी आवश्यकता है, यह एक त्वरित हैक है अपने चिपकाने की खुशी के लिए :)
:%s/\cbad\zejob/\= ( submatch(0)[0] is# toupper(submatch(0)[0]) ? 'G' : 'g' ) . ( submatch(0)[1] is# toupper(submatch(0)[1]) ? 'OOD' : 'ood' )
खोज पैटर्न के अलावा, आपको प्रतिस्थापन कोड में चार '
तारों को संपादित करना होगा '
: भागों को बोल्ड में संपादित करें :
:% s / \ c खराब \ ze जॉब / \
_ (सबमॉच (0) [0] # टॉपर (सबमैच (0) [0]) है? ' G ': ' g '))
(सबमैच (0) [1] # टॉपर है (सबमैच (0) [1])? ' OOD ': ' ood ')
चिपकाने के लिए इस 'नारंगी' संस्करण का उपयोग न करें, क्योंकि इसके लाइनब्रेक वर्ण भी कमांड को तोड़ देंगे।
/\ze
सकारात्मक लुकहैड को चिह्नित करने के लिए वीएम रेगेक्स सिंथैटिक शुगर है: इसके बाद के पैटर्न \ze
की जांच की जाती है, लेकिन प्रतिस्थापित नहीं किया जाता है।
is#
?? मुझे समझाने दो… (अगर दिलचस्पी है)
#
( ==#
और अन्य में भी ) केस सेंसिटिविटी को लागू करता है। अन्यथा, :set ignorecase
(जो मैं उपयोग करता हूं, क्योंकि यह उपयोगी के लिए आवश्यक है :set smartcase
), विम विचार करेगा 'a' == 'A'
!!
पागल के रूप में, हमें वास्तव में इसके लिए खाता होना चाहिए: क्योंकि यह उपयोगकर्ता-सेटिंग्स-निर्भर है, ==
तो NEVAR का उपयोग किया जाना चाहिए! (जहां छोड़कर वास्तव में वही होगा जो आप चाहते हैं।) मैं ==#
पूर्णांक की तुलना करते समय उपयोग करने की सिफारिश का भी पालन करूंगा : http://learnvimscriptthehardway.stevelosh.com/chapters/22.html#code-defensively
is#
इसके बजाय ==#
रक्षात्मक तरीके से कोडिंग करने का एक और तरीका है: यह प्रकार की सुरक्षा में सुधार करता है: http://google.github.io/styleguide/vimscriptguide.xml?showone=Type_checking#Type_checking
एक स्ट्रिंग शाब्दिक के खिलाफ तुलना करते समय इसका उपयोग किया जाना चाहिए।
'single-quoted'
इसके बजाय "double quoted"
तार एक और अच्छा अभ्यास हैं: http://google.github.io/styleguide/vimscriptguide.xml?showone=Strings#Strings
एचटी @ एफसी। - इस जवाब उनके बनाता जवाब , कुछ कमियों फिक्सिंग।
रखने की जगह प्लगइन का एक विकल्प स्मार्टकेस है - मूल मामले को रखते हुए शब्दों की जगह । (खराब रेटिंग से खुद को हतोत्साहित न करें।)
:%s/file\A\?size/\=SmartCase("LastModifiedTime")/ig
?
:SmartCase
कमांड का उपयोग कर सकते हैं । मैंने इसे अपने कांटे में बढ़ाया है । ध्यान दें कि इसके लिए एक निर्भरता के रूप में इंगो-लाइब्रेरी की आवश्यकता है ।