2009-05-08 10 views
15

Ich kann nicht finden, eine Antwort auf diese in einer der zahlreichen Vim Scripting Tutorials online zu finden. Ich möchte den Dateinamen eines Skripts aus den Umgebungsvariablen konstruieren und dann einlesen. Und ich möchte es in Vim machen.Vim: Sourcing basierend auf einer Zeichenfolge

Wenn ich es in einer Schale zu tun wäre, würde ich so etwas tun:

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

Wie kann ich es in Vim tun?

Antwort

33

Sie können eine Zeichenfolge aufbauen und dann Befehl ausführen:

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

(Die l:foo hier ist ein Beispiel eine lokale Variable der Verwendung innerhalb einer Funktion.)


Bearbeiten:

Aber in der Tat exec ist Overkill in diesem speziellen Fall. Als rampion shows here kann die OPs Aufgabe direkt mit erfolgen:

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

Obwohl vim uns die Variablennamen nicht lassen wickeln ordentlich in ${...} wie wir in der Schale konnte, in diesem Fall haben wir das Glück, dass HOME wird beendet durch die / und FOO durch die .

im allgemeinen execwürde erforderlich, wenn Sie eine der Variablen durch einen nicht abbrechenden Charakter folgen wollen. Zum Beispiel:

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

würde legen Sie die BAR Variable, während die folgenden eine Variable BAR_script genannt zu finden versuchen würde:

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

Sehr schön, danke! –

4

Nur :source funktioniert bei mir:

% 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 

Wenn Sie Wenn Sie möchten, dass einige vim-Skripte automatisch erstellt werden, legen Sie sie einfach in Ihr Verzeichnis ~/.vim/plugin/, und sie werden geladen für Sie, ohne es manuell tun zu müssen.

Von :help expand-environment-var (die ich bekam von zum ersten wahrscheinlichen Ergebnis abgeschlossen :help environment und Reiter tun)

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

Ich neige dazu, Vims in Hilfe nützlicher als alles anderes gebaut zu finden, aber es dauert eine Weile, bis das Talent zu wissen, wonach zu suchen.

+0

Ja, ich weiß, dass das funktioniert, aber Ihr Skriptpfad unterscheidet sich auf eine sehr spezifische Weise; Sie verketten nichts mit Ihren Umgebungsvariablen! – Magnus

+1

(+1) Obwohl Magnus ursprünglich "Umgebungsvariablen" sagte, dachte ich, er meinte "vim-Variablen". Die Lösung von rampion funktioniert für mich mit Umgebungsvariablen und Verkettung. : Quelle $ HOME/.vim/Meinskript_ $ FOO.vim – joeytwiddle

+1

Sie könnten die vim-Variablen immer in Umgebungsvariablen speichern, wenn Sie hinterhältig sein wollten. – Zenexer

Verwandte Themen