जैसा कि @muru ने उल्लेख किया है, निर्देशिका को कॉन्फ़िगर करने का कोई विकल्प नहीं है, जिसमें से पथ और फ़ाइल नाम को पूरा करने के लिए। यह हमेशा खिड़की की कार्यशील निर्देशिका का उपयोग करता है।
मैंने इसके साथ काम करने के लिए कुछ फ़ंक्शन और मैपिंग लिखी हैं। पर्दे के पीछे, वे :lcd
अस्थायी रूप से स्थानीय कामकाजी निर्देशिका (उपयोग करते हुए ) को बदलते हैं , फिर जब काम करते हैं तो पिछली कार्यशील निर्देशिका को पुनर्स्थापित करते हैं।
हाथी
मेरे लिए भी अज्ञात कारणों से, मैंने इस माइक्रो-प्लगइन को एलिफेंट कहा है ।
यहाँ कोड ( GitHub पर मेरे विम विन्यास से कॉपी किया गया है ):
let g:elephant_map = {
\ 'f': function('elephant#current_file'),
\ 'p': function('elephant#vcs_project')
\ }
function! elephant#prompt(base)
let l:Fcn = get(g:elephant_map, a:base, function('elephant#identity'))
let l:basedir = l:Fcn()
execute 'lcd' l:basedir
let l:file = fnamemodify(input(l:basedir.'/', '', 'file'), ':p')
lcd -
return fnamemodify(l:file, ':.')
endfunction
function! s:elephant_init()
let l:base = getchar()
return elephant#prompt(nr2char(l:base))
endfunction
function! elephant#identity()
return '.'
endfunction
function! elephant#vcs_project()
return fnamemodify(finddir('.git', '.;'), ':h')
endfunction
function! elephant#current_file()
return expand('%:h')
endfunction
inoremap <silent> <expr> <C-R><C-E> <SID>elephant_init()
cnoremap <silent> <C-R><C-E> <C-R>=<SID>elephant_init()<CR>
इसका इस्तेमाल कैसे करें
इन मैपिंग का उपयोग 3 चरणों में होता है।
1. मैपिंग लागू करें
इन्सर्ट मोड या कमांड-लाइन मोड में, मैपिंग का उपयोग करके आह्वान करें <C-R><C-E>
।
2. एक निर्देशिका चुनें
जो रूट निर्देशिका आप से पूरा करना चाहते हैं चुनने के लिए एक एकल वर्ण टाइप करें। उपरोक्त कोड दो प्रकार की जड़ें प्रदान करता है:
f
- वह निर्देशिका जो वर्तमान फ़ाइल (बफर) में रहती है
p
- Git प्रोजेक्ट की बेस डायरेक्टरी वर्तमान फाइल से संबंधित है
3. पथ या फ़ाइल नाम दर्ज करें
आपको उपलब्ध पूर्ण होने के साथ, निर्दिष्ट निर्देशिका के सापेक्ष पथ या फ़ाइल नाम दर्ज करने के लिए प्रेरित किया जाएगा। Enter
समाप्त होने पर दबाएं ।
कुछ नोट
- यह सम्मिलित मोड में इनलाइन पूर्णता प्रदान नहीं
<C-X><C-F>
करता है; इसके बजाय, आप कमांड-लाइन प्रॉम्प्ट (जहां :
कमांड चलते हैं) पर पथ या फ़ाइल नाम टाइप करेंगे । दबाने पर Enter
, पथ बफर में डाला जाएगा।
- कमांड-लाइन मोड में भी यही सच है, जो कभी-कभी आपको हिट करते समय भ्रमित कर सकता है
Enter
और भूल सकता है कि आपको अभी भी Enter
जो भी कमांड टाइप करना था उसे जारी करने के लिए हिट करना होगा।
- अन्य निर्देशिका कार्यों को उन्हें जोड़कर पंजीकृत किया जा सकता है
g:elephant_map
।
- डाला गया मार्ग पूर्ण, पूर्ण मार्ग होगा। स्क्रिप्ट को उस व्यवहार को बदलने के लिए घुमाया जा सकता है, लेकिन मुझे इसके आसपास नहीं मिला है।
path
या तो समर्थन नहीं करता है )। यह इस बात पर निर्भर करता है कि विम-रूटर के लिए आपका क्या उपयोग है। आप इससे क्या चाहते हैं, इसके आधार पर, हम अन्य प्लगइन्स का उपयोग कर सकते हैं। एक तरफ: मैं youcompleteme का उपयोग करता हूं, जो यदि आप टाइप करना शुरू करते हैं तो वर्तमान बफर की निर्देशिका से पथ पूरा करता है./
। देखें reddit.com/r/vim/comments/216jdd/...