अपने vimrc में कई संक्षिप्ताक्षर कैसे प्रबंधित और याद रखूँ?


10

मैं 500 कोड (है iabbr, abbr) और जावा, पीएचपी, C / C ++ और लेटेक्स से मेरी vimrc फ़ाइल में कुछ मैपिंग।

जब मैं कुछ समय के लिए भाषाओं का उपयोग नहीं करता हूं, तो तुरंत याद रखना आसान नहीं है।

मैं सोच रहा हूं कि क्या मैं संक्षिप्त नाम पर पूरा कर सकता हूं। क्या इन सभी संक्षिप्ताक्षरों का उपयोग / प्रबंधन करने का कोई बेहतर तरीका है?

जवाबों:


10

मुझे नहीं पता कि 500 ​​से अधिक संक्षिप्त तरीकों को प्रबंधित करने का सबसे अच्छा तरीका क्या है। शायद लंबी अवधि में, जैसा कि @statox ने समझाया, आप इस संख्या को कम करने के लिए स्निपेट पर एक नज़र डाल सकते हैं।

और यदि आप संक्षिप्त रूप से स्वतः पूर्ण करना चाहते हैं, तो आप निम्नलिखित कोड आज़मा सकते हैं:

augroup GetAbbrev
    autocmd!
    autocmd VimEnter * let s:abbrev_list = [] |
                \ call substitute(join(readfile($MYVIMRC), "\n"), '\v%(^|\n)\s*i?%(nore)?ab%[brev]\s+%(%(\<expr\>|\<buffer\>)\s+){,2}(\k+)', '\=add(s:abbrev_list, submatch(1))', 'gn')
augroup END

set completefunc=CompleteAbbrev
function! CompleteAbbrev(findstart, base)
    if a:findstart
        return searchpos('\<\k', 'bcnW', line('.'))[1] - 1
    else
        return filter(copy(s:abbrev_list), 'v:val =~ "^" . a:base')
    endif
endfunction

इसका उपयोग करने के लिए, आपको C-x C-uएक संक्षिप्त नाम की शुरुआत के बाद हिट करना होगा ।


स्वतः पूर्ण चर को सेट करता है s:abbrev_listजिसमें आपके सभी संक्षिप्ताक्षर होने चाहिए।

फ़ंक्शन CompleteAbbrev()को कर्सर से पहले शब्द के आधार पर उम्मीदवारों की सूची वापस करनी चाहिए।

'completefunc'विकल्प के मूल्य विम जो कॉल करने के लिए कार्य करते हैं जब आप हिट बताता है C-x C-u
ध्यान दें कि विकल्प बफर के लिए स्थानीय है, इसलिए आप अभी भी विभिन्न प्रकार के बफ़र्स में अन्य कार्यों का उपयोग कर सकते हैं, FileTypeउदाहरण के लिए एक ऑटोकैम और घटना का उपयोग करना ।

:h complete-functionsफ़ंक्शन कैसे काम करता है, इसके बारे में अधिक जानकारी के लिए देखें ।


एक अन्य समाधान पर्यायवाची शब्दों को पूरा करने का उपयोग करना होगा। से :h i_^x^t:

                            *i_CTRL-X_CTRL-T*
CTRL-X CTRL-T       Works as CTRL-X CTRL-K, but in a special way.  It uses
                    the 'thesaurus' option instead of 'dictionary'.  If a
                    match is found in the thesaurus file, all the
                    remaining words on the same line are included as
                    matches, even though they don't complete the word.
                    Thus a word can be completely replaced.

                    For an example, imagine the 'thesaurus' file has a
                    line like this:
                            angry furious mad enraged
                    Placing the cursor after the letters "ang" and typing
                    CTRL-X CTRL-T would complete the word "angry";
                    subsequent presses would change the word to "furious",
                    "mad" etc.
                    Other uses include translation between two languages,
                    or grouping API functions by keyword.

इस समाधान का उपयोग करने के लिए, आपको 3 चीजें करनी होंगी:

  1. {lhs}एक समर्पित फ़ाइल के अंदर अपने सभी संक्षिप्त विवरण लिखें ।
    उदाहरण के लिए, /home/user/mysynonyms.txt। और उन्हें समान विषयों के आसपास समूहित करें।
  2. विकल्प में इस फ़ाइल का पथ जोड़ें 'thesaurus':

    set thesaurus+=/home/user/mysynonyms.txt
    
  3. C-x C-tकिसी समूह के अंदर किसी भी नाम के नाम की शुरुआत के बाद मारो ।

उदाहरण के लिए, मान लें कि आपके पास निम्नलिखित संक्षिप्त विवरण हैं:

iab cfa CFuncA
iab cfb CFuncB
iab cfc CFuncC

iab jfa JavaFuncA
iab jfb JavaFuncB
iab jfc JavaFuncC

iab pfa PhpFuncA
iab pfb PhpFuncB
iab pfc PhpFuncC

आप उन्हें उस प्रोग्रामिंग भाषा के अनुसार समूहित कर सकते हैं जो वे संबंधित हैं।
अंदर /home/user/mysynonyms.txt, आप लिखेंगे:

cpp cfa cfb cfc
php pfa pfb pfc
java jfa jfb jfc

अब, जब भी आप C-x C-tएक संक्षिप्त नाम (या सिर्फ इसकी शुरुआत) के नाम पर हिट करते हैं, तो Vim को पॉपअप मेनू में, सभी संक्षिप्ताक्षरों को प्रदर्शित करना चाहिए जो एक ही पंक्ति में हैं।

यहाँ है कि यह कैसा दिखेगा:

यहाँ छवि विवरण दर्ज करें

ध्यान दें कि संक्षिप्तीकरण को समान वर्णों के साथ शुरू करने की आवश्यकता नहीं है, वे पूरी तरह से अलग हो सकते हैं। जब तक वे आपके समानार्थी फ़ाइल में एक ही पंक्ति पर हैं, विम सभी को दिखाएगा।

और आपको यह तय करने के लिए प्रोग्रामिंग भाषा का उपयोग करने की आवश्यकता नहीं है कि किस समूह ने संक्षिप्त नाम दिया है। आप उन्हें किसी भी सार्थक समानता / विषय / श्रेणी के अनुसार समूहित कर सकते हैं जो आपके मन में है।

इसलिए, जब आप एक विशिष्ट संक्षिप्त नाम भूल जाते हैं, तो आप श्रेणी के पहले अक्षरों को टाइप कर सकते हैं, हिट कर सकते हैं C-x C-tऔर मेनू के अंदर संबंधित को चुन सकते हैं।

संपादित करें:
अपने सभी संक्षिप्त विवरणों को डंप करने के लिए /home/user/mysynonyms.txt, आप इन 3 पूर्व कमांडों का उपयोग कर सकते हैं:

:let abbrev_list = []
:call substitute(join(readfile($MYVIMRC), "\n"), '\v%(^|\n)\s*i?%(nore)?ab%[brev]\s+%(%(\<expr\>|\<buffer\>)\s+){,2}(\k+)', '\=add(abbrev_list, submatch(1))', 'gn')
:call writefile(abbrev_list, '/home/user/mysynonyms.txt')

EDIT2:
मैं झंडा जोड़ दिया है nजब substitute()समारोह क्योंकि आप किसी भी प्रतिस्थापन की जरूरत नहीं है कहा जाता है। इसका एक ही उद्देश्य है कि जब भी कोई सूची मिले उसके अंदर एक संक्षिप्त नाम जोड़ें।
लेकिन क्योंकि आपके पास कई संक्षिप्ताक्षर हैं, यह प्रक्रिया को बेकार रूप से धीमा कर सकता है, मुझे नहीं पता। प्रारंभ में, मैंने इसे नहीं डाला क्योंकि मुझे नहीं पता कि आप किस विम संस्करण का उपयोग कर रहे हैं। यदि आपका संस्करण 7.3.627 से नया है , तो यह ठीक होना चाहिए, अन्यथा आपको nध्वज को हटाना होगा ।


शानदार और व्यापक जवाब। आप रॉक
1234

\ v% (^ | \ N) \ s * मैं% (nore) अब% [brev] \ s +% (% (\ <expr \> | \ <बफर \>) \ S +)? {2} ( \ k +) मेरी vimrc फ़ाइल पर काम नहीं कर रहा है
१२३४

@ जुबली यह मेरे सिस्टम पर काम करता है, क्या आपके पास कोई त्रुटि संदेश है? क्या यह अधिक सरल (लेकिन कम विश्वसनीय) रेगेक्स की तरह काम करता है \vi?abbr\s+(\k+)? क्या आप मुझे अपने संक्षिप्त विवरण के साथ एक लिंक दे सकते हैं, यह देखने के लिए कि क्या मैं आपके मुद्दे को पुन: प्रस्तुत कर सकता हूं?
user9433424

@JoobLee यदि आपका विम संस्करण हाल ही में पर्याप्त है, तो nध्वज को विकल्प कॉल में जोड़ें (मैंने इसे शामिल करने के लिए उत्तर संपादित किया है)। यदि आप अपने में एक खोज करते हैं vimrcऔर आप इसे कॉपी-पेस्ट करते हैं \v^\s*i?%(nore)?ab%[brev]\s+%(%(\<expr\>|\<buffer\>)\s+){,2}\zs\k+, तो क्या यह आपके संक्षिप्तीकरण को उजागर करता है?
user9433424

9

विकिया टिप से आप अपने संक्षिप्ताक्षर चुन सकते हैं:

आप अपने सभी संक्षिप्त विवरणों को सूचीबद्ध कर सकते हैं

:ab<CR>

(की जगह abसे iabही मोड संक्षिप्त रूपों डालने सूची)

और आप सभी उपसर्गों को उसी उपसर्ग के साथ सूचीबद्ध कर सकते हैं

:ab prefix<CR>

यह संक्षिप्त रूप में पूर्ण होने के रूप में आदर्श नहीं है, लेकिन यह तेजी से आपके मौजूदा संक्षिप्ताक्षर की सूची का एक अच्छा तरीका हो सकता है।

इस समाधान को और अधिक कुशल बनाने के लिए एक फ़ाइल प्रकार के लिए संक्षिप्त नाम बनाना एक अच्छा अभ्यास होगा। उदाहरण के लिए यह संक्षिप्त नाम जावा बफर में केवल उपयोगी है:

iabbrev syso System.out.println("");

इसलिए इसे इस तरह परिभाषित करना अच्छा है:

autocmd! FileType java :iabbrev <buffer> syso System.out.println("");

ऑटोकॉमैंड भाग केवल संक्षिप्त नाम बनाने की अनुमति देता है जब आप एक जावा बफर में होते हैं और <buffer>विकल्प केवल इस बफर से संक्षिप्त नाम को सुलभ बनाता है।

यह तरीका :iabसंक्षिप्त नाम तभी प्रदर्शित करेगा जब आप जावा बफर में होंगे। यदि आपके पास बहुत सारे संक्षिप्तीकरण हैं, तो फिल्टाइप द्वारा एक फ़ंक्शन बनाना दिलचस्प हो सकता है जो सभी संक्षिप्ताक्षरों को परिभाषित करेगा और ऑटोकॉमैंड को फ़ंक्शन को कॉल करने देगा। कुछ इस तरह:

autocmd! FileType latex call CreateLatexAbbrev()

function! CreateLatexAbbrev()
    iabbrev <buffer> something something else
    " All the other latex abbreviations
endfunction

एक अन्य उपाय यह हो सकता है कि कीवर्ड के स्रोत के रूप में अपने संक्षिप्त नाम की सूची का उपयोग करके अपना स्वयं का संपूर्ण कार्य बनाएं।

अंत में मुझे कहना है कि मैं "500 से अधिक संक्षिप्त" से बहुत प्रभावित हूं, मुझे नहीं पता कि आप किन चीजों का उपयोग कर रहे हैं, लेकिन हो सकता है कि अगर आप परिचित नहीं हैं तो स्निपेट्स की अवधारणा पर एक नज़र डालना आपके लिए दिलचस्प होगा। उनके साथ। जैसे वे टेम्प्लेट होते हैं जो एक कीवर्ड दर्ज करके और हॉटकी दबाकर ट्रिगर किए जाते हैं, वे संक्षिप्ताक्षर से अधिक लचीले होते हैं, यह आपको उन संक्षिप्तीकरणों की संख्या को कम करने की अनुमति दे सकता है जो आप उपयोग कर रहे हैं। एक दिलचस्प परिचय के लिए यहां देखें ।


1

कैसे filetype द्वारा संक्षिप्तीकरण समूहीकरण के बारे में?

अपनी ~/.vimrcफ़ाइल में उन सभी को रखने के बजाय , उन्हें तोड़कर अपनी रनटाइम निर्देशिका में उचित स्थानों पर रखें, जो कि है~/.vim यूनिक्स जैसे ऑपरेटिंग सिस्टम पर है।

उदाहरण के लिए, आपका मार्कडाउन संक्षिप्त विवरण फाइल में स्थित होगा ~/.vim/after/ftplugin/markdown.vim, जिसे मार्कड फाइलटाइप प्लगइन लोड होने के बाद विम चेक करता है।

पता चलता है कि हमारे पास बड़ी .vimrcफाइलें नहीं होनी चाहिए ; आप का उपयोग करके अधिक लचीलापन मिलता है $VIMRUNTIME। रनटाइम पथ विम की सहायता प्रणाली में प्रलेखित है :h 'runtimepath':।

मैंने पहली बार इसके बारे में उत्कृष्ट लेख से .vimrc से .vim के बारे में सीखा जो विम-थीम वाले आगमन कैलेंडर Vimways पर है

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