2009-05-08 16 views
15

Buraya, çevrimiçi olarak sayısız Vim komut dosyası eğiticilerinden birinde bir yanıt bulamıyorum. Yapmak istediğim, ortam değişkenlerinden bir komut dosyasının bir dosya adını oluşturmak ve sonra kaynak oluşturmak. Ve bunu Vim'de yapmak istiyorum. Ben Vim Bunu nasılVim: Bir dize temel alan kaynak kullanımı

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

: Bir kabuk içinde bunu yapmak için olsaydı

Böyle bir şey yapar mısın?

cevap

33

Bir dize oluşturmak ve sonra yürütmek kullanabileceğiniz komut:

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

(burada l:foo bir işlev içinde bir yerel değişken kullanarak bir örnektir.)


Düzenleme:

Ama aslında exec olduğunu Bu özel durumda overkill. vim biz kabuğunda olabilir gibi bize ${...} düzgünce değişken isimleri sarmak izin olmamasına rağmen biz HOME sonlandırılır o şanslı bu durumda,

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

: rampion shows here olarak, operasyonel programlarda görev ile doğrudan yapılabilir olmayan bir sonlandırma karakteri değişkenlerden birini takip etmek istiyorsa Genelde .

tarafından / ve FOO tarafından exec gerekli olacaktır. Benim için

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

Çok hoş, teşekkürler! –

4

Sadece :source işleri:

% 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 

Eğer Örneğin: Aşağıdaki BAR_script adlı bir değişken bulmaya çalışacağını söyledi ederken

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

, BAR değişken eklemek istiyorum Yine de bazı vim betikleri otomatik olarak kaynaklanmak istiyorsa, sadece ~/.vim/plugin/ dizininize yapıştırın ve bunlar yüklenecek sizin için, el ile yapmak zorunda kalmadan.

Ben vim en herşeyden daha kullanışlı yardım inşa bulmak eğilimindedir

 
      *: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. 

(Ben ilk olasılıkla sonuca tamamlayarak :help environment ve sekme yaparak var) :help expand-environment-var itibaren

ama bir süre sürer neyi arayacağınızı bilmenin hilesi olsun.

+0

Evet, bunun işe yaradığını biliyorum, ancak senaryo yolunuz çok özel bir şekilde farklılık gösteriyor; Ortam değişkenlerinize herhangi bir şey bağlamazsınız! – Magnus

+1

(+1) Magnus orijinal olarak "ortam değişkenleri" demesine rağmen "vim değişkenleri" anlamına geldiğini düşündüm. rampion çözümü benim için çevresel değişkenler ve birleştirme ile çalışıyor. : Kaynak $ HOME/.vim/myscript_ $ FOO.vim – joeytwiddle

+1

Sinsi görünmek istiyorsanız, vim değişkenlerini her zaman ortam değişkenlerinde saklayabilirsiniz. – Zenexer

İlgili konular