2010-06-27 18 views
17

लंबे समय से मुझे पता चला है कि मैं एक चरित्र के मामले को टॉगल करने के लिए विम में ~ का उपयोग कर सकता हूं। लेकिन क्या किसी शब्द को कैपिटल करने और पिछली स्थिति पर वापस जाने के लिए कुंजी को मैप करने का कोई तरीका है?मैं विम में एक शब्द के पहले अक्षर को कैपिटल कैसे करूं?

उदाहरण के लिए:

I like to drink Coca co[l] 

मेरी कर्सर "l" पर है और मुझे पता है मैं "सी" बनाने की जरूरत है और साथ ही, वर्तमान में, मैं क्या करने की जरूरत भुनाने हैं:

<C-c> b ~ ll i 

क्या कर्सर के तहत शब्द का पहला अक्षर पूंजीकृत करने के लिए एक कुंजी को मैप करने का कोई तरीका है और कर्सर को मूल स्थिति में रखें?

+1

एक नज़र [यहां] (http://vim.wikia.com/wiki/Capitalize_words_and_regions_easily) । –

+0

यह भी एक अच्छी गाइड है। साझा करने के लिए धन्यवाद। – Patrick

+0

_THIS_ यह कैसे उपयोग किया जाना चाहिए! – kenny

उत्तर

15
:nmap <whatever> m`b~`` 
+0

वाह, त्वरित उत्तर के लिए धन्यवाद।यह वही है जो मैं ढूंढ रहा हूं! – Patrick

+1

इसे एमएलबी ~ '' बनाना बेहतर है ताकि आप वही प्रभाव डाल सकें, भले ही आप पहले से ही शब्द के पहले अक्षर पर हों। इसे स्वयं का उपयोग करना –

+0

धन्यवाद, लेकिन यह दृश्य मोड में काम नहीं करता है ('vmap' के साथ)। – Chinggis6

2

आप भी मैक्रो

q<register> <C-c> b ~ ll i q 

और उसके बाद करना @<register> हर बार जब आप इसे उपयोग करने की आवश्यकता का उपयोग कर सकते हैं।

+0

इस दृष्टिकोण के साथ समस्या यह है कि "ll" की लंबाई प्रत्येक शब्द के लिए अनिश्चित है। – Patrick

9

व्यक्तिगत रूप से, यह वास्तव में ऐसी चीज है जो मैं को मैक्रो बनाने के लिए पसंद करता हूं। अपने .vimrc को ऐसे कई ऑफ-ऑफ समाधानों के साथ भरने की कोई आवश्यकता नहीं है, क्योंकि समाधान मानक विम कमांड के "टूलबॉक्स" से स्वाभाविक रूप से बहता है, कि आप इसे दूसरी प्रकृति की तरह स्ट्रिंग कर सकते हैं।

the gallicizatio| 

(| कर्सर की स्थिति है):

मैं एक लंबे शब्द टाइप कर रहा हूँ। अचानक मुझे एहसास हुआ कि मैं "गैलिसिसेशन" के G को कैपिटल करना भूल गया था। तो, बाम !, मैंने ESC (जो कि मेरे कीबोर्ड पर कैप्स लॉक कुंजी पर मैप किया गया है, इसलिए इसे पिंकी का केवल एक झटका लगता है), उसके बाद b~A, और मैं टाइपिंग जारी रखता हूं जैसे कुछ नहीं हुआ। उस गलती g को उस समय पूंजीकृत किया गया था जब वह एमाक्स उपयोगकर्ता को अपने दाहिने हाथ को तीर कुंजियों की ओर ले जाने के लिए ले जाएगा, और मैं पहले से ही बाकी वाक्य पर चले गए हैं।

इसके विपरीत, मैक्रो के साथ जो मैंने थोड़ी देर में उपयोग नहीं किया है, शायद मुझे यह याद रखने में अधिक समय लगेगा कि मैंने उस मैक्रो को कितनी कुंजी सौंपी है। बेहतर समाधान महत्वपूर्ण "कोर" कमांड को बहुत अच्छी तरह से सीखना है, जिसे संभवतः लाखों संभावित प्रभावों के साथ सरल नियमों के अनुसार मक्खी पर जोड़ा जा सकता है।

+0

उत्तर के लिए धन्यवाद! हालांकि, मेरे लिए, अंतर्निहित कमांड अनुक्रम को याद रखना कोई अंतर नहीं है, फिर मेरे द्वारा बनाई गई मैपिंग या मैक्रो को याद रखना। यद्यपि एक नई मशीन पर, पसंदीदा मैपिंग के बिना, किसी को अंतर्निहित कमांड पर जो भी याद आता है उसे वापस लौटना पड़ता है :) – Patrick

+1

@ पैट्रिक: बिंदु यह है कि आपको * अंतर्निहित कमांड अनुक्रम को याद रखने की आवश्यकता नहीं है (इस मामले में 'बी ~ ए')। आपको असीमित तरीकों से संयोजन के लिए अलग-अलग अंतर्निहित कमांडों और * नियम * की अपेक्षाकृत छोटी संख्या याद है। वैसे ही आप morphemes की एक सीमित संख्या और संयोजन के नियमों को याद करके अंग्रेजी के अनंत, उपन्यास वाक्य बना सकते हैं। –

+0

एक Emacs उपयोगकर्ता एक ही परिणाम प्राप्त करने के लिए 'एम-बी'' एम-सी 'करेगा और तीर कुंजी पर नहीं जायेगा –

2

मुझे लगता है कि मैं इसे अक्सर कर रहा हूं, और एक शर्त से मेल खाने वाले एकाधिक रिकॉर्ड के माध्यम से EX कमांड लाइन का उपयोग कर रहा हूं।

:%s/\(\w\)\(\w*\)/\U\1\L\2/g

और बूम, समस्या सभी शब्दों कि एक निश्चित संदर्भ में कर रहे हैं भर में हल: इस मामले में, मैं एक backreference कि इस तरह दिखता है का उपयोग करें।

संपादित करें: यहाँ देखो भी, बस बात का एहसास हुआ इस लिंक जो समान जवाब है था:

Capitalize first letter of each word in a selection using vim

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