विम का उपयोग करके चयन में प्रत्येक शब्द के पहले अक्षर को कैपिटलाइज़ करें


83

विम में, मुझे पता है कि हम ~एक एकल वर्ण को कैपिटल करने के लिए उपयोग कर सकते हैं (जैसा कि इस प्रश्न में उल्लेख किया गया है ), लेकिन क्या विम का उपयोग करके चयन में प्रत्येक शब्द के पहले अक्षर को कैपिटल करने का एक तरीका है?

उदाहरण के लिए, अगर मैं इससे बदलना चाहूंगा

hello world from stackoverflow

सेवा

Hello World From Stackoverflow

मुझे इसे कैसे करना चाहिए?


जवाबों:


173

आप निम्नलिखित प्रतिस्थापन का उपयोग कर सकते हैं:

s/\<./\u&/g
  • \< एक शब्द की शुरुआत से मेल खाता है
  • . एक शब्द के पहले चरित्र से मेल खाता है
  • \u प्रतिस्थापन स्ट्रिंग में निम्नलिखित चरित्र को अपरकेस करने के लिए विम को बताता है (&)
  • & एलएचएस पर जो कुछ भी मिलान किया गया था उसका विकल्प है

4
बहुत बहुत धन्यवाद, खासकर हर विवरण को समझाने के लिए!
कीलर

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

4
पूरे फाइल में इसे करने के लिए%s/\<./\u&/g
गेब्रियल बोर्जेस ओलिवेरा

51

:help case कहते हैं:

To turn one line into title caps, make every first letter of a word
uppercase: >
    : s/\v<(.)(\w*)/\u\1\L\2/g

स्पष्टीकरण:

:                      # Enter ex command line mode.

space                  # The space after the colon means that there is no
                       # address range i.e. line,line or % for entire
                       # file.

s/pattern/result/g     # The overall search and replace command uses
                       # forward slashes.  The g means to apply the
                       # change to every thing on the line. If there
                       # g is missing, then change just the first match
                       # is changed.

पैटर्न भाग का यह अर्थ है।

\v                     # Means to enter very magic mode.
<                      # Find the beginning of a word boundary.
(.)                    # The first () construct is a capture group. 
                       # Inside the () a single ., dot, means match any
                       #  character.
(\w*)                  # The second () capture group contains \w*. This
                       # means find one or more word caracters. \w* is
                       # shorthand for [a-zA-Z0-9_].

परिणाम या प्रतिस्थापन भाग का यह अर्थ है:

\u                     # Means to uppercase the following character.
\1                     # Each () capture group is assigned a number
                       # from 1 to 9. \1 or back slash one says use what
                       # I captured in the first capture group.
\L                     # Means to lowercase all the following characters.
\2                     # Use the second capture group

परिणाम:

ROPER STATE PARK
Roper State Park  

बहुत जादू मोड के लिए एक वैकल्पिक:

    : % s/\<\(.\)\(\w*\)/\u\1\L\2/g
    # Each capture group requires a backslash to enable their meta
    # character meaning i.e. "\(\)" verses "()".

3
यह मेरे लिए सबसे दिलचस्प जवाब था। मैं बहुत जादू मोड कभी नहीं देखा था। मुझे लगा कि उत्तर को समझने के बाद मैं उत्तर का दस्तावेज तैयार करूंगा।
ग्रेग

इसके अतिरिक्त, यह उत्तर सभी निचले मामले, सभी ऊपरी मामले, या मिश्रित केस स्ट्रिंग को संभालता है।
ग्रेग


12

विम टिप्स विकी में ट्विलेजकेस मैपिंग है जो दृश्य चयन को निचले मामले, UPPER CASE और शीर्षक केस को जन्म देती है

यदि आप TwiddleCaseफ़ंक्शन को अपने में जोड़ते हैं .vimrc, तो आप बस वांछित पाठ का चयन करें और ~प्रत्येक मामले के माध्यम से चक्र करने के लिए टिल्ड चरित्र को दबाएं ।


2

इस regex की कोशिश करो ..

s/ \w/ \u&/g

मुझे इसका उपयोग करने के साथ उत्तर पसंद आया, &लेकिन यह काम नहीं करता है अगर आपके स्ट्रिंग स्ट्रिंग को मिश्रित करने के लिए या सभी अपरकेस के साथ शुरू करने के लिए मामला है।
ग्रेग

2

विकल्प 1. - यह मानचित्रणqकर्सर की स्थिति में पत्र को कैपिटल करने केलिए कुंजीकोमैपकरता है, और फिर यह अगले शब्द की शुरुआत में जाता है:

: नक्शा q gUlw

इसका उपयोग करने के लिए, लाइन की शुरुआत में कर्सर रखें और qपहले अक्षर को कैपिटल करने के लिए प्रत्येक शब्द के लिए एक बार हिट करें । यदि आप पहले अक्षर को जिस तरह से छोड़ना चाहते हैं, उसे wअगले शब्द पर ले जाने के बजाय हिट करें ।

विकल्प 2. - यह मैपिंगqकर्सर की स्थिति में पत्र के मामले को पलटने केलिए कुंजीकोमैप करता है, और फिर यह अगले शब्द की शुरुआत में चला जाता है:

:map q ~w

इसका उपयोग करने के लिए, qपहले अक्षर के मामले को पलटने के लिए प्रत्येक शब्द के लिए एक बार लाइन हिट की शुरुआत में कर्सर रखें । यदि आप पहले अक्षर को जिस तरह से छोड़ना चाहते हैं, उसे wअगले शब्द पर ले जाने के बजाय हिट करें ।

अनमैप मैपिंग। -q कुंजीको असाइन की गई मैपिंग को हटाना (हटाना):

:unmap q

मैपिंग और वास्तविक मैक्रो क्यों नहीं? qq~wqऔर @qउसके बाद फिर से खेलना @@?
डी। बेन नोबल


0

दृश्य चयन में संशोधन को प्रतिबंधित करने के लिए हमें कुछ का उपयोग करना होगा:

:'<,'>s/\%V\<.\%V/\u&/g

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