क्या फ़ाइल इतिहास में मज़बूती से आगे पीछे जाने का एक तरीका है


15

मैं उस फ़ाइल में जाना चाहता हूं जिसे मैंने पिछले और अगले तरह के MRU प्लगइन्स में संपादित किया है।

:bnextऔर :bprevकभी-कभी काम करता है, लेकिन सबसे अधिक बार मैं न केवल कुछ अस्पष्ट फ़ाइल में समाप्त होता हूं जो मुझे संपादन याद नहीं है और एमआरयू प्लगइन पर वापस जाने के लिए मजबूर किया गया है।

क्या इसे ठीक करने का कोई तरीका है?

Ctrl-^दो अंतिम फ़ाइलों के बीच स्वैप। अधिक के बीच नेविगेट करने का सबसे अच्छा तरीका क्या है?

मैं समझता हूं कि यह मुश्किल हो सकता है लेकिन मैं ऐसी किसी भी बात से सहमत हूं जो वर्तमान :bn :bpव्यवहार को बेहतर बना सकती है। जिन बफ़र्स को मैं अक्सर देखता हूं वे पूरी तरह से बाहर हैं। शायद एक प्लगइन है जो हाल की फ़ाइलों का ट्रैक रख सकता है और हुक प्रदान कर सकता है ताकि मैं मैपिंग बना सकूं?

टिप्पणियों के जवाब ने मेरे विचारों को थोड़ा साफ कर दिया। मेरा मानना ​​है कि मैं चाहता हूं कि नवीनतम बचत के क्रम में फ़ाइलों के माध्यम से आगे बढ़ने में सक्षम हो। इस तरह अगर मैं इतिहास में वापस जाता हूं तो जब तक मैं उस फ़ाइल को नहीं सहेजता हूं जब तक कि वह अंतिम नहीं हो जाती है और इससे ठीक पहले बचाई गई फ़ाइल के लिए एक कदम "बैक" हो जाता है, यानी मैं जिस से शुरू हुआ हूं।

Ctrl-O Ctrl-Iजोड़ी की तरह कुछ जो वर्तमान बफर के चारों ओर कूद बिना फ़ाइलों को तुरंत स्विच करता है। तरह uऔर Unetrw में:

   u    Change to recently-visited directory                 |netrw-u|
   U    Change to subsequently-visited directory             |netrw-U|

"जिस फ़ाइल को मैंने पिछले बार संपादित किया था" क्या आपका शाब्दिक अर्थ है "वह फ़ाइल जिसका मैंने हाल ही में संपादन किया है"? या क्या आपका मतलब सिर्फ आखिरी है जिसे आपने विम में देखा था?
रिच

2
यदि बाद में, मैं व्यक्तिगत रूप से बस Ctrl-O(या कभी-कभी Ctrl-T) वहां पहुंचने तक मैश करूं।
रिच

हाँ है कि क्या मैं भी करते हैं Ctrl-Oऔर Ctrl-I। लेकिन यह संपादन बिंदुओं के बीच कूदता है और जो प्रवाह को तोड़ता है। सभी मैं पहुंच के क्रम में बफ़र्स के बीच आगे-पीछे जाना चाहते हैं। प्लगइन्स सबसे हाल की फ़ाइलों की सूची कैसे प्रदर्शित करते हैं? क्या वे आंतरिक रूप से उन पर नज़र रखते हैं?
firedev

Ctrl-^दो अंतिम फ़ाइलों के बीच स्वैप। लेकिन अधिक के बीच नेविगेट करने का सबसे अच्छा तरीका क्या है?
१५:१५

पहुँच से, यह अभी भी स्पष्ट नहीं है यदि आप का अर्थ है कि वे आदेश खोले गए थे, जो एक केंद्रित विंडो में लिखा गया था, या बदल गया है। Ctrl-O/Iविंडो-विशिष्ट fwiw हैं, जबकि MRU आमतौर पर वैश्विक है। यदि आप हाल ही में एक्सेस करके ऑर्डर करना चाहते हैं, तो जैसे ही आप एक बार वापस आते हैं, सूची का क्रम बदल जाता है, चीजों को और जटिल कर देता है।
मैट बोहम

जवाबों:


7

मैंने बार-बार CTRL-O को हिट करने के लिए एक छोटा सा फ़ंक्शन लिखा, जब तक कि बफर नहीं बदलता।

आप इसे यहाँ पा सकते हैं । मैंने इसे CTRL-U में मैप किया, लेकिन यदि आप चाहते तो CTRL-O को ओवरराइड कर सकते थे।

function! GoBackToRecentBuffer()
  let startName = bufname('%')
  while 1
    exe "normal! \<c-o>"
    let nowName = bufname('%')
    if nowName != startName
      break
    endif
  endwhile
endfunction

nnoremap <silent> <C-U> :call GoBackToRecentBuffer()<Enter>

आप शायद कुछ ऐसा ही लिख सकते हैं <C-I>

मुद्दे:

  • यदि कोई पिछला बफर नहीं है, तो जब तक आप CTRL-C नहीं मारते, तब तक यह चुपचाप जारी रहेगा!

सम्बंधित:

  • :jumps उन ऐतिहासिक स्थानों को सूचीबद्ध करता है जो CTRL-O के माध्यम से वापस जाएंगे।
  • विम का डिफ़ॉल्ट CTRL-T CTRL-O को मैशिंग करने का एक अच्छा विकल्प है, क्योंकि यह मोटे अनाज वाला होता है: यह केवल टैग जंप के माध्यम से वापस जाता है।

विम केवल CTRL- ^ पर उजागर MRU फ़ाइल इतिहास के एक स्तर की पेशकश करने के लिए लगता है। हालाँकि, मैंने देखा है :kwbdकि कुछ बफ़र्स को बंद करते समय , Vim पिछले बफ़र्स को उल्टे-ऐतिहासिक क्रम में वापस ले जाता है। शायद विम के पास एक एमआरयू सूची है जिसे वह हमारे साथ साझा नहीं कर रहा है, या शायद यह चुनता है कि सीटीआरएल-ओ स्थान इतिहास ( :jumps) के आधार पर कौन सा बफर वापस गिरता है ।
joeytwiddle

1
वैकल्पिक रूप से, autocmd InsertLeave * normal mZवैश्विक चिह्न Z में अंतिम संपादित फ़ाइल को याद रखेगा । आप इसके साथ वापस आ सकते हैं g'Z। // मेरे पास है, nmap <C-y> g'Zलेकिन मैं अभी भी Ctrl-U का उपयोग अधिक बार करता हूं।
joeytwiddle

6

आप :lsसभी बफ़र्स दिखाने के लिए उपयोग कर सकते हैं । उदाहरण के लिए:

:ls
  1      "vim.markdown"                 line 160
  2      "ext.markdown"                 line 0
  3 #    "~/to"                         line 1
  4 %a   "~/TODO"                       line 68

बफर पर वापस जाने के लिए ext.markdown, उपयोग करें :e +Nbuf, जहां Nपहले कॉलम से बफर नंबर है। उदाहरण के लिए :e +2buf:।

आप अधिक संवादात्मक अनुभव के लिए एक सरल कार्य बना सकते हैं:

fun! ChooseBuf()
    redir => buffers
        silent ls
    redir end

    echo l:buffers
    let l:choice = input('Which one: ')
    execute ':edit +' . l:choice . 'buf'
endfun
command! ChooseBuf call ChooseBuf()
nnoremap <Leader>b :call ChooseBuf()<CR>

उपयोग करने के बाद :ChooseBufया <Leader>bआप केवल उस बफ़र की संख्या टाइप कर सकते हैं जिसे आप संपादित करना चाहते हैं।

यह काफी "सबसे हाल ही में उपयोग किया जाने वाला" नहीं है, क्योंकि आदेश "सबसे हाल ही में खोला गया" है (यह शायद इसलिए भी :bnext/ :bprevजैसा कि आप उम्मीद करते हैं, काम नहीं करते हैं)।


4

<C-6>आपको वही चाहिए, जो आपको उस पिछले बफ़र पर ले जाए जो आपने वर्तमान के पहले खोला था। वहाँ भी हैं :bprevऔर :bnextजो आप उसी के लिए उपयोग कर सकते हैं।


<C-6>बुरा नहीं है, लेकिन मैं दो बफ़र्स वापस कूदने के लिए उपयोग नहीं कर सकता। bprevऔर bnextछलांग लगाने के क्रम में नहीं हैं।
प्रिक्सॉलिटिक

हाँ, मुझे नहीं लगता कि इतिहास में गहराई तक जाने का कोई अच्छा देशी तरीका है। आपको कुछ एमआरयू प्लगइन का उपयोग करना होगा, यहां तक ​​कि CtrlP में से एक है, दूसरों को भी होना चाहिए
ध्रुव सागर

2
नोट: यह नहीं है <C-6>, यह है <C-^>। जबकि कई टर्मिनल एमुलेटर पर, कोई अंतर नहीं है, कुछ पर (एक है कि ओएस एक्स के साथ जहाजों सहित), वहाँ है। उत्तरार्द्ध मामले के लिए, Shiftकुंजी का उपयोग आवश्यक है (क्वर्टी लेआउट को मानते हुए)।
tommcdo

@tommcdo दिलचस्प है, मैं osx पर हूं, लेकिन टर्मिनल.app के बजाय इटर्म का उपयोग करता हूं, यह मेरे लिए समान काम करता है। इस पर शिफ्ट कुंजी की आवश्यकता एक bummer होगी।
ध्रुव सागर

यह सोचने के लिए आओ, यह सिर्फ हो सकता है कि मेरा ओएस उस महत्वपूर्ण बंधन को पकड़ रहा है और इसे विम तक प्रचारित नहीं कर रहा है। मेरा OS बंद होना चाहिए!
tommcdo

2

आप उन :oldfilesफ़ाइलों की सूची प्राप्त करने के लिए भी उपयोग कर सकते हैं जिन्हें आपने संपादित किया है।

सूची में फ़ाइल नाम से जुड़े नंबर होंगे। एक फ़ाइल चुनें, संख्या पर ध्यान दें (14 कहते हैं) और इसके साथ खोलें:edit #<14

आप उस फ़ाइल पर अन्य कमांड भी चला सकते हैं या एक बार में एक कमांड में कई फाइलें पास कर सकते हैं। इस बारे में यहाँ और अधिक


1
अन्य जवाब कड़ी में मुझे सिखाया:bro[wse] ol[dfiles][!]
स्टीव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.