2009-05-08 13 views
15

Nie mogę znaleźć odpowiedzi na to w żadnym z licznych samouczków Vim do skryptowania online. Co chcę zrobić, to skonstruować nazwę pliku skryptu ze zmiennych środowiskowych, a następnie go utworzyć. I chcę to zrobić w Vimie.Vim: sourcing oparty na łańcuchu znaków

Gdybym miał to zrobić w powłoce zrobiłbym coś takiego:

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

Jak mogę to zrobić w vim?

Odpowiedz

33

można zbudować ciąg, a następnie użyć wykonać polecenie:

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

(l:foo tutaj jest przykład użycia zmiennej lokalnej od wewnątrz funkcji.)


Edytuj:

Ale w rzeczywistości exec jest przesadę w tym konkretnym przypadku. Jak Rampion shows here, zadaniem PO może odbywać się bezpośrednio z:

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

Chociaż vim nie pozwala nam owinąć nazwy zmiennych zgrabnie w ${...} jak mogliśmy w powłoce, w tym przypadku mamy szczęście, że HOME jest zakończony przez / i FOO przez .

w ogóle, execbyłoby być potrzebne, jeśli chcesz śledzić jednej ze zmiennych przez non-kończącego znaku. Na przykład:

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

by wstawić zmienną BAR, natomiast dodaje byłoby spróbować znaleźć zmienną o nazwie BAR_script:

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

Bardzo ładne, dzięki! –

4

zaledwie :source działa dla mnie:

% 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 

Jeśli chcesz mieć niektóre skrypty vima automatycznie, ale po prostu wstaw je do katalogu ~/.vim/plugin/, a zostaną załadowane dla ciebie, bez konieczności robienia tego ręcznie.

Od :help expand-environment-var (który dostałam wykonując :help environment i kartę ukończenie pierwszego prawdopodobnego wyniku)

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

staram się znaleźć vim wbudowanego w pomoc bardziej użyteczne niż cokolwiek innego, ale to zajmuje dużo czasu, aby zdobyć wiedzę o tym, czego szukać.

+0

Tak, wiem, że to działa, ale twoja ścieżka do skryptu różni się w bardzo specyficzny sposób; nie łączysz niczego ze zmiennymi środowiskowymi! – Magnus

+1

(+1) Chociaż Magnus pierwotnie powiedział "zmienne środowiskowe" myślałem, że miał na myśli "zmienne vim". rozwiązanie rampion działa dla mnie ze zmiennymi środowiskowymi i konkatenacją. : source $ HOME/.vim/myscript_ $ FOO.vim – joeytwiddle

+1

Zawsze możesz przechowywać zmienne vim w zmiennych środowiskowych, jeśli chcesz być sprytny. – Zenexer

Powiązane problemy