2009-05-08 7 views
15

Je n'arrive pas à trouver une réponse à cette question dans l'un des nombreux didacticiels Vim en ligne. Ce que je veux faire est de construire un nom de fichier d'un script à partir de variables d'environnement, puis le source. Et je veux le faire à Vim.Vim: source basée sur une chaîne

Si je devais le faire dans une coquille que je ferais quelque chose comme ceci:

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

Comment puis-je le fais dans vim?

Répondre

33

Vous pouvez construire une chaîne, puis utilisez la commande d'exécution:

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

(Le l:foo ici est un exemple d'utilisation d'une variable locale dans une fonction.)


Modifier:

Mais en fait exec est exagérer dans ce cas particulier. Comme raiponce shows here, la OPs tâche peut être effectuée directement avec:

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

Bien que vim ne nous emballons les noms de variables parfaitement dans ${...} comme laissez pas nous pouvions dans la coquille, dans ce cas, nous avons la chance que HOME est terminée par le / et FOO par le .

en général, execserait être nécessaire si vous voulez suivre l'une des variables par un caractère non-terminaison. Par exemple:

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

insérerait la variable BAR, alors que la suivante essaierait de trouver une variable appelée BAR_script:

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

Très bien, merci! –

4

Juste :source fonctionne pour moi:

% 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 

Si vous Si vous voulez avoir des scripts vim automatiquement, il suffit de les coller dans votre répertoire ~/.vim/plugin/, et ils seront chargés pour vous, sans avoir à le faire manuellement.

De :help expand-environment-var (que je suis arrivé en faisant :help environment et l'onglet terminé au premier résultat probable)

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

J'ai tendance à trouver l'vim construit en aide plus utile que toute autre chose, mais il prend un certain temps à avoir le don de savoir quoi chercher.

+0

Oui, je sais que cela fonctionne, mais votre chemin de script diffère d'une manière très spécifique; vous ne concaténéz rien à vos variables d'environnement! – Magnus

+1

(+1) Bien que Magnus ait initialement dit "variables d'environnement", je pensais qu'il voulait dire "variables vim". La solution de rampion fonctionne pour moi avec les variables d'environnement et la concaténation. : source $ HOME/.vim/myscript_ $ FOO.vim – joeytwiddle

+1

Vous pouvez toujours stocker les variables vim dans les variables d'environnement, si vous voulez être sournois. – Zenexer

Questions connexes