2009-05-08 17 views
15

Parece que no puedo encontrar una respuesta a esto en cualquiera de los numerosos tutoriales de scripting de Vim en línea. Lo que quiero hacer es construir un nombre de archivo de un script a partir de las variables de entorno y luego generarlo. Y quiero hacerlo en Vim.Vim: fuente basada en una cadena

Si tuviera que hacerlo de una concha que me gustaría hacer algo como esto:

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

¿Cómo lo hago en Vim?

Respuesta

33

Usted puede construir una cadena y luego usar el comando de ejecución:

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

(El l:foo Este es un ejemplo de la utilización de una variable local dentro de una función.)


Editar:

Pero de hecho exec es exceso en este caso específico. Como rampion shows here, la tarea PO se puede hacer directamente con:

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

Aunque vim no nos deja envolver los nombres de las variables de forma ordenada en ${...} como pudimos en la cáscara, en este caso tenemos la suerte de que HOME se termina por el / y FOO por el .

En general, exechabría ser necesarios si desea seguir una de las variables por un carácter no terminar. Por ejemplo:

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

sería insertar la variable BAR, mientras que el siguiente sería tratar de encontrar una variable llamada BAR_script:

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

Muy bien, gracias! –

4

A sólo :source funciona para mí:

% 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 Sin embargo, quiero tener algunas secuencias de comandos de vim compiladas automáticamente, simplemente pégalas en tu directorio ~/.vim/plugin/ y se cargarán. para ti, sin tener que hacerlo manualmente.

De :help expand-environment-var (que llegué haciendo :help environment y la pestaña de accesorios para el primer resultado 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. 

tiendo a encontrar vim incorporado en la ayuda más útil que cualquier otra cosa, pero toma un tiempo para obtener la habilidad de saber qué buscar.

+0

Sí, sé que funciona, pero la ruta del script difiere de una manera muy específica; ¡no concatenas nada a las variables de tu entorno! – Magnus

+1

(+1) Aunque Magnus originalmente dijo "variables de entorno", pensé que quería decir "variables de vim". La solución de rampion me funciona con variables de entorno y concatenación. : fuente $ HOME/.vim/myscript_ $ FOO.vim – joeytwiddle

+1

Siempre puede almacenar las variables vim en variables de entorno, si quiere ser astuto. – Zenexer

Cuestiones relacionadas