मैंने सभी समाधान आजमाए हैं मेरे लिए वर्तमान (2018) मैकविम (8.1) या नियोविम (0.3.1) में काम कर रहा है। चूंकि मेरा प्रश्न वहां से हटाया जा रहा है, इसलिए मैंने एक नए प्रश्न में पूछने का फैसला किया।

क्या 7 साल पहले अंतिम उत्तर के बाद से विम में कुछ बदल गया है? ये सभी समाधान मुझे वर्तमान फ़ाइल का स्थान दे रहे हैं, न कि स्क्रिप्ट का स्थान। क्या स्पेसविम प्रभावित कर रहा है कि ये कार्य कैसे काम करते हैं?

यह वह कोड है जिसे मैं ठीक करने का प्रयास कर रहा हूं:

function! TeaCodeExpand()
    <<some code>>
    echom fnamemodify(resolve(expand('<sfile>:p')), ':h')
    <<other code>>
endfunction

मेरे पास पथ दिखाने के लिए एक इकोम है जो वर्तमान स्क्रिप्ट फ़ाइल होनी चाहिए, लेकिन यह हमेशा वर्तमान में संपादित फ़ाइल लौटाती है। अगली पंक्ति vimscript फ़ाइल के ऊपर निर्देशिका में AppleScript निष्पादित करना है। मैं पथ को हार्ड कोड कर सकता हूं और सब कुछ ठीक काम करता है। लेकिन, मैं इसे वैसे ही काम नहीं कर सकता। पूरा कोड यहाँ है: github.com/raguay/TeaCode-Vim-Extension

1
Richard Guay 13 नवम्बर 2018, 09:37

1 उत्तर

सबसे बढ़िया उत्तर

<sfile> को प्लग इन के फाइलस्पेक में विस्तारित करने के लिए, विस्तार स्क्रिप्ट के स्रोत होने पर होना चाहिए। देखें :help :<sfile>:

  <sfile>    When executing a ":source" command, is replaced with the
             file name of the sourced file.
             When executing a function, is replaced with:
             "function {function-name}[{lnum}]"

यदि आपको बाद में किसी फ़ंक्शन में फ़ाइलस्पेक की आवश्यकता है, तो आपको इसे एक (स्क्रिप्ट-स्थानीय) चर में संग्रहीत करने की आवश्यकता है, और संदर्भ से फ़ंक्शन से:

let s:scriptPath = fnamemodify(resolve(expand('<sfile>:p')), ':h')
function! TeaCodeExpand()
    <<some code>>
    echom s:scriptPath
    <<other code>>
endfunction
1
Ingo Karkat 13 नवम्बर 2018, 09:48