2009-05-08 5 views
15

पर आधारित सोर्सिंग मुझे ऑनलाइन कई विम स्क्रिप्टिंग ट्यूटोरियल में से किसी एक में इसका उत्तर नहीं मिल रहा है। मैं जो करना चाहता हूं वह पर्यावरण चर से एक स्क्रिप्ट का फ़ाइल नाम बनाता है और फिर इसे स्रोत करता है। और मैं इसे विम में करना चाहता हूं।विम: एक स्ट्रिंग

अगर मैं एक खोल में यह करने के लिए थे मैं इस तरह कुछ करना चाहते हैं:

source ${HOME}/.vim/myscript_${FOO}.vim 

मैं विम में ऐसा कैसे करते हैं?

उत्तर

33

आप एक स्ट्रिंग का निर्माण कर सकते हैं और उसके बाद अमल का उपयोग आदेश:

exec "source " . $HOME . "/.vim/myscript_" . l:foo . ".vim" 

(यहाँ l:foo एक समारोह के भीतर से एक स्थानीय चर का उपयोग करने का एक उदाहरण है।)


संपादित करें:

लेकिन वास्तव में exec है इस विशिष्ट मामले में overkill। rampion shows here के रूप में, ऑप्स कार्य के साथ सीधे किया जा सकता है:

source $HOME/.vim/myscript_$FOO.vim 

हालांकि vim नहीं करता है हमें लगता है कि हम खोल में कर सकते थे ${...} में बड़े करीने से चर नाम लपेट, इस मामले में हम भाग्यशाली है कि HOME समाप्त हो जाता है कर रहे हैं / और FOO.

द्वारा सामान्य तौर पर, द्वारा exec यदि आप एक गैर समाप्त चरित्र से चर में से एक का पालन करना चाहता था की जरूरत होगी। उदाहरण के लिए:

exec "source " . $BAR . "_script.vim" 

BAR चर सम्मिलित हैं, जबकि निम्नलिखित एक चर BAR_script बुलाया खोजने की कोशिश करेंगे:

source $BAR_script.vim  " Possibly not what you wanted! 
+0

बहुत अच्छा, धन्यवाद! –

4

बस :source मेरे लिए काम करता है:

% export MYPATH='a/b/c' 
% mkdir -p $MYPATH 
% export MYFILE='temp.vim' 
% cat > $MYPATH/$MYFILE 
echo 'hello world' 
^D 
% vim 
:source $MYPATH/$MYFILE 
hello world 

आप तो हालांकि कुछ विम स्क्रिप्ट स्वचालित रूप से सोर्स की जानी चाहिए, बस उन्हें अपने ~/.vim/plugin/ निर्देशिका में चिपकाएं, और उन्हें लोड किया जाएगा आपके लिए इसे मैन्युअल रूप से करने के बिना।

:help expand-environment-var

 
      *:set_env* *expand-env* *expand-environment-var* 
    Environment variables in specific string options will be expanded. If the 
    environment variable exists the '$' and the following environment variable 
    name is replaced with its value. If it does not exist the '$' and the name 
    are not modified. Any non-id character (not a letter, digit or '_') may 
    follow the environment variable name. That character and what follows is 
    appended to the value of the environment variable. Examples: > 
     :set term=$TERM.new 
     :set path=/usr/$INCLUDE,$HOME/include,. 
    When adding or removing a string from an option with ":set opt-=val" or ":set 
    opt+=val" the expansion is done before the adding or removing. 

मैं vim के कुछ और की तुलना में अधिक उपयोगी मदद में बनाया गया लगता है के लिए करते हैं (जो मैं :help environment और टैब कर पहले संभावना परिणाम को पूरा करके मिल गया) से

, लेकिन यह करने के लिए कुछ समय ले करता है क्या जानने के लिए जानने के नाटक प्राप्त करें।

+0

हां, मुझे पता है कि काम करता है, लेकिन आपकी स्क्रिप्ट पथ एक बहुत ही विशिष्ट तरीके से अलग है; आप अपने पर्यावरण चर के लिए कुछ भी संगत नहीं करते हैं! – Magnus

+1

(+1) हालांकि मैग्नस ने मूल रूप से "पर्यावरण चर" कहा था, मैंने सोचा कि उसका मतलब "विम चर" है। रैंपियन का समाधान पर्यावरण चर और concatenation के साथ मेरे लिए काम करता है। : स्रोत $ HOME/.vim/myscript_ $ FOO।vim – joeytwiddle

+1

यदि आप चुस्त होना चाहते हैं तो आप हमेशा पर्यावरण चर में विम चर को स्टोर कर सकते हैं। – Zenexer