इसके पिछले मूल्य पर एक चिह्न सेट करें


9

कभी-कभी मैं विभिन्न फ़ाइलों के माध्यम से आसानी से नेविगेट करने के लिए निशान का उपयोग करता हूं mA, mB... और 'A, 'B...

और कभी-कभी (अधिक बार मैं स्वीकार करना चाहूंगा) क्योंकि असावधानी के कारण या जो भी कारण है, मैं m[LETTER]पहले से मौजूद निशान के साथ उपयोग करता हूं जो इसके पिछले मूल्य को मिटा देता है जब मैं नहीं चाहता। ज्यादातर समय जब मैं ऐसा करता हूं कि मेरे पास मूल रूप से निशान द्वारा बताई गई फ़ाइल नहीं है।

इस मामले में जब मुझे पता चला कि मुझे गलती हो गई है, तो क्या मुझे यह याद रखना, जहां वह इस स्थान पर नेविगेट करने और इसे फिर से सेट करने की ओर इशारा कर रहा था, के अलावा मेरे निशान का पिछला मूल्य प्राप्त करना संभव है?

मुझे ऐसा आदेश नहीं मिला है कि डॉक में ऐसा न हो कि कोई चतुर काम न हो जो आप में से कुछ इस स्थिति में उपयोग करें?


1
इसके अलावा आप इस पोस्ट को और अधिक जानकारी के लिए देख सकते हैं: superuser.com/questions/687441/…
nobe4

@ Nobe4 आपके लिंक के लिए धन्यवाद, मुझे यह नहीं मिला था, लेकिन यह पुष्टि करता है कि यह वास्तव में आसानी से करना संभव नहीं है।
statox

कूद आदेश (का प्रयोग करें ctrl-o, ctrl-iऔर :jumpsअपने स्वयं के व्यक्तिगत स्मृति :))
VanLaser

जवाबों:


5

यहाँ कुछ बुनियादी VimScript है जो मोटे तौर पर वही करता है जो आप चाहते हैं।

हम वास्तव में निशान सेट करने के लिए मूल कॉल करने से पहले वर्तमान मूल्य को स्टोर करने के लिए मैपिंग के maमाध्यम से ओवरराइड करते हैं । हम यह भी परिभाषित के माध्यम से कहा चिह्न के लिए इतिहास को दिखाने के लिए।mzg:previous_marksm<Leader>ma<Leader>mz

आप शायद g:previous_marksअधिक व्यवस्थित तरीके से जानकारी को संग्रहीत करना चाहते हैं , और एक निशान को जल्दी से बहाल करने की क्षमता जोड़ सकते हैं (केवल स्थानों को देखने के बजाय), लेकिन यह उदाहरण दिखाता है कि यह कैसे किया जा सकता है, आगे की ट्वेक को एक अभ्यास के रूप में छोड़ दिया जाता है पाठक को ;-)

let g:previous_marks = {}
fun! MyMark(mark)
    let l:marks = ''
    redir => l:marks
        try
            silent! execute 'marks ' . a:mark
        catch
        endtry
    redir END

    if l:marks != ''
        if !has_key(g:previous_marks, a:mark)
            let g:previous_marks[a:mark] = []
        endif
        call add(g:previous_marks[a:mark], split(l:marks, "\n")[1])
    endif

    execute 'normal! m' . a:mark
endfun

fun! ShowHistory(mark)
    if !has_key(g:previous_marks, a:mark)
        echoerr 'No history for ' . a:mark
        return
    endif

    for l:line in g:previous_marks[a:mark]
        echo l:line
    endfor
endfun

fun! MakeMappings()
    for l:char in range(97, 122)
        let l:char = nr2char(l:char)

        execute 'nnoremap <silent> m' . l:char . ' :call MyMark("' . l:char . '")<CR>'
        execute 'nnoremap <silent> <Leader>m' . l:char . ' :call ShowHistory("' . l:char . '")<CR>'
    endfor
endfun

call MakeMappings()

हमेशा की तरह अद्भुत जवाब वाह! ); मैं समय ले इस सप्ताह के अंत पाठक के लिए exercice को लागू करने की कोशिश करेंगे
statox

2

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


मैं मार्जिन पर दृश्यमान चिह्न का बहुत बड़ा प्रशंसक नहीं हूं, लेकिन ऐसा लगता है कि कुछ दिलचस्प विशेषताएं हैं जो मैं इसे देखूंगा।
statox

@statox उसी नस में, शो -मार्क भी हैं । यह शाब्दिक रूप से सभी निशान दिखाता है (केवल ऊपर का प्लगइन वर्णमाला वाले लोगों से संबंधित है), और एक कुंजी के साथ टॉगल किया जा सकता है। मुझे यह कभी-कभी उपयोगी लगता है।
सातो कैटसुरा

हाँ, मैं (हस्ताक्षर के विपरीत) में कुछ समय के लिए showmarks का उपयोग कर दिया गया है इसलिए मैंने कहा कि मैं मार्जिन में अंकों के एक प्रशंसक नहीं हूँ, लेकिन मैं यह देखने के लिए अगर मैं इसे की तरह :-) हस्ताक्षर कोशिश कर रहा हूँ अभी
statox

2

चूंकि वास्तविक समस्या कई फ़ाइलों / स्थितियों के बीच नेविगेशन की प्रतीत होती है, इसलिए मैं इस सरल समाधान का सुझाव दूंगा, जो कि यूनाइट प्लगइन पर आधारित है :

:Unite jump -auto-preview

यह कमांड (जिसे <leader>jउदाहरण के लिए किसी चीज़ के लिए मैप किया जा सकता है ) जंप सूची दिखाएगा, पूर्वावलोकन के साथ : हर बार जब आप सूची को j/ के साथ नेविगेट करते हैं k, तो उस फ़ाइल में कर्सर की स्थिति के चारों ओर कई लाइनें प्रदर्शित की जाएंगी।

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


वैकल्पिक:

डिफ़ॉल्ट चिह्नों को अधिलेखित करना बहुत आसान है: शायद नामांकित बुकमार्क आपके उपयोग के मामले को सरलता से फिट करेंगे, जैसे कि simple_bookmarks प्लगइन के साथ।


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

यहां तक ​​कि अगर उन्हें विम सत्रों के बीच बचाया जा सकता है, तो अंकों को अधिलेखित करना बहुत आसान है। मैंने एक वैकल्पिक समाधान जोड़ा।
वनसेलर

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